@defra/flood-webchat 0.0.1-beta.33 → 0.0.1-beta.35

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
@@ -32,13 +32,15 @@ function Availability() {
32
32
  setChatVisibility,
33
33
  unseenCount,
34
34
  threadId,
35
- setUnseenCount
35
+ setUnseenCount,
36
+ setInstigatorId
36
37
  } = (0,_store_useApp__WEBPACK_IMPORTED_MODULE_4__.useApp)();
37
38
  const buttonRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)();
38
39
  const onClick = e => {
39
40
  e.preventDefault();
40
41
  setUnseenCount(0);
41
42
  setChatVisibility(!isChatOpen);
43
+ setInstigatorId(e.target.id);
42
44
  if (!isChatOpen) {
43
45
  (0,_lib_history_js__WEBPACK_IMPORTED_MODULE_5__.historyPushState)();
44
46
  } else {
@@ -89,6 +91,7 @@ function Availability() {
89
91
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
90
92
  className: "wc-availability__inner"
91
93
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
94
+ id: "webchat-start-chat-link",
92
95
  className: "wc-availability__link",
93
96
  href: "#webchat",
94
97
  draggable: "false",
@@ -221,6 +224,7 @@ function Chat({
221
224
  }, connectionHeadlineText), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
222
225
  className: "wc-status__link",
223
226
  href: "#",
227
+ role: "button",
224
228
  "data-module": "govuk-button",
225
229
  onClick: onEndChatScreen
226
230
  }, "End chat")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
@@ -563,6 +567,7 @@ function Panel() {
563
567
  const {
564
568
  sdk,
565
569
  availability,
570
+ instigatorId,
566
571
  thread,
567
572
  threadId,
568
573
  setThread,
@@ -587,6 +592,7 @@ function Panel() {
587
592
  }
588
593
  setChatVisibility(false);
589
594
  (0,_lib_history_js__WEBPACK_IMPORTED_MODULE_13__.historyReplaceState)();
595
+ document.getElementById(instigatorId)?.focus();
590
596
  }
591
597
  }, [thread, threadId, setUnseenCount, setChatVisibility]);
592
598
 
@@ -734,7 +740,8 @@ function EndChat({
734
740
  setMessages,
735
741
  agentStatus,
736
742
  thread,
737
- setUnseenCount
743
+ setUnseenCount,
744
+ isKeyboard
738
745
  } = (0,_store_useApp_js__WEBPACK_IMPORTED_MODULE_2__.useApp)();
739
746
  const confirmEndChat = async e => {
740
747
  e.preventDefault();
@@ -750,6 +757,13 @@ function EndChat({
750
757
  }
751
758
  onEndChatConfirm(e);
752
759
  };
760
+ (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
761
+ if (isKeyboard) {
762
+ setTimeout(() => {
763
+ document.querySelector('#confirmEndChat').focus();
764
+ }, 10);
765
+ }
766
+ }, []);
753
767
  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_panel_panel_header_jsx__WEBPACK_IMPORTED_MODULE_1__.PanelHeader, null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
754
768
  className: "wc-body"
755
769
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
@@ -770,6 +784,7 @@ function EndChat({
770
784
  href: "#resumeChat",
771
785
  role: "button",
772
786
  className: "wc-link govuk-link",
787
+ "data-module": "govuk-button",
773
788
  onClick: onChatScreen
774
789
  }, "No, resume chat")))));
775
790
  }
@@ -808,7 +823,9 @@ function Feedback({
808
823
  className: "govuk-link",
809
824
  href: "#",
810
825
  target: "_blank",
811
- rel: "noreferrer"
826
+ rel: "noreferrer",
827
+ role: "button",
828
+ "data-module": "govuk-button"
812
829
  }, "Feedback Link")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
813
830
  id: "feedback-cancel",
814
831
  className: "wc-link govuk-link",
@@ -1129,6 +1146,7 @@ function Settings({
1129
1146
  href: "#",
1130
1147
  className: "wc-button govuk-button",
1131
1148
  "data-module": "govuk-button",
1149
+ role: "button",
1132
1150
  onClick: onSave
1133
1151
  }, "Save"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
1134
1152
  id: "settings-cancel",
@@ -1197,7 +1215,8 @@ __webpack_require__.r(__webpack_exports__);
1197
1215
 
1198
1216
  const SkipLink = () => {
1199
1217
  const {
1200
- thread
1218
+ thread,
1219
+ setInstigatorId
1201
1220
  } = (0,_store_useApp__WEBPACK_IMPORTED_MODULE_2__.useApp)();
1202
1221
  if (!thread) {
1203
1222
  return null;
@@ -1206,10 +1225,17 @@ const SkipLink = () => {
1206
1225
  if (!targetContainer) {
1207
1226
  return null;
1208
1227
  }
1228
+ const onClick = e => {
1229
+ e.preventDefault();
1230
+ setInstigatorId(e.target.id);
1231
+ window.location.hash = '#webchat';
1232
+ };
1209
1233
  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)( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
1234
+ id: "webchat-skip-link",
1210
1235
  href: "#webchat",
1211
1236
  className: "govuk-skip-link",
1212
1237
  "data-module": "govuk-skip-link",
1238
+ onClick: onClick,
1213
1239
  "data-wc-skiplink": true,
1214
1240
  "data-wc-open-btn": true
1215
1241
  }, "Skip to webchat"), targetContainer));
@@ -1284,9 +1310,6 @@ const useFocusedElements = screen => {
1284
1310
  document.addEventListener('keydown', onKeyDown);
1285
1311
  return () => {
1286
1312
  setAriaHidden();
1287
- document.body.querySelector('.wc-availability__link')?.focus({
1288
- preventScroll: true
1289
- });
1290
1313
  document.removeEventListener('keydown', onKeyDown);
1291
1314
  };
1292
1315
  }, [panelElements]);
@@ -1677,6 +1700,12 @@ const AppProvider = ({
1677
1700
  payload: unseenCount
1678
1701
  });
1679
1702
  };
1703
+ const setInstigatorId = id => {
1704
+ dispatch({
1705
+ type: 'SET_INSTIGATOR_ID',
1706
+ payload: id
1707
+ });
1708
+ };
1680
1709
 
1681
1710
  /**
1682
1711
  * Application-wide state and state functions
@@ -1691,6 +1720,7 @@ const AppProvider = ({
1691
1720
  setMessages,
1692
1721
  setUnseenCount,
1693
1722
  setChatVisibility,
1723
+ setInstigatorId,
1694
1724
  onLiveChatRecovered,
1695
1725
  onAssignedAgentChanged,
1696
1726
  onAgentTypingStarted,
@@ -1806,6 +1836,12 @@ const setUnseenCount = (state, payload) => {
1806
1836
  unseenCount: payload
1807
1837
  };
1808
1838
  };
1839
+ const setInstigatorId = (state, payload) => {
1840
+ return {
1841
+ ...state,
1842
+ instigatorId: payload
1843
+ };
1844
+ };
1809
1845
  const toggleIsMobile = (state, payload) => {
1810
1846
  return {
1811
1847
  ...state,
@@ -1831,6 +1867,7 @@ const actionsMap = {
1831
1867
  SET_AGENT_TYPING: setAgentIsTyping,
1832
1868
  SET_AGENT_STATUS: setAgentStatus,
1833
1869
  SET_UNSEEN_COUNT: setUnseenCount,
1870
+ SET_INSTIGATOR_ID: setInstigatorId,
1834
1871
  TOGGLE_IS_MOBILE: toggleIsMobile,
1835
1872
  TOGGLE_IS_KEYBOARD: toggleIsKeyboard
1836
1873
  };
@@ -1875,6 +1912,7 @@ const initialState = {
1875
1912
  thread: null,
1876
1913
  messages: [],
1877
1914
  unseenCount: 0,
1915
+ instigatorId: null,
1878
1916
  agent: null,
1879
1917
  agentStatus: null,
1880
1918
  isAgentTyping: false,
@@ -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/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/feedback.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/settings.jsx","webpack://@defra/flood-webchat/./src/client/components/screens/unavailable.jsx","webpack://@defra/flood-webchat/./src/client/components/skip-link.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/history.js","webpack://@defra/flood-webchat/./src/client/lib/message-notification.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/constants.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 \"luxon\"","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 \"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 } from 'react'\n\nimport { classnames } from '../../lib/classnames'\nimport { Panel } from '../panel/panel.jsx'\nimport { SkipLink } from '../skip-link.jsx'\n\nimport { useApp } from '../../store/useApp'\nimport { historyPushState, historyReplaceState } from '../../lib/history.js'\n\nexport function Availability () {\n const { availability, isChatOpen, setChatVisibility, unseenCount, threadId, setUnseenCount } = useApp()\n\n const buttonRef = useRef()\n\n const onClick = e => {\n e.preventDefault()\n setUnseenCount(0)\n setChatVisibility(!isChatOpen)\n\n if (!isChatOpen) {\n historyPushState()\n } else {\n historyReplaceState()\n }\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 setUnseenCount(0)\n setChatVisibility(!isChatOpen)\n }\n }\n\n useEffect(() => {\n const onScroll = () => {\n if (!threadId) {\n return\n }\n\n if (availability !== 'AVAILABLE') {\n return\n }\n\n const rect = buttonRef.current.parentElement.getBoundingClientRect()\n\n const isBelowFold = rect.top + 35 > (window.innerHeight || document.documentElement.clientHeight)\n const isFixed = !isChatOpen && isBelowFold\n\n document.documentElement.classList.toggle('wc-u-scroll-padding', isFixed)\n document.body.classList.toggle('wc-u-scroll-padding', isFixed)\n buttonRef.current.classList.toggle('wc-availability--fixed', isFixed)\n }\n\n document.addEventListener('scroll', onScroll)\n onScroll()\n\n return () => {\n document.removeEventListener('scroll', onScroll)\n }\n }, [threadId, isChatOpen, availability])\n\n let TextComponent = (<>Show chat</>)\n\n if (!threadId) {\n TextComponent = (<>Start chat</>)\n }\n\n switch (availability) {\n case 'AVAILABLE':\n return (\n <>\n <div\n className={classnames('wc-availability', 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 role='button'\n data-module='govuk-button'\n >\n {TextComponent}\n {unseenCount > 0 && !isChatOpen ? <span className='wc-availability__unseen'>{unseenCount}</span> : null}\n </a>\n </div>\n </div>\n {isChatOpen && <Panel />}\n <SkipLink />\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'\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'\nimport { formatTranscript } from '../../lib/transform-messages.js'\n\nexport function Chat ({ onEndChatScreen, onSettingsScreen }) {\n const { availability, thread, messages, agent, agentStatus, isAgentTyping, settings, isKeyboard } = useApp()\n\n const [userMessage, setUserMessage] = useState('')\n const [focusVisibleWithin, setFocusVisibleWithin] = useState(false)\n\n const messageRef = useRef()\n\n useTextareaAutosize(messageRef.current, userMessage)\n\n useEffect(() => {\n if (settings.scroll && 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 = () => {\n if (messageRef.current.value.length === 0) {\n return\n }\n\n try {\n thread.sendTextMessage(messageRef.current.value.trim())\n } catch (err) {\n console.log('[Chat Error] sendMessage', err)\n }\n\n setUserMessage('')\n }\n const handleKeyPress = e => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n sendMessage()\n }\n }\n\n const handleSubmit = e => {\n e.preventDefault()\n sendMessage()\n }\n\n const saveChat = () => {\n const transcript = formatTranscript(messages)\n\n const saveChatLink = document.querySelector('#transcript-download')\n\n saveChatLink.setAttribute('href', `data:text/plain;charset=utf-8,${transcript}`)\n }\n\n return (\n <>\n <PanelHeader />\n\n <div className='wc-status'>\n <p className='wc-status__availability'>{connectionHeadlineText}</p>\n <a className='wc-status__link' href='#' data-module='govuk-button' onClick={onEndChatScreen}>End chat</a>\n </div>\n\n <div className='wc-body' tabIndex='0'>\n <ul className='wc-chat'>\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 outbound'>\n <div className='wc-chat__from'>{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\n <PanelFooter>\n <form className={`wc-form${focusVisibleWithin ? ' wc-focus-within' : ''}`} noValidate onSubmit={handleSubmit}>\n <label className='govuk-label wc-form__label' 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'\n id='wc-form-textarea'\n name='message'\n onChange={onChange}\n onKeyDown={handleKeyPress}\n onFocus={() => { setFocusVisibleWithin(isKeyboard) }}\n onBlur={() => { setFocusVisibleWithin(false) }}\n value={userMessage}\n />\n\n <input\n type='submit'\n className='wc-form__button govuk-button'\n value='Send'\n data-prevent-double-click='true'\n />\n </form>\n\n <div className='wc-footer__settings'>\n <a\n href='#'\n id='wc-settings'\n className='wc-footer__settings-link'\n data-module='govuk-button'\n onClick={onSettingsScreen}\n >\n Settings\n </a>\n <a\n href='#'\n id='transcript-download'\n className='wc-footer__settings-link'\n data-module='govuk-button'\n download='floodline-webchat-transcript.txt'\n onClick={saveChat}\n >\n Save chat\n </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='wc-error-summary__title 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 wc-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', outbound ? 'outbound' : 'inbound')}>\n <div className='wc-chat__from'>\n {messageOwnerSameAsPrevious ? null : <span>{outbound ? message.assignee : 'You'}</span>}\n <span className='govuk-visually-hidden'>:</span>\n </div>\n <div className={classnames('wc-chat__text', outbound ? 'outbound' : 'inbound')}>\n {message.text}\n </div>\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'\nimport { historyReplaceState } from '../../lib/history.js'\n\nexport function PanelHeader () {\n const { thread, threadId, setChatVisibility, setUnseenCount, isMobile } = useApp()\n\n const onClose = e => {\n e.preventDefault()\n setChatVisibility(false)\n historyReplaceState()\n\n if (threadId) {\n thread?.lastMessageSeen()\n setUnseenCount(0)\n }\n }\n\n const BackButtonComponent = (\n <button className='wc-header__back' 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='M4.828,11L12.314,18.485L10.899,19.899L1,10L10.899,0.101L12.314,1.515L4.828,9L19,9L19,11L4.828,11Z' fill='currentColor' />\n </svg>\n </button>\n )\n\n const CloseButtonComponent = (\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 const MinimiseButtonComponent = (\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 const isMobileAndHasHistory = isMobile && window.history.state\n const isMobileAndNoHistory = isMobile && !window.history.state\n\n let RightButtonComponent = CloseButtonComponent\n\n if (thread) {\n RightButtonComponent = MinimiseButtonComponent\n\n if (isMobileAndNoHistory) {\n RightButtonComponent = MinimiseButtonComponent\n }\n }\n\n if (!thread && isMobileAndNoHistory) {\n RightButtonComponent = CloseButtonComponent\n }\n\n if (isMobileAndHasHistory) {\n RightButtonComponent = null\n }\n\n return (\n <div className='wc-header'>\n {isMobileAndHasHistory ? BackButtonComponent : null}\n\n <h2 id='wc-header-title' className='wc-header__title'>\n Floodline Webchat\n </h2>\n\n {RightButtonComponent}\n </div>\n )\n}\n","import React, { useEffect, useState, useCallback } from 'react'\nimport { createPortal } from 'react-dom'\nimport { classnames } from '../../lib/classnames.js'\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'\nimport { Settings } from '../screens/settings.jsx'\nimport { Feedback } from '../screens/feedback.jsx'\n\nimport { useApp } from '../../store/useApp.js'\nimport { useChatSdk } from '../../store/useChatSdk.js'\nimport { useFocusedElements } from '../../hooks/useFocusedElements.js'\nimport { historyReplaceState } from '../../lib/history.js'\n\nexport function Panel () {\n const { sdk, availability, thread, threadId, setThread, setThreadId, setChatVisibility, setMessages, setUnseenCount, isMobile, isKeyboard } = useApp()\n const { fetchThread, fetchMessages } = useChatSdk(sdk)\n\n const [screen, setScreen] = useState(threadId ? 2 : 0)\n\n useFocusedElements(screen)\n\n const onEscapeKey = useCallback(e => {\n if (e.key === 'Escape' || e.key === 'Esc') {\n if (threadId) {\n thread?.lastMessageSeen()\n setUnseenCount(0)\n }\n setChatVisibility(false)\n historyReplaceState()\n }\n }, [thread, threadId, setUnseenCount, setChatVisibility])\n\n /**\n * We need ammend classes on the body element to handle mobile behaviour\n */\n useEffect(() => {\n document.body.classList.remove('wc-u-hidden')\n document.getElementsByTagName('html')[0].classList.add('wc-u-html')\n document.body.classList.add('wc-u-body')\n return () => {\n document.getElementsByTagName('html')[0].classList.remove('wc-u-html')\n document.body.classList.remove('wc-u-body')\n }\n }, [isMobile])\n\n /**\n * Initializes the eventListener for pressing the escape key\n */\n useEffect(() => {\n document.addEventListener('keydown', onEscapeKey)\n\n return () => {\n document.removeEventListener('keydown', onEscapeKey)\n }\n }, [onEscapeKey, setChatVisibility])\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 if (thread) {\n thread.lastMessageSeen()\n setUnseenCount(0)\n setScreen(2)\n } else {\n recover()\n }\n }\n }, [thread, threadId])\n\n const handleScreenChange = newScreen => e => {\n e.preventDefault()\n setScreen(newScreen)\n }\n\n const goToPreChatScreen = handleScreenChange(0)\n const goToRequestChatScreen = handleScreenChange(1)\n const goToChatScreen = handleScreenChange(2)\n const goToEndChatScreen = handleScreenChange(3)\n const goToFeedbackScreen = handleScreenChange(4)\n const goToSettingsScreen = handleScreenChange(5)\n\n let ScreenComponent\n\n switch (screen) {\n case 0:\n ScreenComponent = <PreChat onContinue={goToRequestChatScreen} />\n break\n case 1:\n ScreenComponent = <RequestChat onPreChatScreen={goToPreChatScreen} />\n break\n case 2:\n ScreenComponent = <Chat onSettingsScreen={goToSettingsScreen} onEndChatScreen={goToEndChatScreen} />\n break\n case 3:\n ScreenComponent = <EndChat onChatScreen={goToChatScreen} onEndChatConfirm={goToFeedbackScreen} />\n break\n case 4:\n ScreenComponent = <Feedback onCancel={() => setChatVisibility(false)} />\n break\n case 5:\n ScreenComponent = <Settings onCancel={goToChatScreen} />\n break\n default:\n ScreenComponent = <PreChat onContinue={goToRequestChatScreen} />\n }\n\n if (availability === 'UNAVAILABLE') {\n ScreenComponent = <Unavailable />\n }\n\n const Component = (\n <div id='wc-panel' role='dialog' className={classnames('wc-panel', isKeyboard && 'wc-focus-visible')} tabIndex='-1' aria-modal='true' aria-labelledby='wc-header-title'>\n <div className='wc-panel__inner'>\n {ScreenComponent}\n </div>\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'\nimport { useApp } from '../../store/useApp.js'\n\nexport function EndChat ({ onChatScreen, onEndChatConfirm }) {\n const { setCustomerId, setThreadId, setMessages, agentStatus, thread, setUnseenCount } = useApp()\n\n const confirmEndChat = async e => {\n e.preventDefault()\n\n setThreadId()\n setMessages([])\n setCustomerId()\n thread.lastMessageSeen()\n setUnseenCount(0)\n\n // End chat if still open\n if (agentStatus !== 'closed') {\n thread.endChat()\n }\n\n onEndChatConfirm(e)\n }\n\n return (\n <>\n <PanelHeader />\n <div className='wc-body'>\n <div className='wc-content'>\n <h3 className='wc-heading' aria-live='polite'>Are you sure you want to end the chat?</h3>\n <div className='govuk-button-group'>\n <a href='#endChat' role='button' className='wc-button govuk-button' data-module='govuk-button' id='confirmEndChat' onClick={confirmEndChat}>Yes, end chat</a>\n <a href='#resumeChat' role='button' className='wc-link govuk-link' onClick={onChatScreen}>No, resume chat</a>\n </div>\n </div>\n </div>\n </>\n )\n}\n","import React from 'react'\nimport { PanelHeader } from '../panel/panel-header.jsx'\n\nexport function Feedback ({ onCancel }) {\n const feedbackCancel = async e => {\n onCancel(e)\n }\n\n return (\n <>\n <PanelHeader />\n\n <div className='wc-body'>\n <div className='wc-content'>\n <h3 id='wc-subtitle' className='wc-heading'>Give Feedback on Floodline webchat</h3>\n <p>Please note we’re unable to respond to feedback.</p>\n <p><a className='govuk-link' href='#' target='_blank' rel='noreferrer'>Feedback Link</a></p>\n <p><a id='feedback-cancel' className='wc-link govuk-link' href='#' data-module='govuk-button' role='button' onClick={feedbackCancel}>Close</a></p>\n </div>\n </div>\n </>\n )\n}\n","import React from 'react'\nimport { PanelHeader } from '../panel/panel-header.jsx'\n\nexport function PreChat ({ onContinue }) {\n return (\n <>\n <PanelHeader />\n\n <div className='wc-body'>\n <div className='wc-content'>\n <h3 className='wc-heading' aria-live='polite'>What you can use webchat for</h3>\n <p>Webchat lets you talk directly to a Floodline adviser.</p>\n\n <p>You can use webchat to get:</p>\n <ul className='wc-list'>\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 <p>\n There are other ways to&nbsp;\n <a className='govuk-link' href='https://www.gov.uk/sign-up-for-flood-warnings' target='_blank' rel='noreferrer'>\n sign up for flood warnings\n </a>\n &nbsp;and&nbsp;\n <a className='govuk-link' href='https://www.fws.environment-agency.gov.uk/app/olr/login' target='_blank' rel='noreferrer'>\n manage your flood warnings account\n </a>.\n </p>\n <p>\n Do not use webchat to&nbsp;\n <a\n className='govuk-link'\n href='https://www.gov.uk/report-flood-cause'\n target='_blank'\n rel='noreferrer'\n >\n report a flood\n </a>.\n </p>\n\n <button className='govuk-button wc-button govuk-!-margin-top-1' data-module='govuk-button' onClick={onContinue}>Continue</button>\n\n <h3 className='wc-heading'>Other flood information</h3>\n\n <p>Call Floodline for all other flood and flood warning information.</p>\n <p>\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' target='_blank' rel='noreferrer'>Find out more about call charges</a>\n </p>\n </div>\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 ({ onPreChatScreen }) {\n const { sdk, setCustomerId, setThreadId, setThread } = useApp()\n const { fetchCustomerId, fetchThread } = useChatSdk(sdk)\n const [errors, setErrors] = useState({})\n const [questionLength, setQuestionLength] = useState(0)\n const [isButtonDisabled, setButtonDisabled] = useState(false)\n\n const nameRef = useRef()\n const questionRef = useRef()\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 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 buttonLabel = isButtonDisabled ? 'Requesting...' : 'Request Chat'\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 setButtonDisabled(true)\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 thread.setCustomField('threadid', threadId)\n } catch (err) {\n console.log('[Request Chat Error]', err)\n }\n }\n\n setErrors(errs)\n }\n\n return (\n <>\n <PanelHeader />\n\n <div className='wc-body'>\n <div className='wc-content'>\n <a href='#' className='wc-back-link govuk-back-link' onClick={onPreChatScreen}>\n What you can use webchat for\n </a>\n\n <ErrorSummary errors={errors} />\n\n <h3 className='wc-heading' aria-live='polite'>\n Your name and question\n </h3>\n\n <form>\n <div className={classnames('wc-form-group', 'govuk-form-group', errors.name && 'govuk-form-group--error')}>\n <label className='wc-label 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('wc-input', '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='wc-form-group 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='wc-label 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('wc-textarea', 'govuk-textarea', 'govuk-js-character-count', !isQuestionLengthValid || errors.question ? 'govuk-textarea--error' : '')}\n data-testid='request-chat-user-question'\n />\n <div\n id='wc-question-info'\n className='wc-hint govuk-hint govuk-char-count__msg'\n style={{ color: `${!isQuestionLengthValid ? '#d4351c' : ''}` }}\n aria-hidden='true'\n >\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 <div className='wc-inset-text govuk-inset-text'>\n By selecting 'Request chat' you agree to the terms of our&nbsp;\n <a href='https://check-for-flooding.service.gov.uk/privacy-notice' target='_blank' rel='noreferrer' className='govuk-link'>privacy notice</a>.\n </div>\n\n <button\n className='wc-button govuk-button govuk-!-margin-top-1'\n data-module='govuk-button'\n onClick={onRequestChat}\n disabled={isButtonDisabled}\n >\n {buttonLabel}\n </button>\n </form>\n </div>\n </div>\n </>\n )\n}\n","import React, { useState } from 'react'\nimport { PanelHeader } from '../panel/panel-header.jsx'\n\nimport { useApp } from '../../store/useApp.js'\n\nexport function Settings ({ onCancel }) {\n const { settings, setSettings } = useApp()\n\n const [optionAudio, setOptionAudio] = useState(settings.audio)\n const [optionScroll, setOptionScroll] = useState(settings.scroll)\n\n const onSave = e => {\n e.preventDefault()\n\n setSettings({ audio: optionAudio, scroll: optionScroll })\n onCancel(e)\n }\n\n return (\n <>\n <PanelHeader />\n\n <div className='wc-body'>\n <div className='wc-content'>\n <fieldset className='govuk-fieldset govuk-!-margin-bottom-4'>\n <legend className='govuk-fieldset__legend govuk-fieldset__legend'>\n <h3 id='wc-subtitle' className='wc-heading'>Change settings</h3>\n </legend>\n <div className='govuk-checkboxes govuk-checkboxes--small' data-module='govuk-checkboxes'>\n <div className='govuk-checkboxes__item'>\n <input\n id='audio'\n name='audio'\n type='checkbox'\n value='audio'\n className='govuk-checkboxes__input'\n defaultChecked={optionAudio}\n onChange={() => setOptionAudio(!optionAudio)}\n />\n <label className='wc-label govuk-label govuk-checkboxes__label' htmlFor='audio'>\n Play a sound when receiving a new message\n </label>\n </div>\n <div className='govuk-checkboxes__item'>\n <input\n id='scroll'\n name='scroll'\n type='checkbox'\n value='scroll'\n className='govuk-checkboxes__input'\n defaultChecked={optionScroll}\n onChange={() => setOptionScroll(!optionScroll)}\n />\n <label className='wc-label govuk-label govuk-checkboxes__label' htmlFor='scroll'>\n Scroll automatically to a new message\n </label>\n </div>\n </div>\n </fieldset>\n\n <div className='govuk-button-group'>\n <a id='settings-save' href='#' className='wc-button govuk-button' data-module='govuk-button' onClick={onSave}>Save</a>\n <a id='settings-cancel' href='#' className='wc-link govuk-link' data-module='govuk-button' role='button' onClick={onCancel}>Cancel</a>\n </div>\n </div>\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 React from 'react'\nimport { createPortal } from 'react-dom'\nimport { useApp } from '../store/useApp'\n\nexport const SkipLink = () => {\n const { thread } = useApp()\n\n if (!thread) {\n return null\n }\n\n const targetContainer = document.getElementById('skip-links')\n\n if (!targetContainer) {\n return null\n }\n\n return (\n <>\n {createPortal(\n <a\n href='#webchat'\n className='govuk-skip-link'\n data-module='govuk-skip-link'\n data-wc-skiplink\n data-wc-open-btn\n >\n Skip to webchat\n </a>,\n targetContainer\n )}\n </>\n )\n}\n","import { useState, useEffect, useCallback } from 'react'\n\nconst ariaHidden = 'aria-hidden'\nconst dataWcInert = 'data-wc-inert'\n\nconst setAriaHidden = isInert => {\n for (const node of document.body.children) {\n if (node.id !== 'wc-panel') {\n // We only want to toggle elements that aren't already inert\n if (isInert && !node.getAttribute(ariaHidden)) {\n node.setAttribute(ariaHidden, 'true')\n node.setAttribute(dataWcInert, '')\n } else if (node.hasAttribute(dataWcInert)) {\n node.removeAttribute(ariaHidden)\n node.removeAttribute(dataWcInert)\n }\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({ preventScroll: true })\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","export const historyPushState = () => {\n const url = window.location.href.split('#')[0]\n window.history.pushState({ history: true }, null, `${url}#webchat`)\n}\n\nexport const historyReplaceState = () => {\n if (window.history.state?.history) {\n return window.history.back()\n }\n\n const url = window.location.href.split('#')[0]\n return window.history.replaceState(null, null, url)\n}\n","export const messageNotification = audioUrl => {\n let buffer\n\n const context = new (window.AudioContext || window.webkitAudioContext)()\n\n if (context.state === 'suspended') {\n const events = ['touchstart', 'touchend', 'mousedown', 'wheel', 'keydown', 'click']\n\n const unlock = _e => {\n events.forEach(event => {\n document.body.removeEventListener(event, unlock)\n })\n\n context.resume()\n }\n\n events.forEach(event => {\n document.body.addEventListener(event, unlock, false)\n })\n }\n\n fetch(audioUrl)\n .then(response => response.arrayBuffer())\n .then(data => context.decodeAudioData(data))\n .then(decodedData => {\n buffer = decodedData\n })\n .catch(console.error)\n\n return () => {\n const source = context.createBufferSource()\n source.buffer = buffer\n source.connect(context.destination)\n source.start()\n }\n}\n","import { DateTime } from 'luxon'\n\nexport const transformMessage = message => {\n return {\n id: message.id,\n text: 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\nexport const formatTranscript = messages => {\n const now = DateTime.local()\n now.setZone('Europe/London')\n\n let string = `Floodline webchat transcript, ${now.toFormat('HH:mm:ss a, dd LLLL yyyy')}\\n\\n`\n\n for (const message of messages) {\n const { text, direction, user, assignee, createdAt } = message\n\n const author = direction === 'inbound' ? user : `${assignee} (Floodline adviser)`\n const date = DateTime.fromJSDate(new Date(createdAt)).setZone('Europe/London').toFormat('HH:mm:ss a, dd LLLL yyyy')\n\n string += `[${date}] ${author}: \\n${text}\\n\\n`\n }\n\n string = string.replace(/<a\\b[^>]*>/i, '').replace(/<\\/a>/i, '')\n\n return encodeURIComponent(string)\n}\n","import React, { createContext, useEffect, useReducer, useMemo } from 'react'\nimport { ChatEvent } from '@nice-devone/nice-cxone-chat-web-sdk'\n\nimport { messageNotification } from '../lib/message-notification.js'\n\nimport { initialState, reducer } from './reducer.js'\nimport { CUSTOMER_ID_STORAGE_KEY, THREAD_ID_STORAGE_KEY, SETTINGS_STORAGE_KEY } from './constants.js'\n\nexport const AppContext = createContext(initialState)\n\nexport const AppProvider = ({ sdk, availability, options, children }) => {\n const [state, dispatch] = useReducer(reducer, initialState)\n\n const playSound = messageNotification(options.audioUrl)\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 dispatch({ type: 'SET_UNSEEN_COUNT', payload: e.detail.data.contact.customerStatistics.unseenMessagesCount })\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 dispatch({ type: 'SET_UNSEEN_COUNT', payload: e.detail.data.case.customerStatistics.unseenMessagesCount })\n\n const isAudioOn = JSON.parse(window.localStorage.getItem(SETTINGS_STORAGE_KEY)).audio\n\n if (isAudioOn && e.detail.data.message.direction === 'outbound') {\n playSound()\n }\n }\n\n const onContactStatusChanged = e => {\n dispatch({ type: 'SET_AGENT_STATUS', payload: e.detail.data.case.status })\n }\n\n const onMatchMedia = e => {\n dispatch({ type: 'TOGGLE_IS_MOBILE', payload: e.matches })\n }\n\n const onKeydown = () => {\n dispatch({ type: 'TOGGLE_IS_KEYBOARD', payload: true })\n }\n\n const onPointerdown = () => {\n dispatch({ type: 'TOGGLE_IS_KEYBOARD', payload: false })\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 // We need to know if it is a mobile and if it is a keyboard interaction\n window.matchMedia('(max-width: 640px)').addEventListener('change', onMatchMedia)\n window.addEventListener('keydown', onKeydown)\n window.addEventListener('pointerdown', onPointerdown)\n // Tidying up\n return () => {\n window.removeEventListener('change', onMatchMedia)\n window.removeEventListener('keydown', onKeydown)\n window.removeEventListener('pointerdown', onPointerdown)\n }\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 setSettings(JSON.parse(window.localStorage.getItem(SETTINGS_STORAGE_KEY)) || state.settings)\n }, [])\n\n /**\n * Set browser history on start chat click\n */\n useEffect(() => {\n if (window.location.hash === '#webchat') {\n setChatVisibility(true)\n }\n\n const onBrowserNavigation = window.addEventListener('popstate', () => {\n if (window.location.hash === '#webchat') {\n setChatVisibility(true)\n } else {\n setChatVisibility(false)\n }\n })\n\n return () => {\n window.removeEventListener('popstate', onBrowserNavigation)\n }\n }, [])\n\n /**\n * State update functions\n */\n const setChatVisibility = payload => {\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 const setSettings = data => {\n dispatch({ type: 'SET_SETTINGS', payload: data })\n }\n\n const setUnseenCount = unseenCount => {\n dispatch({ type: 'SET_UNSEEN_COUNT', payload: unseenCount })\n }\n\n /**\n * Application-wide state and state functions\n */\n const store = useMemo(() => ({\n ...state,\n sdk,\n setSettings,\n setCustomerId,\n setThreadId,\n setThread,\n setMessages,\n setUnseenCount,\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, SETTINGS_STORAGE_KEY } from './constants'\n\nconst setSettings = (state, payload) => {\n if (payload) {\n window.localStorage.setItem(SETTINGS_STORAGE_KEY, JSON.stringify(payload))\n } else {\n window.localStorage.removeItem(SETTINGS_STORAGE_KEY)\n }\n\n return {\n ...state,\n settings: payload\n }\n}\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\nconst setUnseenCount = (state, payload) => {\n return {\n ...state,\n unseenCount: payload\n }\n}\n\nconst toggleIsMobile = (state, payload) => {\n return {\n ...state,\n isMobile: payload\n }\n}\n\nconst toggleIsKeyboard = (state, payload) => {\n return {\n ...state,\n isKeyboard: payload\n }\n}\n\nexport const actionsMap = {\n SET_CHAT_VISIBILITY: setChatVisibility,\n SET_AVAILABILITY: setAvailability,\n SET_SETTINGS: setSettings,\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 SET_UNSEEN_COUNT: setUnseenCount,\n TOGGLE_IS_MOBILE: toggleIsMobile,\n TOGGLE_IS_KEYBOARD: toggleIsKeyboard\n}\n","export const SETTINGS_STORAGE_KEY = 'webchat_settings'\nexport const CUSTOMER_ID_STORAGE_KEY = 'webchat_customer_id'\nexport const THREAD_ID_STORAGE_KEY = 'webchat_thread_id'\n","import { actionsMap } from './actions-map'\n\nexport const initialState = {\n availability: null,\n customerId: null,\n threadId: null,\n thread: null,\n messages: [],\n unseenCount: 0,\n agent: null,\n agentStatus: null,\n isAgentTyping: false,\n isChatOpen: false,\n isMobile: window.matchMedia('(max-width: 640px)').matches,\n isKeyboard: false,\n settings: { audio: true, scroll: true }\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(\"luxon\");","module.exports = require(\"react\");","module.exports = require(\"react-dom\");","module.exports = require(\"react-dom/client\");","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/constants.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} options={options}>\n <Availability />\n </AppProvider>\n )\n}\n"],"names":["React","useEffect","useRef","classnames","Panel","SkipLink","useApp","historyPushState","historyReplaceState","Availability","availability","isChatOpen","setChatVisibility","unseenCount","threadId","setUnseenCount","buttonRef","onClick","e","preventDefault","onKeyDown","event","key","onKeyUp","onScroll","rect","current","parentElement","getBoundingClientRect","isBelowFold","top","window","innerHeight","document","documentElement","clientHeight","isFixed","classList","toggle","body","addEventListener","removeEventListener","TextComponent","createElement","Fragment","className","ref","href","draggable","role","useState","PanelHeader","PanelFooter","Message","useTextareaAutosize","formatTranscript","Chat","onEndChatScreen","onSettingsScreen","thread","messages","agent","agentStatus","isAgentTyping","settings","isKeyboard","userMessage","setUserMessage","focusVisibleWithin","setFocusVisibleWithin","messageRef","scroll","length","chatBody","querySelector","scrollTop","scrollHeight","label","remove","add","onChange","target","value","agentName","nickname","firstName","connectionHeadlineText","sendMessage","sendTextMessage","trim","err","console","log","handleKeyPress","shiftKey","handleSubmit","saveChat","transcript","saveChatLink","setAttribute","tabIndex","map","msg","index","id","message","previousMessage","width","height","x","y","viewBox","stroke","cx","cy","r","fill","noValidate","onSubmit","htmlFor","rows","name","onFocus","onBlur","type","download","ErrorSummary","errors","errs","Object","keys","goToInput","getAttribute","focus","outbound","direction","messageOwnerSameAsPrevious","assignee","text","children","isMobile","onClose","lastMessageSeen","BackButtonComponent","focusable","d","CloseButtonComponent","MinimiseButtonComponent","isMobileAndHasHistory","history","state","isMobileAndNoHistory","RightButtonComponent","useCallback","createPortal","PreChat","RequestChat","Unavailable","EndChat","Settings","Feedback","useChatSdk","useFocusedElements","sdk","setThread","setThreadId","setMessages","fetchThread","fetchMessages","screen","setScreen","onEscapeKey","getElementsByTagName","recover","fetchedThread","fetchedMessages","handleScreenChange","newScreen","goToPreChatScreen","goToRequestChatScreen","goToChatScreen","goToEndChatScreen","goToFeedbackScreen","goToSettingsScreen","ScreenComponent","onContinue","onPreChatScreen","onChatScreen","onEndChatConfirm","onCancel","Component","setCustomerId","confirmEndChat","endChat","feedbackCancel","rel","uuid","QUESTION_MAX_LENGTH","fetchCustomerId","setErrors","questionLength","setQuestionLength","isButtonDisabled","setButtonDisabled","nameRef","questionRef","isQuestionLengthValid","questionLengthRemaining","questionLengthExceeded","questionHint","onQuestionChange","buttonLabel","onRequestChat","question","v4","customerId","getCustomer","setName","startChat","setCustomField","style","color","disabled","setSettings","optionAudio","setOptionAudio","audio","optionScroll","setOptionScroll","onSave","defaultChecked","targetContainer","getElementById","ariaHidden","dataWcInert","setAriaHidden","isInert","node","hasAttribute","removeAttribute","getFocusableElements","selectors","elements","querySelectorAll","join","Array","from","filter","closest","panelElements","setPanelElements","webchatPanelElement","activeElement","panelElement","preventScroll","textAreaRef","checkAvailability","endpoint","response","fetch","data","json","classes","classname","url","location","split","pushState","back","replaceState","messageNotification","audioUrl","buffer","context","AudioContext","webkitAudioContext","events","unlock","_e","forEach","resume","then","arrayBuffer","decodeAudioData","decodedData","catch","error","source","createBufferSource","connect","destination","start","DateTime","transformMessage","messageContent","createdAt","Date","user","authorEndUserIdentity","fullName","authorUser","transformMessages","now","local","setZone","string","toFormat","author","date","fromJSDate","replace","encodeURIComponent","createContext","useReducer","useMemo","ChatEvent","initialState","reducer","CUSTOMER_ID_STORAGE_KEY","THREAD_ID_STORAGE_KEY","SETTINGS_STORAGE_KEY","AppContext","AppProvider","options","dispatch","playSound","onLiveChatRecovered","payload","detail","inboxAssignee","contact","status","customerStatistics","unseenMessagesCount","onAssignedAgentChanged","case","onAgentTypingStarted","onAgentTypingEnded","onMessageCreated","isAudioOn","JSON","parse","localStorage","getItem","onContactStatusChanged","onMatchMedia","matches","onKeydown","onPointerdown","onChatEvent","LIVECHAT_RECOVERED","MESSAGE_CREATED","AGENT_TYPING_STARTED","AGENT_TYPING_ENDED","ASSIGNED_AGENT_CHANGED","CONTACT_STATUS_CHANGED","matchMedia","hash","onBrowserNavigation","store","Provider","setItem","stringify","removeItem","setAvailability","setMessage","reverse","setAgent","setAgentIsTyping","setAgentStatus","toggleIsMobile","toggleIsKeyboard","actionsMap","SET_CHAT_VISIBILITY","SET_AVAILABILITY","SET_SETTINGS","SET_CUSTOMER_ID","SET_THREAD_ID","SET_THREAD","SET_MESSAGE","SET_MESSAGES","SET_AGENT","SET_AGENT_TYPING","SET_AGENT_STATUS","SET_UNSEEN_COUNT","TOGGLE_IS_MOBILE","TOGGLE_IS_KEYBOARD","action","fn","actionFunction","bind","useContext","authorize","consumerIdentity","idOnExternalPlatform","getThread","recovered","allMessages","push","loadMoreMessages","createRoot","ChatSdk","init","container","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/feedback.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/settings.jsx","webpack://@defra/flood-webchat/./src/client/components/screens/unavailable.jsx","webpack://@defra/flood-webchat/./src/client/components/skip-link.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/history.js","webpack://@defra/flood-webchat/./src/client/lib/message-notification.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/constants.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 \"luxon\"","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 \"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 } from 'react'\n\nimport { classnames } from '../../lib/classnames'\nimport { Panel } from '../panel/panel.jsx'\nimport { SkipLink } from '../skip-link.jsx'\n\nimport { useApp } from '../../store/useApp'\nimport { historyPushState, historyReplaceState } from '../../lib/history.js'\n\nexport function Availability () {\n const { availability, isChatOpen, setChatVisibility, unseenCount, threadId, setUnseenCount, setInstigatorId } = useApp()\n\n const buttonRef = useRef()\n\n const onClick = e => {\n e.preventDefault()\n setUnseenCount(0)\n setChatVisibility(!isChatOpen)\n setInstigatorId(e.target.id)\n\n if (!isChatOpen) {\n historyPushState()\n } else {\n historyReplaceState()\n }\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 setUnseenCount(0)\n setChatVisibility(!isChatOpen)\n }\n }\n\n useEffect(() => {\n const onScroll = () => {\n if (!threadId) {\n return\n }\n\n if (availability !== 'AVAILABLE') {\n return\n }\n\n const rect = buttonRef.current.parentElement.getBoundingClientRect()\n\n const isBelowFold = rect.top + 35 > (window.innerHeight || document.documentElement.clientHeight)\n const isFixed = !isChatOpen && isBelowFold\n\n document.documentElement.classList.toggle('wc-u-scroll-padding', isFixed)\n document.body.classList.toggle('wc-u-scroll-padding', isFixed)\n buttonRef.current.classList.toggle('wc-availability--fixed', isFixed)\n }\n\n document.addEventListener('scroll', onScroll)\n onScroll()\n\n return () => {\n document.removeEventListener('scroll', onScroll)\n }\n }, [threadId, isChatOpen, availability])\n\n let TextComponent = (<>Show chat</>)\n\n if (!threadId) {\n TextComponent = (<>Start chat</>)\n }\n\n switch (availability) {\n case 'AVAILABLE':\n return (\n <>\n <div\n className={classnames('wc-availability', isChatOpen && 'wc-open')}\n ref={buttonRef}\n >\n <div className='wc-availability__inner'>\n <a\n id='webchat-start-chat-link'\n className='wc-availability__link'\n href='#webchat'\n draggable='false'\n onClick={onClick}\n onKeyUp={onKeyUp}\n onKeyDown={onKeyDown}\n role='button'\n data-module='govuk-button'\n >\n {TextComponent}\n {unseenCount > 0 && !isChatOpen ? <span className='wc-availability__unseen'>{unseenCount}</span> : null}\n </a>\n </div>\n </div>\n {isChatOpen && <Panel />}\n <SkipLink />\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'\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'\nimport { formatTranscript } from '../../lib/transform-messages.js'\n\nexport function Chat ({ onEndChatScreen, onSettingsScreen }) {\n const { availability, thread, messages, agent, agentStatus, isAgentTyping, settings, isKeyboard } = useApp()\n\n const [userMessage, setUserMessage] = useState('')\n const [focusVisibleWithin, setFocusVisibleWithin] = useState(false)\n\n const messageRef = useRef()\n\n useTextareaAutosize(messageRef.current, userMessage)\n\n useEffect(() => {\n if (settings.scroll && 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 = () => {\n if (messageRef.current.value.length === 0) {\n return\n }\n\n try {\n thread.sendTextMessage(messageRef.current.value.trim())\n } catch (err) {\n console.log('[Chat Error] sendMessage', err)\n }\n\n setUserMessage('')\n }\n const handleKeyPress = e => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n sendMessage()\n }\n }\n\n const handleSubmit = e => {\n e.preventDefault()\n sendMessage()\n }\n\n const saveChat = () => {\n const transcript = formatTranscript(messages)\n\n const saveChatLink = document.querySelector('#transcript-download')\n\n saveChatLink.setAttribute('href', `data:text/plain;charset=utf-8,${transcript}`)\n }\n\n return (\n <>\n <PanelHeader />\n\n <div className='wc-status'>\n <p className='wc-status__availability'>{connectionHeadlineText}</p>\n <a className='wc-status__link' href='#' role='button' data-module='govuk-button' onClick={onEndChatScreen}>End chat</a>\n </div>\n\n <div className='wc-body' tabIndex='0'>\n <ul className='wc-chat'>\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 outbound'>\n <div className='wc-chat__from'>{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\n <PanelFooter>\n <form className={`wc-form${focusVisibleWithin ? ' wc-focus-within' : ''}`} noValidate onSubmit={handleSubmit}>\n <label className='govuk-label wc-form__label' 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'\n id='wc-form-textarea'\n name='message'\n onChange={onChange}\n onKeyDown={handleKeyPress}\n onFocus={() => { setFocusVisibleWithin(isKeyboard) }}\n onBlur={() => { setFocusVisibleWithin(false) }}\n value={userMessage}\n />\n\n <input\n type='submit'\n className='wc-form__button govuk-button'\n value='Send'\n data-prevent-double-click='true'\n />\n </form>\n\n <div className='wc-footer__settings'>\n <a\n href='#'\n id='wc-settings'\n className='wc-footer__settings-link'\n data-module='govuk-button'\n onClick={onSettingsScreen}\n >\n Settings\n </a>\n <a\n href='#'\n id='transcript-download'\n className='wc-footer__settings-link'\n data-module='govuk-button'\n download='floodline-webchat-transcript.txt'\n onClick={saveChat}\n >\n Save chat\n </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='wc-error-summary__title 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 wc-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', outbound ? 'outbound' : 'inbound')}>\n <div className='wc-chat__from'>\n {messageOwnerSameAsPrevious ? null : <span>{outbound ? message.assignee : 'You'}</span>}\n <span className='govuk-visually-hidden'>:</span>\n </div>\n <div className={classnames('wc-chat__text', outbound ? 'outbound' : 'inbound')}>\n {message.text}\n </div>\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'\nimport { historyReplaceState } from '../../lib/history.js'\n\nexport function PanelHeader () {\n const { thread, threadId, setChatVisibility, setUnseenCount, isMobile } = useApp()\n\n const onClose = e => {\n e.preventDefault()\n setChatVisibility(false)\n historyReplaceState()\n\n if (threadId) {\n thread?.lastMessageSeen()\n setUnseenCount(0)\n }\n }\n\n const BackButtonComponent = (\n <button className='wc-header__back' 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='M4.828,11L12.314,18.485L10.899,19.899L1,10L10.899,0.101L12.314,1.515L4.828,9L19,9L19,11L4.828,11Z' fill='currentColor' />\n </svg>\n </button>\n )\n\n const CloseButtonComponent = (\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 const MinimiseButtonComponent = (\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 const isMobileAndHasHistory = isMobile && window.history.state\n const isMobileAndNoHistory = isMobile && !window.history.state\n\n let RightButtonComponent = CloseButtonComponent\n\n if (thread) {\n RightButtonComponent = MinimiseButtonComponent\n\n if (isMobileAndNoHistory) {\n RightButtonComponent = MinimiseButtonComponent\n }\n }\n\n if (!thread && isMobileAndNoHistory) {\n RightButtonComponent = CloseButtonComponent\n }\n\n if (isMobileAndHasHistory) {\n RightButtonComponent = null\n }\n\n return (\n <div className='wc-header'>\n {isMobileAndHasHistory ? BackButtonComponent : null}\n\n <h2 id='wc-header-title' className='wc-header__title'>\n Floodline Webchat\n </h2>\n\n {RightButtonComponent}\n </div>\n )\n}\n","import React, { useEffect, useState, useCallback } from 'react'\nimport { createPortal } from 'react-dom'\nimport { classnames } from '../../lib/classnames.js'\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'\nimport { Settings } from '../screens/settings.jsx'\nimport { Feedback } from '../screens/feedback.jsx'\n\nimport { useApp } from '../../store/useApp.js'\nimport { useChatSdk } from '../../store/useChatSdk.js'\nimport { useFocusedElements } from '../../hooks/useFocusedElements.js'\nimport { historyReplaceState } from '../../lib/history.js'\n\nexport function Panel () {\n const { sdk, availability, instigatorId, thread, threadId, setThread, setThreadId, setChatVisibility, setMessages, setUnseenCount, isMobile, isKeyboard } = useApp()\n const { fetchThread, fetchMessages } = useChatSdk(sdk)\n\n const [screen, setScreen] = useState(threadId ? 2 : 0)\n\n useFocusedElements(screen)\n\n const onEscapeKey = useCallback(e => {\n if (e.key === 'Escape' || e.key === 'Esc') {\n if (threadId) {\n thread?.lastMessageSeen()\n setUnseenCount(0)\n }\n setChatVisibility(false)\n historyReplaceState()\n document.getElementById(instigatorId)?.focus()\n }\n }, [thread, threadId, setUnseenCount, setChatVisibility])\n\n /**\n * We need ammend classes on the body element to handle mobile behaviour\n */\n useEffect(() => {\n document.body.classList.remove('wc-u-hidden')\n document.getElementsByTagName('html')[0].classList.add('wc-u-html')\n document.body.classList.add('wc-u-body')\n return () => {\n document.getElementsByTagName('html')[0].classList.remove('wc-u-html')\n document.body.classList.remove('wc-u-body')\n }\n }, [isMobile])\n\n /**\n * Initializes the eventListener for pressing the escape key\n */\n useEffect(() => {\n document.addEventListener('keydown', onEscapeKey)\n\n return () => {\n document.removeEventListener('keydown', onEscapeKey)\n }\n }, [onEscapeKey, setChatVisibility])\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 if (thread) {\n thread.lastMessageSeen()\n setUnseenCount(0)\n setScreen(2)\n } else {\n recover()\n }\n }\n }, [thread, threadId])\n\n const handleScreenChange = newScreen => e => {\n e.preventDefault()\n setScreen(newScreen)\n }\n\n const goToPreChatScreen = handleScreenChange(0)\n const goToRequestChatScreen = handleScreenChange(1)\n const goToChatScreen = handleScreenChange(2)\n const goToEndChatScreen = handleScreenChange(3)\n const goToFeedbackScreen = handleScreenChange(4)\n const goToSettingsScreen = handleScreenChange(5)\n\n let ScreenComponent\n\n switch (screen) {\n case 0:\n ScreenComponent = <PreChat onContinue={goToRequestChatScreen} />\n break\n case 1:\n ScreenComponent = <RequestChat onPreChatScreen={goToPreChatScreen} />\n break\n case 2:\n ScreenComponent = <Chat onSettingsScreen={goToSettingsScreen} onEndChatScreen={goToEndChatScreen} />\n break\n case 3:\n ScreenComponent = <EndChat onChatScreen={goToChatScreen} onEndChatConfirm={goToFeedbackScreen} />\n break\n case 4:\n ScreenComponent = <Feedback onCancel={() => setChatVisibility(false)} />\n break\n case 5:\n ScreenComponent = <Settings onCancel={goToChatScreen} />\n break\n default:\n ScreenComponent = <PreChat onContinue={goToRequestChatScreen} />\n }\n\n if (availability === 'UNAVAILABLE') {\n ScreenComponent = <Unavailable />\n }\n\n const Component = (\n <div id='wc-panel' role='dialog' className={classnames('wc-panel', isKeyboard && 'wc-focus-visible')} tabIndex='-1' aria-modal='true' aria-labelledby='wc-header-title'>\n <div className='wc-panel__inner'>\n {ScreenComponent}\n </div>\n </div>\n )\n\n return (\n <>\n {createPortal(Component, document.body)}\n </>\n )\n}\n","import React, { useEffect } from 'react'\nimport { PanelHeader } from '../panel/panel-header.jsx'\nimport { useApp } from '../../store/useApp.js'\n\nexport function EndChat ({ onChatScreen, onEndChatConfirm }) {\n const { setCustomerId, setThreadId, setMessages, agentStatus, thread, setUnseenCount, isKeyboard } = useApp()\n\n const confirmEndChat = async e => {\n e.preventDefault()\n\n setThreadId()\n setMessages([])\n setCustomerId()\n thread.lastMessageSeen()\n setUnseenCount(0)\n\n // End chat if still open\n if (agentStatus !== 'closed') {\n thread.endChat()\n }\n\n onEndChatConfirm(e)\n }\n\n useEffect(() => {\n if (isKeyboard) {\n setTimeout(() => {\n document.querySelector('#confirmEndChat').focus()\n }, 10)\n }\n }, [])\n\n return (\n <>\n <PanelHeader />\n <div className='wc-body'>\n <div className='wc-content'>\n <h3 className='wc-heading' aria-live='polite'>Are you sure you want to end the chat?</h3>\n <div className='govuk-button-group'>\n <a href='#endChat' role='button' className='wc-button govuk-button' data-module='govuk-button' id='confirmEndChat' onClick={confirmEndChat}>Yes, end chat</a>\n <a href='#resumeChat' role='button' className='wc-link govuk-link' data-module='govuk-button' onClick={onChatScreen}>No, resume chat</a>\n </div>\n </div>\n </div>\n </>\n )\n}\n","import React from 'react'\nimport { PanelHeader } from '../panel/panel-header.jsx'\n\nexport function Feedback ({ onCancel }) {\n const feedbackCancel = async e => {\n onCancel(e)\n }\n\n return (\n <>\n <PanelHeader />\n\n <div className='wc-body'>\n <div className='wc-content'>\n <h3 id='wc-subtitle' className='wc-heading'>Give Feedback on Floodline webchat</h3>\n <p>Please note we’re unable to respond to feedback.</p>\n <p><a className='govuk-link' href='#' target='_blank' rel='noreferrer' role='button' data-module='govuk-button'>Feedback Link</a></p>\n <p><a id='feedback-cancel' className='wc-link govuk-link' href='#' data-module='govuk-button' role='button' onClick={feedbackCancel}>Close</a></p>\n </div>\n </div>\n </>\n )\n}\n","import React from 'react'\nimport { PanelHeader } from '../panel/panel-header.jsx'\n\nexport function PreChat ({ onContinue }) {\n return (\n <>\n <PanelHeader />\n\n <div className='wc-body'>\n <div className='wc-content'>\n <h3 className='wc-heading' aria-live='polite'>What you can use webchat for</h3>\n <p>Webchat lets you talk directly to a Floodline adviser.</p>\n\n <p>You can use webchat to get:</p>\n <ul className='wc-list'>\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 <p>\n There are other ways to&nbsp;\n <a className='govuk-link' href='https://www.gov.uk/sign-up-for-flood-warnings' target='_blank' rel='noreferrer'>\n sign up for flood warnings\n </a>\n &nbsp;and&nbsp;\n <a className='govuk-link' href='https://www.fws.environment-agency.gov.uk/app/olr/login' target='_blank' rel='noreferrer'>\n manage your flood warnings account\n </a>.\n </p>\n <p>\n Do not use webchat to&nbsp;\n <a\n className='govuk-link'\n href='https://www.gov.uk/report-flood-cause'\n target='_blank'\n rel='noreferrer'\n >\n report a flood\n </a>.\n </p>\n\n <button className='govuk-button wc-button govuk-!-margin-top-1' data-module='govuk-button' onClick={onContinue}>Continue</button>\n\n <h3 className='wc-heading'>Other flood information</h3>\n\n <p>Call Floodline for all other flood and flood warning information.</p>\n <p>\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' target='_blank' rel='noreferrer'>Find out more about call charges</a>\n </p>\n </div>\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 ({ onPreChatScreen }) {\n const { sdk, setCustomerId, setThreadId, setThread } = useApp()\n const { fetchCustomerId, fetchThread } = useChatSdk(sdk)\n const [errors, setErrors] = useState({})\n const [questionLength, setQuestionLength] = useState(0)\n const [isButtonDisabled, setButtonDisabled] = useState(false)\n\n const nameRef = useRef()\n const questionRef = useRef()\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 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 buttonLabel = isButtonDisabled ? 'Requesting...' : 'Request Chat'\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 setButtonDisabled(true)\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 thread.setCustomField('threadid', threadId)\n } catch (err) {\n console.log('[Request Chat Error]', err)\n }\n }\n\n setErrors(errs)\n }\n\n return (\n <>\n <PanelHeader />\n\n <div className='wc-body'>\n <div className='wc-content'>\n <a href='#' className='wc-back-link govuk-back-link' onClick={onPreChatScreen}>\n What you can use webchat for\n </a>\n\n <ErrorSummary errors={errors} />\n\n <h3 className='wc-heading' aria-live='polite'>\n Your name and question\n </h3>\n\n <form>\n <div className={classnames('wc-form-group', 'govuk-form-group', errors.name && 'govuk-form-group--error')}>\n <label className='wc-label 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('wc-input', '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='wc-form-group 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='wc-label 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('wc-textarea', 'govuk-textarea', 'govuk-js-character-count', !isQuestionLengthValid || errors.question ? 'govuk-textarea--error' : '')}\n data-testid='request-chat-user-question'\n />\n <div\n id='wc-question-info'\n className='wc-hint govuk-hint govuk-char-count__msg'\n style={{ color: `${!isQuestionLengthValid ? '#d4351c' : ''}` }}\n aria-hidden='true'\n >\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 <div className='wc-inset-text govuk-inset-text'>\n By selecting 'Request chat' you agree to the terms of our&nbsp;\n <a href='https://check-for-flooding.service.gov.uk/privacy-notice' target='_blank' rel='noreferrer' className='govuk-link'>privacy notice</a>.\n </div>\n\n <button\n className='wc-button govuk-button govuk-!-margin-top-1'\n data-module='govuk-button'\n onClick={onRequestChat}\n disabled={isButtonDisabled}\n >\n {buttonLabel}\n </button>\n </form>\n </div>\n </div>\n </>\n )\n}\n","import React, { useState } from 'react'\nimport { PanelHeader } from '../panel/panel-header.jsx'\n\nimport { useApp } from '../../store/useApp.js'\n\nexport function Settings ({ onCancel }) {\n const { settings, setSettings } = useApp()\n\n const [optionAudio, setOptionAudio] = useState(settings.audio)\n const [optionScroll, setOptionScroll] = useState(settings.scroll)\n\n const onSave = e => {\n e.preventDefault()\n\n setSettings({ audio: optionAudio, scroll: optionScroll })\n onCancel(e)\n }\n\n return (\n <>\n <PanelHeader />\n\n <div className='wc-body'>\n <div className='wc-content'>\n <fieldset className='govuk-fieldset govuk-!-margin-bottom-4'>\n <legend className='govuk-fieldset__legend govuk-fieldset__legend'>\n <h3 id='wc-subtitle' className='wc-heading'>Change settings</h3>\n </legend>\n <div className='govuk-checkboxes govuk-checkboxes--small' data-module='govuk-checkboxes'>\n <div className='govuk-checkboxes__item'>\n <input\n id='audio'\n name='audio'\n type='checkbox'\n value='audio'\n className='govuk-checkboxes__input'\n defaultChecked={optionAudio}\n onChange={() => setOptionAudio(!optionAudio)}\n />\n <label className='wc-label govuk-label govuk-checkboxes__label' htmlFor='audio'>\n Play a sound when receiving a new message\n </label>\n </div>\n <div className='govuk-checkboxes__item'>\n <input\n id='scroll'\n name='scroll'\n type='checkbox'\n value='scroll'\n className='govuk-checkboxes__input'\n defaultChecked={optionScroll}\n onChange={() => setOptionScroll(!optionScroll)}\n />\n <label className='wc-label govuk-label govuk-checkboxes__label' htmlFor='scroll'>\n Scroll automatically to a new message\n </label>\n </div>\n </div>\n </fieldset>\n\n <div className='govuk-button-group'>\n <a id='settings-save' href='#' className='wc-button govuk-button' data-module='govuk-button' role='button' onClick={onSave}>Save</a>\n <a id='settings-cancel' href='#' className='wc-link govuk-link' data-module='govuk-button' role='button' onClick={onCancel}>Cancel</a>\n </div>\n </div>\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 React from 'react'\nimport { createPortal } from 'react-dom'\nimport { useApp } from '../store/useApp'\n\nexport const SkipLink = () => {\n const { thread, setInstigatorId } = useApp()\n\n if (!thread) {\n return null\n }\n\n const targetContainer = document.getElementById('skip-links')\n\n if (!targetContainer) {\n return null\n }\n\n const onClick = e => {\n e.preventDefault()\n setInstigatorId(e.target.id)\n window.location.hash = '#webchat'\n }\n\n return (\n <>\n {createPortal(\n <a\n id='webchat-skip-link'\n href='#webchat'\n className='govuk-skip-link'\n data-module='govuk-skip-link'\n onClick={onClick}\n data-wc-skiplink\n data-wc-open-btn\n >\n Skip to webchat\n </a>,\n targetContainer\n )}\n </>\n )\n}\n","import { useState, useEffect, useCallback } from 'react'\n\nconst ariaHidden = 'aria-hidden'\nconst dataWcInert = 'data-wc-inert'\n\nconst setAriaHidden = isInert => {\n for (const node of document.body.children) {\n if (node.id !== 'wc-panel') {\n // We only want to toggle elements that aren't already inert\n if (isInert && !node.getAttribute(ariaHidden)) {\n node.setAttribute(ariaHidden, 'true')\n node.setAttribute(dataWcInert, '')\n } else if (node.hasAttribute(dataWcInert)) {\n node.removeAttribute(ariaHidden)\n node.removeAttribute(dataWcInert)\n }\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.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","export const historyPushState = () => {\n const url = window.location.href.split('#')[0]\n window.history.pushState({ history: true }, null, `${url}#webchat`)\n}\n\nexport const historyReplaceState = () => {\n if (window.history.state?.history) {\n return window.history.back()\n }\n\n const url = window.location.href.split('#')[0]\n return window.history.replaceState(null, null, url)\n}\n","export const messageNotification = audioUrl => {\n let buffer\n\n const context = new (window.AudioContext || window.webkitAudioContext)()\n\n if (context.state === 'suspended') {\n const events = ['touchstart', 'touchend', 'mousedown', 'wheel', 'keydown', 'click']\n\n const unlock = _e => {\n events.forEach(event => {\n document.body.removeEventListener(event, unlock)\n })\n\n context.resume()\n }\n\n events.forEach(event => {\n document.body.addEventListener(event, unlock, false)\n })\n }\n\n fetch(audioUrl)\n .then(response => response.arrayBuffer())\n .then(data => context.decodeAudioData(data))\n .then(decodedData => {\n buffer = decodedData\n })\n .catch(console.error)\n\n return () => {\n const source = context.createBufferSource()\n source.buffer = buffer\n source.connect(context.destination)\n source.start()\n }\n}\n","import { DateTime } from 'luxon'\n\nexport const transformMessage = message => {\n return {\n id: message.id,\n text: 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\nexport const formatTranscript = messages => {\n const now = DateTime.local()\n now.setZone('Europe/London')\n\n let string = `Floodline webchat transcript, ${now.toFormat('HH:mm:ss a, dd LLLL yyyy')}\\n\\n`\n\n for (const message of messages) {\n const { text, direction, user, assignee, createdAt } = message\n\n const author = direction === 'inbound' ? user : `${assignee} (Floodline adviser)`\n const date = DateTime.fromJSDate(new Date(createdAt)).setZone('Europe/London').toFormat('HH:mm:ss a, dd LLLL yyyy')\n\n string += `[${date}] ${author}: \\n${text}\\n\\n`\n }\n\n string = string.replace(/<a\\b[^>]*>/i, '').replace(/<\\/a>/i, '')\n\n return encodeURIComponent(string)\n}\n","import React, { createContext, useEffect, useReducer, useMemo } from 'react'\nimport { ChatEvent } from '@nice-devone/nice-cxone-chat-web-sdk'\n\nimport { messageNotification } from '../lib/message-notification.js'\n\nimport { initialState, reducer } from './reducer.js'\nimport { CUSTOMER_ID_STORAGE_KEY, THREAD_ID_STORAGE_KEY, SETTINGS_STORAGE_KEY } from './constants.js'\n\nexport const AppContext = createContext(initialState)\n\nexport const AppProvider = ({ sdk, availability, options, children }) => {\n const [state, dispatch] = useReducer(reducer, initialState)\n\n const playSound = messageNotification(options.audioUrl)\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 dispatch({ type: 'SET_UNSEEN_COUNT', payload: e.detail.data.contact.customerStatistics.unseenMessagesCount })\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 dispatch({ type: 'SET_UNSEEN_COUNT', payload: e.detail.data.case.customerStatistics.unseenMessagesCount })\n\n const isAudioOn = JSON.parse(window.localStorage.getItem(SETTINGS_STORAGE_KEY)).audio\n\n if (isAudioOn && e.detail.data.message.direction === 'outbound') {\n playSound()\n }\n }\n\n const onContactStatusChanged = e => {\n dispatch({ type: 'SET_AGENT_STATUS', payload: e.detail.data.case.status })\n }\n\n const onMatchMedia = e => {\n dispatch({ type: 'TOGGLE_IS_MOBILE', payload: e.matches })\n }\n\n const onKeydown = () => {\n dispatch({ type: 'TOGGLE_IS_KEYBOARD', payload: true })\n }\n\n const onPointerdown = () => {\n dispatch({ type: 'TOGGLE_IS_KEYBOARD', payload: false })\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 // We need to know if it is a mobile and if it is a keyboard interaction\n window.matchMedia('(max-width: 640px)').addEventListener('change', onMatchMedia)\n window.addEventListener('keydown', onKeydown)\n window.addEventListener('pointerdown', onPointerdown)\n // Tidying up\n return () => {\n window.removeEventListener('change', onMatchMedia)\n window.removeEventListener('keydown', onKeydown)\n window.removeEventListener('pointerdown', onPointerdown)\n }\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 setSettings(JSON.parse(window.localStorage.getItem(SETTINGS_STORAGE_KEY)) || state.settings)\n }, [])\n\n /**\n * Set browser history on start chat click\n */\n useEffect(() => {\n if (window.location.hash === '#webchat') {\n setChatVisibility(true)\n }\n\n const onBrowserNavigation = window.addEventListener('popstate', () => {\n if (window.location.hash === '#webchat') {\n setChatVisibility(true)\n } else {\n setChatVisibility(false)\n }\n })\n\n return () => {\n window.removeEventListener('popstate', onBrowserNavigation)\n }\n }, [])\n\n /**\n * State update functions\n */\n const setChatVisibility = payload => {\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 const setSettings = data => {\n dispatch({ type: 'SET_SETTINGS', payload: data })\n }\n\n const setUnseenCount = unseenCount => {\n dispatch({ type: 'SET_UNSEEN_COUNT', payload: unseenCount })\n }\n\n const setInstigatorId = id => {\n dispatch({ type: 'SET_INSTIGATOR_ID', payload: id })\n }\n\n /**\n * Application-wide state and state functions\n */\n const store = useMemo(() => ({\n ...state,\n sdk,\n setSettings,\n setCustomerId,\n setThreadId,\n setThread,\n setMessages,\n setUnseenCount,\n setChatVisibility,\n setInstigatorId,\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, SETTINGS_STORAGE_KEY } from './constants'\n\nconst setSettings = (state, payload) => {\n if (payload) {\n window.localStorage.setItem(SETTINGS_STORAGE_KEY, JSON.stringify(payload))\n } else {\n window.localStorage.removeItem(SETTINGS_STORAGE_KEY)\n }\n\n return {\n ...state,\n settings: payload\n }\n}\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\nconst setUnseenCount = (state, payload) => {\n return {\n ...state,\n unseenCount: payload\n }\n}\n\nconst setInstigatorId = (state, payload) => {\n return {\n ...state,\n instigatorId: payload\n }\n}\n\nconst toggleIsMobile = (state, payload) => {\n return {\n ...state,\n isMobile: payload\n }\n}\n\nconst toggleIsKeyboard = (state, payload) => {\n return {\n ...state,\n isKeyboard: payload\n }\n}\n\nexport const actionsMap = {\n SET_CHAT_VISIBILITY: setChatVisibility,\n SET_AVAILABILITY: setAvailability,\n SET_SETTINGS: setSettings,\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 SET_UNSEEN_COUNT: setUnseenCount,\n SET_INSTIGATOR_ID: setInstigatorId,\n TOGGLE_IS_MOBILE: toggleIsMobile,\n TOGGLE_IS_KEYBOARD: toggleIsKeyboard\n}\n","export const SETTINGS_STORAGE_KEY = 'webchat_settings'\nexport const CUSTOMER_ID_STORAGE_KEY = 'webchat_customer_id'\nexport const THREAD_ID_STORAGE_KEY = 'webchat_thread_id'\n","import { actionsMap } from './actions-map'\n\nexport const initialState = {\n availability: null,\n customerId: null,\n threadId: null,\n thread: null,\n messages: [],\n unseenCount: 0,\n instigatorId: null,\n agent: null,\n agentStatus: null,\n isAgentTyping: false,\n isChatOpen: false,\n isMobile: window.matchMedia('(max-width: 640px)').matches,\n isKeyboard: false,\n settings: { audio: true, scroll: true }\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(\"luxon\");","module.exports = require(\"react\");","module.exports = require(\"react-dom\");","module.exports = require(\"react-dom/client\");","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/constants.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} options={options}>\n <Availability />\n </AppProvider>\n )\n}\n"],"names":["React","useEffect","useRef","classnames","Panel","SkipLink","useApp","historyPushState","historyReplaceState","Availability","availability","isChatOpen","setChatVisibility","unseenCount","threadId","setUnseenCount","setInstigatorId","buttonRef","onClick","e","preventDefault","target","id","onKeyDown","event","key","onKeyUp","onScroll","rect","current","parentElement","getBoundingClientRect","isBelowFold","top","window","innerHeight","document","documentElement","clientHeight","isFixed","classList","toggle","body","addEventListener","removeEventListener","TextComponent","createElement","Fragment","className","ref","href","draggable","role","useState","PanelHeader","PanelFooter","Message","useTextareaAutosize","formatTranscript","Chat","onEndChatScreen","onSettingsScreen","thread","messages","agent","agentStatus","isAgentTyping","settings","isKeyboard","userMessage","setUserMessage","focusVisibleWithin","setFocusVisibleWithin","messageRef","scroll","length","chatBody","querySelector","scrollTop","scrollHeight","label","remove","add","onChange","value","agentName","nickname","firstName","connectionHeadlineText","sendMessage","sendTextMessage","trim","err","console","log","handleKeyPress","shiftKey","handleSubmit","saveChat","transcript","saveChatLink","setAttribute","tabIndex","map","msg","index","message","previousMessage","width","height","x","y","viewBox","stroke","cx","cy","r","fill","noValidate","onSubmit","htmlFor","rows","name","onFocus","onBlur","type","download","ErrorSummary","errors","errs","Object","keys","goToInput","getAttribute","focus","outbound","direction","messageOwnerSameAsPrevious","assignee","text","children","isMobile","onClose","lastMessageSeen","BackButtonComponent","focusable","d","CloseButtonComponent","MinimiseButtonComponent","isMobileAndHasHistory","history","state","isMobileAndNoHistory","RightButtonComponent","useCallback","createPortal","PreChat","RequestChat","Unavailable","EndChat","Settings","Feedback","useChatSdk","useFocusedElements","sdk","instigatorId","setThread","setThreadId","setMessages","fetchThread","fetchMessages","screen","setScreen","onEscapeKey","getElementById","getElementsByTagName","recover","fetchedThread","fetchedMessages","handleScreenChange","newScreen","goToPreChatScreen","goToRequestChatScreen","goToChatScreen","goToEndChatScreen","goToFeedbackScreen","goToSettingsScreen","ScreenComponent","onContinue","onPreChatScreen","onChatScreen","onEndChatConfirm","onCancel","Component","setCustomerId","confirmEndChat","endChat","setTimeout","feedbackCancel","rel","uuid","QUESTION_MAX_LENGTH","fetchCustomerId","setErrors","questionLength","setQuestionLength","isButtonDisabled","setButtonDisabled","nameRef","questionRef","isQuestionLengthValid","questionLengthRemaining","questionLengthExceeded","questionHint","onQuestionChange","buttonLabel","onRequestChat","question","v4","customerId","getCustomer","setName","startChat","setCustomField","style","color","disabled","setSettings","optionAudio","setOptionAudio","audio","optionScroll","setOptionScroll","onSave","defaultChecked","targetContainer","location","hash","ariaHidden","dataWcInert","setAriaHidden","isInert","node","hasAttribute","removeAttribute","getFocusableElements","selectors","elements","querySelectorAll","join","Array","from","filter","closest","panelElements","setPanelElements","webchatPanelElement","activeElement","panelElement","textAreaRef","checkAvailability","endpoint","response","fetch","data","json","classes","classname","url","split","pushState","back","replaceState","messageNotification","audioUrl","buffer","context","AudioContext","webkitAudioContext","events","unlock","_e","forEach","resume","then","arrayBuffer","decodeAudioData","decodedData","catch","error","source","createBufferSource","connect","destination","start","DateTime","transformMessage","messageContent","createdAt","Date","user","authorEndUserIdentity","fullName","authorUser","transformMessages","now","local","setZone","string","toFormat","author","date","fromJSDate","replace","encodeURIComponent","createContext","useReducer","useMemo","ChatEvent","initialState","reducer","CUSTOMER_ID_STORAGE_KEY","THREAD_ID_STORAGE_KEY","SETTINGS_STORAGE_KEY","AppContext","AppProvider","options","dispatch","playSound","onLiveChatRecovered","payload","detail","inboxAssignee","contact","status","customerStatistics","unseenMessagesCount","onAssignedAgentChanged","case","onAgentTypingStarted","onAgentTypingEnded","onMessageCreated","isAudioOn","JSON","parse","localStorage","getItem","onContactStatusChanged","onMatchMedia","matches","onKeydown","onPointerdown","onChatEvent","LIVECHAT_RECOVERED","MESSAGE_CREATED","AGENT_TYPING_STARTED","AGENT_TYPING_ENDED","ASSIGNED_AGENT_CHANGED","CONTACT_STATUS_CHANGED","matchMedia","onBrowserNavigation","store","Provider","setItem","stringify","removeItem","setAvailability","setMessage","reverse","setAgent","setAgentIsTyping","setAgentStatus","toggleIsMobile","toggleIsKeyboard","actionsMap","SET_CHAT_VISIBILITY","SET_AVAILABILITY","SET_SETTINGS","SET_CUSTOMER_ID","SET_THREAD_ID","SET_THREAD","SET_MESSAGE","SET_MESSAGES","SET_AGENT","SET_AGENT_TYPING","SET_AGENT_STATUS","SET_UNSEEN_COUNT","SET_INSTIGATOR_ID","TOGGLE_IS_MOBILE","TOGGLE_IS_KEYBOARD","action","fn","actionFunction","bind","useContext","authorize","consumerIdentity","idOnExternalPlatform","getThread","recovered","allMessages","push","loadMoreMessages","createRoot","ChatSdk","init","container","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.33",
3
+ "version": "0.0.1-beta.35",
4
4
  "description": "",
5
5
  "main": "dist/server.js",
6
6
  "browser": "dist/client.js",
@@ -8,7 +8,7 @@ import { useApp } from '../../store/useApp'
8
8
  import { historyPushState, historyReplaceState } from '../../lib/history.js'
9
9
 
10
10
  export function Availability () {
11
- const { availability, isChatOpen, setChatVisibility, unseenCount, threadId, setUnseenCount } = useApp()
11
+ const { availability, isChatOpen, setChatVisibility, unseenCount, threadId, setUnseenCount, setInstigatorId } = useApp()
12
12
 
13
13
  const buttonRef = useRef()
14
14
 
@@ -16,6 +16,7 @@ export function Availability () {
16
16
  e.preventDefault()
17
17
  setUnseenCount(0)
18
18
  setChatVisibility(!isChatOpen)
19
+ setInstigatorId(e.target.id)
19
20
 
20
21
  if (!isChatOpen) {
21
22
  historyPushState()
@@ -81,6 +82,7 @@ export function Availability () {
81
82
  >
82
83
  <div className='wc-availability__inner'>
83
84
  <a
85
+ id='webchat-start-chat-link'
84
86
  className='wc-availability__link'
85
87
  href='#webchat'
86
88
  draggable='false'
@@ -96,7 +96,7 @@ export function Chat ({ onEndChatScreen, onSettingsScreen }) {
96
96
 
97
97
  <div className='wc-status'>
98
98
  <p className='wc-status__availability'>{connectionHeadlineText}</p>
99
- <a className='wc-status__link' href='#' data-module='govuk-button' onClick={onEndChatScreen}>End chat</a>
99
+ <a className='wc-status__link' href='#' role='button' data-module='govuk-button' onClick={onEndChatScreen}>End chat</a>
100
100
  </div>
101
101
 
102
102
  <div className='wc-body' tabIndex='0'>
@@ -16,7 +16,7 @@ import { useFocusedElements } from '../../hooks/useFocusedElements.js'
16
16
  import { historyReplaceState } from '../../lib/history.js'
17
17
 
18
18
  export function Panel () {
19
- const { sdk, availability, thread, threadId, setThread, setThreadId, setChatVisibility, setMessages, setUnseenCount, isMobile, isKeyboard } = useApp()
19
+ const { sdk, availability, instigatorId, thread, threadId, setThread, setThreadId, setChatVisibility, setMessages, setUnseenCount, isMobile, isKeyboard } = useApp()
20
20
  const { fetchThread, fetchMessages } = useChatSdk(sdk)
21
21
 
22
22
  const [screen, setScreen] = useState(threadId ? 2 : 0)
@@ -31,6 +31,7 @@ export function Panel () {
31
31
  }
32
32
  setChatVisibility(false)
33
33
  historyReplaceState()
34
+ document.getElementById(instigatorId)?.focus()
34
35
  }
35
36
  }, [thread, threadId, setUnseenCount, setChatVisibility])
36
37
 
@@ -1,9 +1,9 @@
1
- import React from 'react'
1
+ import React, { useEffect } from 'react'
2
2
  import { PanelHeader } from '../panel/panel-header.jsx'
3
3
  import { useApp } from '../../store/useApp.js'
4
4
 
5
5
  export function EndChat ({ onChatScreen, onEndChatConfirm }) {
6
- const { setCustomerId, setThreadId, setMessages, agentStatus, thread, setUnseenCount } = useApp()
6
+ const { setCustomerId, setThreadId, setMessages, agentStatus, thread, setUnseenCount, isKeyboard } = useApp()
7
7
 
8
8
  const confirmEndChat = async e => {
9
9
  e.preventDefault()
@@ -22,6 +22,14 @@ export function EndChat ({ onChatScreen, onEndChatConfirm }) {
22
22
  onEndChatConfirm(e)
23
23
  }
24
24
 
25
+ useEffect(() => {
26
+ if (isKeyboard) {
27
+ setTimeout(() => {
28
+ document.querySelector('#confirmEndChat').focus()
29
+ }, 10)
30
+ }
31
+ }, [])
32
+
25
33
  return (
26
34
  <>
27
35
  <PanelHeader />
@@ -30,7 +38,7 @@ export function EndChat ({ onChatScreen, onEndChatConfirm }) {
30
38
  <h3 className='wc-heading' aria-live='polite'>Are you sure you want to end the chat?</h3>
31
39
  <div className='govuk-button-group'>
32
40
  <a href='#endChat' role='button' className='wc-button govuk-button' data-module='govuk-button' id='confirmEndChat' onClick={confirmEndChat}>Yes, end chat</a>
33
- <a href='#resumeChat' role='button' className='wc-link govuk-link' onClick={onChatScreen}>No, resume chat</a>
41
+ <a href='#resumeChat' role='button' className='wc-link govuk-link' data-module='govuk-button' onClick={onChatScreen}>No, resume chat</a>
34
42
  </div>
35
43
  </div>
36
44
  </div>
@@ -14,7 +14,7 @@ export function Feedback ({ onCancel }) {
14
14
  <div className='wc-content'>
15
15
  <h3 id='wc-subtitle' className='wc-heading'>Give Feedback on Floodline webchat</h3>
16
16
  <p>Please note we’re unable to respond to feedback.</p>
17
- <p><a className='govuk-link' href='#' target='_blank' rel='noreferrer'>Feedback Link</a></p>
17
+ <p><a className='govuk-link' href='#' target='_blank' rel='noreferrer' role='button' data-module='govuk-button'>Feedback Link</a></p>
18
18
  <p><a id='feedback-cancel' className='wc-link govuk-link' href='#' data-module='govuk-button' role='button' onClick={feedbackCancel}>Close</a></p>
19
19
  </div>
20
20
  </div>
@@ -59,7 +59,7 @@ export function Settings ({ onCancel }) {
59
59
  </fieldset>
60
60
 
61
61
  <div className='govuk-button-group'>
62
- <a id='settings-save' href='#' className='wc-button govuk-button' data-module='govuk-button' onClick={onSave}>Save</a>
62
+ <a id='settings-save' href='#' className='wc-button govuk-button' data-module='govuk-button' role='button' onClick={onSave}>Save</a>
63
63
  <a id='settings-cancel' href='#' className='wc-link govuk-link' data-module='govuk-button' role='button' onClick={onCancel}>Cancel</a>
64
64
  </div>
65
65
  </div>
@@ -3,7 +3,7 @@ import { createPortal } from 'react-dom'
3
3
  import { useApp } from '../store/useApp'
4
4
 
5
5
  export const SkipLink = () => {
6
- const { thread } = useApp()
6
+ const { thread, setInstigatorId } = useApp()
7
7
 
8
8
  if (!thread) {
9
9
  return null
@@ -15,13 +15,21 @@ export const SkipLink = () => {
15
15
  return null
16
16
  }
17
17
 
18
+ const onClick = e => {
19
+ e.preventDefault()
20
+ setInstigatorId(e.target.id)
21
+ window.location.hash = '#webchat'
22
+ }
23
+
18
24
  return (
19
25
  <>
20
26
  {createPortal(
21
27
  <a
28
+ id='webchat-skip-link'
22
29
  href='#webchat'
23
30
  className='govuk-skip-link'
24
31
  data-module='govuk-skip-link'
32
+ onClick={onClick}
25
33
  data-wc-skiplink
26
34
  data-wc-open-btn
27
35
  >
@@ -72,7 +72,6 @@ const useFocusedElements = screen => {
72
72
 
73
73
  return () => {
74
74
  setAriaHidden()
75
- document.body.querySelector('.wc-availability__link')?.focus({ preventScroll: true })
76
75
  document.removeEventListener('keydown', onKeyDown)
77
76
  }
78
77
  }, [panelElements])
@@ -145,6 +145,10 @@ export const AppProvider = ({ sdk, availability, options, children }) => {
145
145
  dispatch({ type: 'SET_UNSEEN_COUNT', payload: unseenCount })
146
146
  }
147
147
 
148
+ const setInstigatorId = id => {
149
+ dispatch({ type: 'SET_INSTIGATOR_ID', payload: id })
150
+ }
151
+
148
152
  /**
149
153
  * Application-wide state and state functions
150
154
  */
@@ -158,6 +162,7 @@ export const AppProvider = ({ sdk, availability, options, children }) => {
158
162
  setMessages,
159
163
  setUnseenCount,
160
164
  setChatVisibility,
165
+ setInstigatorId,
161
166
  onLiveChatRecovered,
162
167
  onAssignedAgentChanged,
163
168
  onAgentTypingStarted,
@@ -103,6 +103,13 @@ const setUnseenCount = (state, payload) => {
103
103
  }
104
104
  }
105
105
 
106
+ const setInstigatorId = (state, payload) => {
107
+ return {
108
+ ...state,
109
+ instigatorId: payload
110
+ }
111
+ }
112
+
106
113
  const toggleIsMobile = (state, payload) => {
107
114
  return {
108
115
  ...state,
@@ -130,6 +137,7 @@ export const actionsMap = {
130
137
  SET_AGENT_TYPING: setAgentIsTyping,
131
138
  SET_AGENT_STATUS: setAgentStatus,
132
139
  SET_UNSEEN_COUNT: setUnseenCount,
140
+ SET_INSTIGATOR_ID: setInstigatorId,
133
141
  TOGGLE_IS_MOBILE: toggleIsMobile,
134
142
  TOGGLE_IS_KEYBOARD: toggleIsKeyboard
135
143
  }
@@ -7,6 +7,7 @@ export const initialState = {
7
7
  thread: null,
8
8
  messages: [],
9
9
  unseenCount: 0,
10
+ instigatorId: null,
10
11
  agent: null,
11
12
  agentStatus: null,
12
13
  isAgentTyping: false,