@defra/flood-webchat 0.0.1-beta.36 → 0.0.1-beta.37

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
@@ -202,12 +202,6 @@ function Chat({
202
202
  }
203
203
  setUserMessage('');
204
204
  };
205
- const handleKeyPress = e => {
206
- if (e.key === 'Enter' && !e.shiftKey) {
207
- e.preventDefault();
208
- sendMessage();
209
- }
210
- };
211
205
  const handleSubmit = e => {
212
206
  e.preventDefault();
213
207
  sendMessage();
@@ -217,16 +211,45 @@ function Chat({
217
211
  const saveChatLink = document.querySelector('#transcript-download');
218
212
  saveChatLink.setAttribute('href', `data:text/plain;charset=utf-8,${transcript}`);
219
213
  };
214
+ const handleKeyPress = e => {
215
+ if (e.key === 'Enter' && !e.shiftKey) {
216
+ switch (e.target.id) {
217
+ case 'text-area':
218
+ e.preventDefault();
219
+ sendMessage();
220
+ break;
221
+ case 'end-chat':
222
+ onEndChatScreen(e);
223
+ break;
224
+ case 'wc-settings':
225
+ onSettingsScreen(e);
226
+ break;
227
+ case 'transcript-download':
228
+ saveChat();
229
+ break;
230
+ default:
231
+ break;
232
+ }
233
+ } else if (e.key === ' ') {
234
+ if (e.target.id === 'end-chat') {
235
+ onEndChatScreen(e);
236
+ } else if (e.target.id === 'wc-settings') {
237
+ onSettingsScreen(e);
238
+ }
239
+ }
240
+ };
220
241
  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", {
221
242
  className: "wc-status"
222
243
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", {
223
244
  className: "wc-status__availability"
224
245
  }, connectionHeadlineText), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
246
+ id: "end-chat",
225
247
  className: "wc-status__link",
226
248
  href: "#",
227
- role: "button",
228
249
  "data-module": "govuk-button",
229
- onClick: onEndChatScreen
250
+ role: "button",
251
+ onClick: onEndChatScreen,
252
+ onKeyDown: handleKeyPress
230
253
  }, "End chat")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
231
254
  className: "wc-body",
232
255
  tabIndex: "0"
@@ -280,7 +303,7 @@ function Chat({
280
303
  rows: "1",
281
304
  "aria-required": "true",
282
305
  className: "wc-form__textarea",
283
- id: "wc-form-textarea",
306
+ id: "text-area",
284
307
  name: "message",
285
308
  onChange: onChange,
286
309
  onKeyDown: handleKeyPress,
@@ -303,6 +326,7 @@ function Chat({
303
326
  id: "wc-settings",
304
327
  className: "wc-footer__settings-link",
305
328
  "data-module": "govuk-button",
329
+ onKeyDown: handleKeyPress,
306
330
  onClick: onSettingsScreen
307
331
  }, "Settings"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
308
332
  href: "#",
@@ -310,6 +334,7 @@ function Chat({
310
334
  className: "wc-footer__settings-link",
311
335
  "data-module": "govuk-button",
312
336
  download: "floodline-webchat-transcript.txt",
337
+ onKeyDown: handleKeyPress,
313
338
  onClick: saveChat
314
339
  }, "Save chat"))));
315
340
  }
@@ -760,10 +785,17 @@ function EndChat({
760
785
  (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
761
786
  if (isKeyboard) {
762
787
  setTimeout(() => {
763
- document.querySelector('#confirmEndChat').focus();
788
+ document.querySelector('#confirm-endchat').focus();
764
789
  }, 10);
765
790
  }
766
791
  }, []);
792
+ const handleKeyPress = e => {
793
+ if ((e.key === 'Enter' || e.key === ' ') && e.target.id === 'confirm-endchat') {
794
+ confirmEndChat(e);
795
+ } else if ((e.key === 'Enter' || e.key === ' ') && e.target.id === 'resume-chat') {
796
+ onChatScreen(e);
797
+ }
798
+ };
767
799
  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", {
768
800
  className: "wc-body"
769
801
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
@@ -774,18 +806,21 @@ function EndChat({
774
806
  }, "Are you sure you want to end the chat?"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
775
807
  className: "govuk-button-group"
776
808
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
809
+ id: "confirm-endchat",
777
810
  href: "#endChat",
778
811
  role: "button",
779
812
  className: "wc-button govuk-button",
780
813
  "data-module": "govuk-button",
781
- id: "confirmEndChat",
782
- onClick: confirmEndChat
814
+ onClick: confirmEndChat,
815
+ onKeyDown: handleKeyPress
783
816
  }, "Yes, end chat"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
817
+ id: "resume-chat",
784
818
  href: "#resumeChat",
785
819
  role: "button",
786
820
  className: "wc-link govuk-link",
787
821
  "data-module": "govuk-button",
788
- onClick: onChatScreen
822
+ onClick: onChatScreen,
823
+ onKeyDown: handleKeyPress
789
824
  }, "No, resume chat")))));
790
825
  }
791
826
 
@@ -812,6 +847,11 @@ function Feedback({
812
847
  const feedbackCancel = async e => {
813
848
  onCancel(e);
814
849
  };
850
+ const handleKeyPress = e => {
851
+ if ((e.key === 'Enter' || e.key === ' ') && e.target.id === 'feedback-cancel') {
852
+ onCancel(e);
853
+ }
854
+ };
815
855
  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", {
816
856
  className: "wc-body"
817
857
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
@@ -823,15 +863,14 @@ function Feedback({
823
863
  className: "govuk-link",
824
864
  href: "#",
825
865
  target: "_blank",
826
- rel: "noreferrer",
827
- role: "button",
828
- "data-module": "govuk-button"
866
+ rel: "noreferrer"
829
867
  }, "Feedback Link")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
830
868
  id: "feedback-cancel",
831
869
  className: "wc-link govuk-link",
832
870
  href: "#",
833
871
  "data-module": "govuk-button",
834
872
  role: "button",
873
+ onKeyDown: handleKeyPress,
835
874
  onClick: feedbackCancel
836
875
  }, "Close")))));
837
876
  }
@@ -1099,6 +1138,13 @@ function Settings({
1099
1138
  });
1100
1139
  onCancel(e);
1101
1140
  };
1141
+ const handleKeyPress = e => {
1142
+ if ((e.key === 'Enter' || e.key === ' ') && e.target.id === 'settings-save') {
1143
+ onSave(e);
1144
+ } else if ((e.key === 'Enter' || e.key === ' ') && e.target.id === 'settings-cancel') {
1145
+ onCancel(e);
1146
+ }
1147
+ };
1102
1148
  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", {
1103
1149
  className: "wc-body"
1104
1150
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
@@ -1147,14 +1193,16 @@ function Settings({
1147
1193
  className: "wc-button govuk-button",
1148
1194
  "data-module": "govuk-button",
1149
1195
  role: "button",
1150
- onClick: onSave
1196
+ onClick: onSave,
1197
+ onKeyDown: handleKeyPress
1151
1198
  }, "Save"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
1152
1199
  id: "settings-cancel",
1153
1200
  href: "#",
1154
1201
  className: "wc-link govuk-link",
1155
1202
  "data-module": "govuk-button",
1156
1203
  role: "button",
1157
- onClick: onCancel
1204
+ onClick: onCancel,
1205
+ onKeyDown: handleKeyPress
1158
1206
  }, "Cancel")))));
1159
1207
  }
1160
1208
 
@@ -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, 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 (threadId) {\n RightButtonComponent = MinimiseButtonComponent\n\n if (isMobileAndNoHistory) {\n RightButtonComponent = MinimiseButtonComponent\n }\n }\n\n if (!threadId && 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":""}
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\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 const handleKeyPress = e => {\n if (e.key === 'Enter' && !e.shiftKey) {\n switch (e.target.id) {\n case 'text-area':\n e.preventDefault()\n sendMessage()\n break\n case 'end-chat':\n onEndChatScreen(e)\n break\n case 'wc-settings':\n onSettingsScreen(e)\n break\n case 'transcript-download':\n saveChat()\n break\n default:\n break\n }\n } else if (e.key === ' ') {\n if (e.target.id === 'end-chat') {\n onEndChatScreen(e)\n } else if (e.target.id === 'wc-settings') {\n onSettingsScreen(e)\n }\n }\n }\n\n return (\n <>\n <PanelHeader />\n\n <div className='wc-status'>\n <p className='wc-status__availability'>{connectionHeadlineText}</p>\n <a\n id='end-chat'\n className='wc-status__link'\n href='#'\n data-module='govuk-button'\n role='button'\n onClick={onEndChatScreen}\n onKeyDown={handleKeyPress}\n >\n End chat\n </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='text-area'\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 onKeyDown={handleKeyPress}\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 onKeyDown={handleKeyPress}\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 (threadId) {\n RightButtonComponent = MinimiseButtonComponent\n\n if (isMobileAndNoHistory) {\n RightButtonComponent = MinimiseButtonComponent\n }\n }\n\n if (!threadId && 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('#confirm-endchat').focus()\n }, 10)\n }\n }, [])\n\n const handleKeyPress = e => {\n if ((e.key === 'Enter' || e.key === ' ') && e.target.id === 'confirm-endchat') {\n confirmEndChat(e)\n } else if ((e.key === 'Enter' || e.key === ' ') && e.target.id === 'resume-chat') {\n onChatScreen(e)\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\n id='confirm-endchat'\n href='#endChat'\n role='button'\n className='wc-button govuk-button'\n data-module='govuk-button'\n onClick={confirmEndChat}\n onKeyDown={handleKeyPress}\n >\n Yes, end chat\n </a>\n <a\n id='resume-chat'\n href='#resumeChat'\n role='button'\n className='wc-link govuk-link'\n data-module='govuk-button'\n onClick={onChatScreen}\n onKeyDown={handleKeyPress}\n >\n No, resume chat\n </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 const handleKeyPress = e => {\n if ((e.key === 'Enter' || e.key === ' ') && e.target.id === 'feedback-cancel') {\n onCancel(e)\n }\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>\n <a\n className='govuk-link'\n href='#'\n target='_blank'\n rel='noreferrer'\n >\n Feedback Link\n </a>\n </p>\n <p>\n <a\n id='feedback-cancel'\n className='wc-link govuk-link'\n href='#'\n data-module='govuk-button'\n role='button'\n onKeyDown={handleKeyPress}\n onClick={feedbackCancel}\n >\n Close\n </a>\n </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 const handleKeyPress = e => {\n if ((e.key === 'Enter' || e.key === ' ') && e.target.id === 'settings-save') {\n onSave(e)\n } else if ((e.key === 'Enter' || e.key === ' ') && e.target.id === 'settings-cancel') {\n onCancel(e)\n }\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\n id='settings-save'\n href='#'\n className='wc-button govuk-button'\n data-module='govuk-button'\n role='button'\n onClick={onSave}\n onKeyDown={handleKeyPress}\n >\n Save\n </a>\n <a\n id='settings-cancel'\n href='#'\n className='wc-link govuk-link'\n data-module='govuk-button'\n role='button'\n onClick={onCancel}\n onKeyDown={handleKeyPress}\n >\n Cancel\n </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","handleSubmit","saveChat","transcript","saveChatLink","setAttribute","handleKeyPress","shiftKey","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.36",
3
+ "version": "0.0.1-beta.37",
4
4
  "description": "",
5
5
  "main": "dist/server.js",
6
6
  "browser": "dist/client.js",
@@ -70,12 +70,6 @@ export function Chat ({ onEndChatScreen, onSettingsScreen }) {
70
70
 
71
71
  setUserMessage('')
72
72
  }
73
- const handleKeyPress = e => {
74
- if (e.key === 'Enter' && !e.shiftKey) {
75
- e.preventDefault()
76
- sendMessage()
77
- }
78
- }
79
73
 
80
74
  const handleSubmit = e => {
81
75
  e.preventDefault()
@@ -90,13 +84,51 @@ export function Chat ({ onEndChatScreen, onSettingsScreen }) {
90
84
  saveChatLink.setAttribute('href', `data:text/plain;charset=utf-8,${transcript}`)
91
85
  }
92
86
 
87
+ const handleKeyPress = e => {
88
+ if (e.key === 'Enter' && !e.shiftKey) {
89
+ switch (e.target.id) {
90
+ case 'text-area':
91
+ e.preventDefault()
92
+ sendMessage()
93
+ break
94
+ case 'end-chat':
95
+ onEndChatScreen(e)
96
+ break
97
+ case 'wc-settings':
98
+ onSettingsScreen(e)
99
+ break
100
+ case 'transcript-download':
101
+ saveChat()
102
+ break
103
+ default:
104
+ break
105
+ }
106
+ } else if (e.key === ' ') {
107
+ if (e.target.id === 'end-chat') {
108
+ onEndChatScreen(e)
109
+ } else if (e.target.id === 'wc-settings') {
110
+ onSettingsScreen(e)
111
+ }
112
+ }
113
+ }
114
+
93
115
  return (
94
116
  <>
95
117
  <PanelHeader />
96
118
 
97
119
  <div className='wc-status'>
98
120
  <p className='wc-status__availability'>{connectionHeadlineText}</p>
99
- <a className='wc-status__link' href='#' role='button' data-module='govuk-button' onClick={onEndChatScreen}>End chat</a>
121
+ <a
122
+ id='end-chat'
123
+ className='wc-status__link'
124
+ href='#'
125
+ data-module='govuk-button'
126
+ role='button'
127
+ onClick={onEndChatScreen}
128
+ onKeyDown={handleKeyPress}
129
+ >
130
+ End chat
131
+ </a>
100
132
  </div>
101
133
 
102
134
  <div className='wc-body' tabIndex='0'>
@@ -132,7 +164,7 @@ export function Chat ({ onEndChatScreen, onSettingsScreen }) {
132
164
  rows='1'
133
165
  aria-required='true'
134
166
  className='wc-form__textarea'
135
- id='wc-form-textarea'
167
+ id='text-area'
136
168
  name='message'
137
169
  onChange={onChange}
138
170
  onKeyDown={handleKeyPress}
@@ -155,6 +187,7 @@ export function Chat ({ onEndChatScreen, onSettingsScreen }) {
155
187
  id='wc-settings'
156
188
  className='wc-footer__settings-link'
157
189
  data-module='govuk-button'
190
+ onKeyDown={handleKeyPress}
158
191
  onClick={onSettingsScreen}
159
192
  >
160
193
  Settings
@@ -165,6 +198,7 @@ export function Chat ({ onEndChatScreen, onSettingsScreen }) {
165
198
  className='wc-footer__settings-link'
166
199
  data-module='govuk-button'
167
200
  download='floodline-webchat-transcript.txt'
201
+ onKeyDown={handleKeyPress}
168
202
  onClick={saveChat}
169
203
  >
170
204
  Save chat
@@ -25,11 +25,19 @@ export function EndChat ({ onChatScreen, onEndChatConfirm }) {
25
25
  useEffect(() => {
26
26
  if (isKeyboard) {
27
27
  setTimeout(() => {
28
- document.querySelector('#confirmEndChat').focus()
28
+ document.querySelector('#confirm-endchat').focus()
29
29
  }, 10)
30
30
  }
31
31
  }, [])
32
32
 
33
+ const handleKeyPress = e => {
34
+ if ((e.key === 'Enter' || e.key === ' ') && e.target.id === 'confirm-endchat') {
35
+ confirmEndChat(e)
36
+ } else if ((e.key === 'Enter' || e.key === ' ') && e.target.id === 'resume-chat') {
37
+ onChatScreen(e)
38
+ }
39
+ }
40
+
33
41
  return (
34
42
  <>
35
43
  <PanelHeader />
@@ -37,8 +45,28 @@ export function EndChat ({ onChatScreen, onEndChatConfirm }) {
37
45
  <div className='wc-content'>
38
46
  <h3 className='wc-heading' aria-live='polite'>Are you sure you want to end the chat?</h3>
39
47
  <div className='govuk-button-group'>
40
- <a href='#endChat' role='button' className='wc-button govuk-button' data-module='govuk-button' id='confirmEndChat' onClick={confirmEndChat}>Yes, end chat</a>
41
- <a href='#resumeChat' role='button' className='wc-link govuk-link' data-module='govuk-button' onClick={onChatScreen}>No, resume chat</a>
48
+ <a
49
+ id='confirm-endchat'
50
+ href='#endChat'
51
+ role='button'
52
+ className='wc-button govuk-button'
53
+ data-module='govuk-button'
54
+ onClick={confirmEndChat}
55
+ onKeyDown={handleKeyPress}
56
+ >
57
+ Yes, end chat
58
+ </a>
59
+ <a
60
+ id='resume-chat'
61
+ href='#resumeChat'
62
+ role='button'
63
+ className='wc-link govuk-link'
64
+ data-module='govuk-button'
65
+ onClick={onChatScreen}
66
+ onKeyDown={handleKeyPress}
67
+ >
68
+ No, resume chat
69
+ </a>
42
70
  </div>
43
71
  </div>
44
72
  </div>
@@ -6,6 +6,12 @@ export function Feedback ({ onCancel }) {
6
6
  onCancel(e)
7
7
  }
8
8
 
9
+ const handleKeyPress = e => {
10
+ if ((e.key === 'Enter' || e.key === ' ') && e.target.id === 'feedback-cancel') {
11
+ onCancel(e)
12
+ }
13
+ }
14
+
9
15
  return (
10
16
  <>
11
17
  <PanelHeader />
@@ -14,8 +20,29 @@ export function Feedback ({ onCancel }) {
14
20
  <div className='wc-content'>
15
21
  <h3 id='wc-subtitle' className='wc-heading'>Give Feedback on Floodline webchat</h3>
16
22
  <p>Please note we’re unable to respond to feedback.</p>
17
- <p><a className='govuk-link' href='#' target='_blank' rel='noreferrer' role='button' data-module='govuk-button'>Feedback Link</a></p>
18
- <p><a id='feedback-cancel' className='wc-link govuk-link' href='#' data-module='govuk-button' role='button' onClick={feedbackCancel}>Close</a></p>
23
+ <p>
24
+ <a
25
+ className='govuk-link'
26
+ href='#'
27
+ target='_blank'
28
+ rel='noreferrer'
29
+ >
30
+ Feedback Link
31
+ </a>
32
+ </p>
33
+ <p>
34
+ <a
35
+ id='feedback-cancel'
36
+ className='wc-link govuk-link'
37
+ href='#'
38
+ data-module='govuk-button'
39
+ role='button'
40
+ onKeyDown={handleKeyPress}
41
+ onClick={feedbackCancel}
42
+ >
43
+ Close
44
+ </a>
45
+ </p>
19
46
  </div>
20
47
  </div>
21
48
  </>
@@ -16,6 +16,14 @@ export function Settings ({ onCancel }) {
16
16
  onCancel(e)
17
17
  }
18
18
 
19
+ const handleKeyPress = e => {
20
+ if ((e.key === 'Enter' || e.key === ' ') && e.target.id === 'settings-save') {
21
+ onSave(e)
22
+ } else if ((e.key === 'Enter' || e.key === ' ') && e.target.id === 'settings-cancel') {
23
+ onCancel(e)
24
+ }
25
+ }
26
+
19
27
  return (
20
28
  <>
21
29
  <PanelHeader />
@@ -59,8 +67,28 @@ export function Settings ({ onCancel }) {
59
67
  </fieldset>
60
68
 
61
69
  <div className='govuk-button-group'>
62
- <a id='settings-save' href='#' className='wc-button govuk-button' data-module='govuk-button' role='button' onClick={onSave}>Save</a>
63
- <a id='settings-cancel' href='#' className='wc-link govuk-link' data-module='govuk-button' role='button' onClick={onCancel}>Cancel</a>
70
+ <a
71
+ id='settings-save'
72
+ href='#'
73
+ className='wc-button govuk-button'
74
+ data-module='govuk-button'
75
+ role='button'
76
+ onClick={onSave}
77
+ onKeyDown={handleKeyPress}
78
+ >
79
+ Save
80
+ </a>
81
+ <a
82
+ id='settings-cancel'
83
+ href='#'
84
+ className='wc-link govuk-link'
85
+ data-module='govuk-button'
86
+ role='button'
87
+ onClick={onCancel}
88
+ onKeyDown={handleKeyPress}
89
+ >
90
+ Cancel
91
+ </a>
64
92
  </div>
65
93
  </div>
66
94
  </div>