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

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
@@ -34,7 +34,6 @@ function Availability() {
34
34
  threadId,
35
35
  setUnseenCount
36
36
  } = (0,_store_useApp__WEBPACK_IMPORTED_MODULE_4__.useApp)();
37
- const [isFixed, setIsFixed] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
38
37
  const buttonRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)();
39
38
  const onClick = e => {
40
39
  e.preventDefault();
@@ -57,29 +56,27 @@ function Availability() {
57
56
  setChatVisibility(!isChatOpen);
58
57
  }
59
58
  };
60
- const intersectionCallback = entries => {
61
- const [entry] = entries;
62
- const isBelowFold = !entry.isIntersecting && entry.boundingClientRect.top > 0;
63
- setIsFixed(!isChatOpen && isBelowFold && threadId);
64
- };
65
59
  (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
66
- const observer = new window.IntersectionObserver(intersectionCallback, {
67
- rootMargin: '35px'
68
- });
69
- const parentElement = buttonRef.current?.parentElement;
70
- if (parentElement) {
71
- observer.observe(parentElement);
72
- }
73
- return () => {
74
- if (parentElement) {
75
- observer.unobserve(parentElement);
60
+ const onScroll = () => {
61
+ if (!threadId) {
62
+ return;
76
63
  }
64
+ if (availability !== 'AVAILABLE') {
65
+ return;
66
+ }
67
+ const rect = buttonRef.current.parentElement.getBoundingClientRect();
68
+ const isBelowFold = rect.top + 35 > (window.innerHeight || document.documentElement.clientHeight);
69
+ const isFixed = !isChatOpen && isBelowFold;
70
+ document.documentElement.classList.toggle('wc-u-scroll-padding', isFixed);
71
+ document.body.classList.toggle('wc-u-scroll-padding', isFixed);
72
+ buttonRef.current.classList.toggle('wc-availability--fixed', isFixed);
77
73
  };
78
- }, [buttonRef, isChatOpen]);
79
- (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
80
- document.documentElement.classList.toggle('wc-u-scroll-padding', isFixed);
81
- document.body.classList.toggle('wc-u-scroll-padding', isFixed);
82
- }, [isFixed]);
74
+ document.addEventListener('scroll', onScroll);
75
+ onScroll();
76
+ return () => {
77
+ document.removeEventListener('scroll', onScroll);
78
+ };
79
+ }, [threadId, isChatOpen, availability]);
83
80
  let TextComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, "Show chat");
84
81
  if (!threadId) {
85
82
  TextComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, "Start chat");
@@ -87,7 +84,7 @@ function Availability() {
87
84
  switch (availability) {
88
85
  case 'AVAILABLE':
89
86
  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("div", {
90
- className: (0,_lib_classnames__WEBPACK_IMPORTED_MODULE_1__.classnames)('wc-availability', isFixed && 'wc-availability--fixed', isChatOpen && 'wc-open'),
87
+ className: (0,_lib_classnames__WEBPACK_IMPORTED_MODULE_1__.classnames)('wc-availability', isChatOpen && 'wc-open'),
91
88
  ref: buttonRef
92
89
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
93
90
  className: "wc-availability__inner"
@@ -536,17 +533,19 @@ __webpack_require__.r(__webpack_exports__);
536
533
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
537
534
  /* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom */ "react-dom");
538
535
  /* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_1__);
539
- /* harmony import */ var _screens_pre_chat_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../screens/pre-chat.jsx */ "./src/client/components/screens/pre-chat.jsx");
540
- /* harmony import */ var _screens_request_chat_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../screens/request-chat.jsx */ "./src/client/components/screens/request-chat.jsx");
541
- /* harmony import */ var _chat_chat_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../chat/chat.jsx */ "./src/client/components/chat/chat.jsx");
542
- /* harmony import */ var _screens_unavailable_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../screens/unavailable.jsx */ "./src/client/components/screens/unavailable.jsx");
543
- /* harmony import */ var _screens_end_chat_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../screens/end-chat.jsx */ "./src/client/components/screens/end-chat.jsx");
544
- /* harmony import */ var _screens_settings_jsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../screens/settings.jsx */ "./src/client/components/screens/settings.jsx");
545
- /* harmony import */ var _screens_feedback_jsx__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../screens/feedback.jsx */ "./src/client/components/screens/feedback.jsx");
546
- /* harmony import */ var _store_useApp_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../store/useApp.js */ "./src/client/store/useApp.js");
547
- /* harmony import */ var _store_useChatSdk_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../store/useChatSdk.js */ "./src/client/store/useChatSdk.js");
548
- /* harmony import */ var _hooks_useFocusedElements_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../hooks/useFocusedElements.js */ "./src/client/hooks/useFocusedElements.js");
549
- /* harmony import */ var _lib_history_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../lib/history.js */ "./src/client/lib/history.js");
536
+ /* harmony import */ var _lib_classnames_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../lib/classnames.js */ "./src/client/lib/classnames.js");
537
+ /* harmony import */ var _screens_pre_chat_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../screens/pre-chat.jsx */ "./src/client/components/screens/pre-chat.jsx");
538
+ /* harmony import */ var _screens_request_chat_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../screens/request-chat.jsx */ "./src/client/components/screens/request-chat.jsx");
539
+ /* harmony import */ var _chat_chat_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../chat/chat.jsx */ "./src/client/components/chat/chat.jsx");
540
+ /* harmony import */ var _screens_unavailable_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../screens/unavailable.jsx */ "./src/client/components/screens/unavailable.jsx");
541
+ /* harmony import */ var _screens_end_chat_jsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../screens/end-chat.jsx */ "./src/client/components/screens/end-chat.jsx");
542
+ /* harmony import */ var _screens_settings_jsx__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../screens/settings.jsx */ "./src/client/components/screens/settings.jsx");
543
+ /* harmony import */ var _screens_feedback_jsx__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../screens/feedback.jsx */ "./src/client/components/screens/feedback.jsx");
544
+ /* harmony import */ var _store_useApp_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../store/useApp.js */ "./src/client/store/useApp.js");
545
+ /* harmony import */ var _store_useChatSdk_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../store/useChatSdk.js */ "./src/client/store/useChatSdk.js");
546
+ /* harmony import */ var _hooks_useFocusedElements_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../hooks/useFocusedElements.js */ "./src/client/hooks/useFocusedElements.js");
547
+ /* harmony import */ var _lib_history_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../lib/history.js */ "./src/client/lib/history.js");
548
+
550
549
 
551
550
 
552
551
 
@@ -571,14 +570,15 @@ function Panel() {
571
570
  setChatVisibility,
572
571
  setMessages,
573
572
  setUnseenCount,
574
- isMobile
575
- } = (0,_store_useApp_js__WEBPACK_IMPORTED_MODULE_9__.useApp)();
573
+ isMobile,
574
+ isKeyboard
575
+ } = (0,_store_useApp_js__WEBPACK_IMPORTED_MODULE_10__.useApp)();
576
576
  const {
577
577
  fetchThread,
578
578
  fetchMessages
579
- } = (0,_store_useChatSdk_js__WEBPACK_IMPORTED_MODULE_10__.useChatSdk)(sdk);
579
+ } = (0,_store_useChatSdk_js__WEBPACK_IMPORTED_MODULE_11__.useChatSdk)(sdk);
580
580
  const [screen, setScreen] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(threadId ? 2 : 0);
581
- (0,_hooks_useFocusedElements_js__WEBPACK_IMPORTED_MODULE_11__.useFocusedElements)(screen);
581
+ (0,_hooks_useFocusedElements_js__WEBPACK_IMPORTED_MODULE_12__.useFocusedElements)(screen);
582
582
  const onEscapeKey = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(e => {
583
583
  if (e.key === 'Escape' || e.key === 'Esc') {
584
584
  if (threadId) {
@@ -586,7 +586,7 @@ function Panel() {
586
586
  setUnseenCount(0);
587
587
  }
588
588
  setChatVisibility(false);
589
- (0,_lib_history_js__WEBPACK_IMPORTED_MODULE_12__.historyReplaceState)();
589
+ (0,_lib_history_js__WEBPACK_IMPORTED_MODULE_13__.historyReplaceState)();
590
590
  }
591
591
  }, [thread, threadId, setUnseenCount, setChatVisibility]);
592
592
 
@@ -653,49 +653,49 @@ function Panel() {
653
653
  let ScreenComponent;
654
654
  switch (screen) {
655
655
  case 0:
656
- ScreenComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_screens_pre_chat_jsx__WEBPACK_IMPORTED_MODULE_2__.PreChat, {
656
+ ScreenComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_screens_pre_chat_jsx__WEBPACK_IMPORTED_MODULE_3__.PreChat, {
657
657
  onContinue: goToRequestChatScreen
658
658
  });
659
659
  break;
660
660
  case 1:
661
- ScreenComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_screens_request_chat_jsx__WEBPACK_IMPORTED_MODULE_3__.RequestChat, {
661
+ ScreenComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_screens_request_chat_jsx__WEBPACK_IMPORTED_MODULE_4__.RequestChat, {
662
662
  onPreChatScreen: goToPreChatScreen
663
663
  });
664
664
  break;
665
665
  case 2:
666
- ScreenComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_chat_chat_jsx__WEBPACK_IMPORTED_MODULE_4__.Chat, {
666
+ ScreenComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_chat_chat_jsx__WEBPACK_IMPORTED_MODULE_5__.Chat, {
667
667
  onSettingsScreen: goToSettingsScreen,
668
668
  onEndChatScreen: goToEndChatScreen
669
669
  });
670
670
  break;
671
671
  case 3:
672
- ScreenComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_screens_end_chat_jsx__WEBPACK_IMPORTED_MODULE_6__.EndChat, {
672
+ ScreenComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_screens_end_chat_jsx__WEBPACK_IMPORTED_MODULE_7__.EndChat, {
673
673
  onChatScreen: goToChatScreen,
674
674
  onEndChatConfirm: goToFeedbackScreen
675
675
  });
676
676
  break;
677
677
  case 4:
678
- ScreenComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_screens_feedback_jsx__WEBPACK_IMPORTED_MODULE_8__.Feedback, {
678
+ ScreenComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_screens_feedback_jsx__WEBPACK_IMPORTED_MODULE_9__.Feedback, {
679
679
  onCancel: () => setChatVisibility(false)
680
680
  });
681
681
  break;
682
682
  case 5:
683
- ScreenComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_screens_settings_jsx__WEBPACK_IMPORTED_MODULE_7__.Settings, {
683
+ ScreenComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_screens_settings_jsx__WEBPACK_IMPORTED_MODULE_8__.Settings, {
684
684
  onCancel: goToChatScreen
685
685
  });
686
686
  break;
687
687
  default:
688
- ScreenComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_screens_pre_chat_jsx__WEBPACK_IMPORTED_MODULE_2__.PreChat, {
688
+ ScreenComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_screens_pre_chat_jsx__WEBPACK_IMPORTED_MODULE_3__.PreChat, {
689
689
  onContinue: goToRequestChatScreen
690
690
  });
691
691
  }
692
692
  if (availability === 'UNAVAILABLE') {
693
- ScreenComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_screens_unavailable_jsx__WEBPACK_IMPORTED_MODULE_5__.Unavailable, null);
693
+ ScreenComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_screens_unavailable_jsx__WEBPACK_IMPORTED_MODULE_6__.Unavailable, null);
694
694
  }
695
695
  const Component = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
696
696
  id: "wc-panel",
697
697
  role: "dialog",
698
- className: "wc-panel",
698
+ className: (0,_lib_classnames_js__WEBPACK_IMPORTED_MODULE_2__.classnames)('wc-panel', isKeyboard && 'wc-focus-visible'),
699
699
  tabIndex: "-1",
700
700
  "aria-modal": "true",
701
701
  "aria-labelledby": "wc-header-title"
@@ -1284,7 +1284,9 @@ const useFocusedElements = screen => {
1284
1284
  document.addEventListener('keydown', onKeyDown);
1285
1285
  return () => {
1286
1286
  setAriaHidden();
1287
- document.body.querySelector('.wc-availability__link')?.focus();
1287
+ document.body.querySelector('.wc-availability__link')?.focus({
1288
+ preventScroll: true
1289
+ });
1288
1290
  document.removeEventListener('keydown', onKeyDown);
1289
1291
  };
1290
1292
  }, [panelElements]);
@@ -1371,10 +1373,10 @@ const historyPushState = () => {
1371
1373
  };
1372
1374
  const historyReplaceState = () => {
1373
1375
  if (window.history.state?.history) {
1374
- window.history.back();
1376
+ return window.history.back();
1375
1377
  }
1376
1378
  const url = window.location.href.split('#')[0];
1377
- window.history.replaceState(null, null, url);
1379
+ return window.history.replaceState(null, null, url);
1378
1380
  };
1379
1381
 
1380
1382
  /***/ }),
@@ -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, useState } from 'react'\n\nimport { classnames } from '../../lib/classnames'\nimport { Panel } from '../panel/panel.jsx'\nimport { SkipLink } from '../skip-link.jsx'\n\nimport { useApp } from '../../store/useApp'\nimport { historyPushState, historyReplaceState } from '../../lib/history.js'\n\nexport function Availability () {\n const { availability, isChatOpen, setChatVisibility, unseenCount, threadId, setUnseenCount } = useApp()\n\n const [isFixed, setIsFixed] = useState(false)\n const buttonRef = useRef()\n\n const onClick = e => {\n e.preventDefault()\n setUnseenCount(0)\n setChatVisibility(!isChatOpen)\n\n if (!isChatOpen) {\n historyPushState()\n } else {\n historyReplaceState()\n }\n }\n\n const onKeyDown = event => {\n if (event.key === ' ') {\n event.preventDefault()\n }\n }\n\n const onKeyUp = event => {\n if (event.key === ' ') {\n setUnseenCount(0)\n setChatVisibility(!isChatOpen)\n }\n }\n\n const intersectionCallback = entries => {\n const [entry] = entries\n const isBelowFold = !entry.isIntersecting && entry.boundingClientRect.top > 0\n setIsFixed(!isChatOpen && isBelowFold && threadId)\n }\n\n useEffect(() => {\n const observer = new window.IntersectionObserver(intersectionCallback, {\n rootMargin: '35px'\n })\n\n const parentElement = buttonRef.current?.parentElement\n\n if (parentElement) {\n observer.observe(parentElement)\n }\n\n return () => {\n if (parentElement) {\n observer.unobserve(parentElement)\n }\n }\n }, [buttonRef, isChatOpen])\n\n useEffect(() => {\n document.documentElement.classList.toggle('wc-u-scroll-padding', isFixed)\n document.body.classList.toggle('wc-u-scroll-padding', isFixed)\n }, [isFixed])\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', isFixed && 'wc-availability--fixed', isChatOpen && 'wc-open')}\n ref={buttonRef}\n >\n <div className='wc-availability__inner'>\n <a\n className='wc-availability__link'\n href='#webchat'\n draggable='false'\n onClick={onClick}\n onKeyUp={onKeyUp}\n onKeyDown={onKeyDown}\n role='button'\n data-module='govuk-button'\n >\n {TextComponent}\n {unseenCount > 0 && !isChatOpen ? <span className='wc-availability__unseen'>{unseenCount}</span> : null}\n </a>\n </div>\n </div>\n {isChatOpen && <Panel />}\n <SkipLink />\n </>\n )\n case 'EXISTING':\n case 'UNAVAILABLE':\n return (\n <p className='govuk-body'>When it is available, a 'start chat' link will appear.</p>\n )\n default:\n return (\n <p className='govuk-body'>Checking availability</p>\n )\n }\n}\n","import React, { useEffect, useRef, useState } from 'react'\n\nimport { PanelHeader } from '../panel/panel-header.jsx'\nimport { PanelFooter } from '../panel/panel-footer.jsx'\nimport { Message } from '../message/message.jsx'\n\nimport { useApp } from '../../store/useApp.js'\nimport { useTextareaAutosize } from '../../hooks/useTextareaAutosize.js'\nimport { formatTranscript } from '../../lib/transform-messages.js'\n\nexport function Chat ({ onEndChatScreen, onSettingsScreen }) {\n const { availability, thread, messages, agent, agentStatus, isAgentTyping, settings, isKeyboard } = useApp()\n\n const [userMessage, setUserMessage] = useState('')\n const [focusVisibleWithin, setFocusVisibleWithin] = useState(false)\n\n const messageRef = useRef()\n\n useTextareaAutosize(messageRef.current, userMessage)\n\n useEffect(() => {\n if (settings.scroll && messages.length !== 0) {\n const chatBody = document.querySelector('.wc-body')\n chatBody.scrollTop = chatBody.scrollHeight\n }\n }, [messages, isAgentTyping])\n\n useEffect(() => {\n const label = document.querySelector('.wc-form__label')\n\n if (userMessage.length === 0) {\n label.classList.remove('govuk-visually-hidden')\n } else {\n label.classList.add('govuk-visually-hidden')\n }\n }, [userMessage])\n\n const onChange = e => {\n setUserMessage(e.target?.value)\n }\n\n const agentName = agent?.nickname || agent?.firstName\n\n let connectionHeadlineText = 'Connecting to Floodline'\n\n if (agentStatus === 'closed') {\n connectionHeadlineText = agentName ? `${agentName} ended the session` : 'Session ended by advisor'\n } else if (agentStatus) {\n if (agentName) {\n connectionHeadlineText = `You are speaking with ${agentName}`\n } else {\n connectionHeadlineText = 'No advisers currently available'\n }\n }\n\n if (availability === 'UNAVAILABLE') {\n connectionHeadlineText = 'Webchat is not currently available'\n }\n\n const sendMessage = () => {\n if (messageRef.current.value.length === 0) {\n return\n }\n\n try {\n thread.sendTextMessage(messageRef.current.value.trim())\n } catch (err) {\n console.log('[Chat Error] sendMessage', err)\n }\n\n setUserMessage('')\n }\n const handleKeyPress = e => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n sendMessage()\n }\n }\n\n const handleSubmit = e => {\n e.preventDefault()\n sendMessage()\n }\n\n const saveChat = () => {\n const transcript = formatTranscript(messages)\n\n const saveChatLink = document.querySelector('#transcript-download')\n\n saveChatLink.setAttribute('href', `data:text/plain;charset=utf-8,${transcript}`)\n }\n\n return (\n <>\n <PanelHeader />\n\n <div className='wc-status'>\n <p className='wc-status__availability'>{connectionHeadlineText}</p>\n <a className='wc-status__link' href='#' data-module='govuk-button' onClick={onEndChatScreen}>End chat</a>\n </div>\n\n <div className='wc-body' tabIndex='0'>\n <ul className='wc-chat'>\n {messages.length\n ? messages.map((msg, index) => <Message key={msg.id} message={msg} previousMessage={messages[index - 1]} />)\n : null}\n {isAgentTyping\n ? (\n <li className='wc-chat__message outbound'>\n <div className='wc-chat__from'>{agentName} is typing</div>\n <div className='wc-chat__text outbound'>\n <svg width='28' height='16' x='0px' y='0px' viewBox='0 0 28 16'>\n <circle stroke='none' cx='3' cy='8' r='3' fill='currentColor' />\n <circle stroke='none' cx='14' cy='8' r='3' fill='currentColor' />\n <circle stroke='none' cx='25' cy='8' r='3' fill='currentColor' />\n </svg>\n </div>\n </li>\n )\n : null}\n </ul>\n </div>\n\n <PanelFooter>\n <form className={`wc-form${focusVisibleWithin ? ' wc-focus-within' : ''}`} noValidate onSubmit={handleSubmit}>\n <label className='govuk-label wc-form__label' htmlFor='wc-form-textarea'>\n Your message<span className='govuk-visually-hidden'> (enter key submits)</span>\n </label>\n\n <textarea\n ref={messageRef}\n rows='1'\n aria-required='true'\n className='wc-form__textarea'\n id='wc-form-textarea'\n name='message'\n onChange={onChange}\n onKeyDown={handleKeyPress}\n onFocus={() => { setFocusVisibleWithin(isKeyboard) }}\n onBlur={() => { setFocusVisibleWithin(false) }}\n value={userMessage}\n />\n\n <input\n type='submit'\n className='wc-form__button govuk-button'\n value='Send'\n data-prevent-double-click='true'\n />\n </form>\n\n <div className='wc-footer__settings'>\n <a\n href='#'\n id='wc-settings'\n className='wc-footer__settings-link'\n data-module='govuk-button'\n onClick={onSettingsScreen}\n >\n Settings\n </a>\n <a\n href='#'\n id='transcript-download'\n className='wc-footer__settings-link'\n data-module='govuk-button'\n download='floodline-webchat-transcript.txt'\n onClick={saveChat}\n >\n Save chat\n </a>\n </div>\n </PanelFooter>\n </>\n )\n}\n","import React from 'react'\n\nexport const ErrorSummary = ({ errors }) => {\n const errs = Object.keys(errors)\n\n const goToInput = e => {\n e.preventDefault()\n const key = e.target.getAttribute('data-key')\n document.querySelector(`#wc-${key}`).focus()\n }\n\n if (errs.length === 0) {\n return null\n }\n\n return (\n <div className='govuk-error-summary govuk-!-static-margin-bottom-7' data-module='govuk-error-summary' tabIndex='-1'>\n <div role='alert'>\n <h2 id='wc-error' className='wc-error-summary__title govuk-error-summary__title'>\n There is a problem\n </h2>\n <div className='govuk-error-summary__body'>\n <ul className='govuk-list govuk-error-summary__list wc-error-summary__list'>\n {errs.map(key => (\n <li key={key}>\n <a href='#' data-key={key} onClick={goToInput}>{errors[key]}</a>\n </li>\n ))}\n </ul>\n </div>\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport { classnames } from '../../lib/classnames'\n\nexport function Message ({ message, previousMessage }) {\n const outbound = message.direction === 'outbound'\n\n const messageOwnerSameAsPrevious = message?.direction === previousMessage?.direction\n\n return (\n <li className={classnames('wc-chat__message', outbound ? 'outbound' : 'inbound')}>\n <div className='wc-chat__from'>\n {messageOwnerSameAsPrevious ? null : <span>{outbound ? message.assignee : 'You'}</span>}\n <span className='govuk-visually-hidden'>:</span>\n </div>\n <div className={classnames('wc-chat__text', outbound ? 'outbound' : 'inbound')}>\n {message.text}\n </div>\n </li>\n )\n}\n","import React from 'react'\n\nexport function PanelFooter ({ children }) {\n return (\n <div className='wc-footer'>\n {children}\n </div>\n )\n}\n","import React from 'react'\nimport { useApp } from '../../store/useApp.js'\nimport { historyReplaceState } from '../../lib/history.js'\n\nexport function PanelHeader () {\n const { thread, threadId, setChatVisibility, setUnseenCount, isMobile } = useApp()\n\n const onClose = e => {\n e.preventDefault()\n setChatVisibility(false)\n historyReplaceState()\n\n if (threadId) {\n thread?.lastMessageSeen()\n setUnseenCount(0)\n }\n }\n\n const BackButtonComponent = (\n <button className='wc-header__back' aria-label='Close the webchat' onClick={onClose}>\n <svg aria-hidden='true' focusable='false' width='20' height='20' viewBox='0 0 20 20'>\n <path d='M4.828,11L12.314,18.485L10.899,19.899L1,10L10.899,0.101L12.314,1.515L4.828,9L19,9L19,11L4.828,11Z' fill='currentColor' />\n </svg>\n </button>\n )\n\n const CloseButtonComponent = (\n <button className='wc-header__close' aria-label='Close the webchat' onClick={onClose}>\n <svg aria-hidden='true' focusable='false' width='20' height='20' viewBox='0 0 20 20'>\n <path d='M10,8.6L15.6,3L17,4.4L11.4,10L17,15.6L15.6,17L10,11.4L4.4,17L3,15.6L8.6,10L3,4.4L4.4,3L10,8.6Z' fill='currentColor' />\n </svg>\n </button>\n )\n\n const MinimiseButtonComponent = (\n <button className='wc-header__hide' aria-label='Minimise the webchat' onClick={onClose}>\n <svg aria-hidden='true' focusable='false' width='20' height='20' viewBox='0 0 20 20'>\n <path d='M10 14.4l-7-7L4.4 6l5.6 5.6L15.6 6 17 7.4l-7 7z' fill='currentColor' />\n </svg>\n </button>\n )\n\n const isMobileAndHasHistory = isMobile && window.history.state\n const isMobileAndNoHistory = isMobile && !window.history.state\n\n let RightButtonComponent = CloseButtonComponent\n\n if (thread) {\n RightButtonComponent = MinimiseButtonComponent\n\n if (isMobileAndNoHistory) {\n RightButtonComponent = MinimiseButtonComponent\n }\n }\n\n if (!thread && isMobileAndNoHistory) {\n RightButtonComponent = CloseButtonComponent\n }\n\n if (isMobileAndHasHistory) {\n RightButtonComponent = null\n }\n\n return (\n <div className='wc-header'>\n {isMobileAndHasHistory ? BackButtonComponent : null}\n\n <h2 id='wc-header-title' className='wc-header__title'>\n Floodline Webchat\n </h2>\n\n {RightButtonComponent}\n </div>\n )\n}\n","import React, { useEffect, useState, useCallback } from 'react'\nimport { createPortal } from 'react-dom'\n\nimport { PreChat } from '../screens/pre-chat.jsx'\nimport { RequestChat } from '../screens/request-chat.jsx'\nimport { Chat } from '../chat/chat.jsx'\nimport { Unavailable } from '../screens/unavailable.jsx'\nimport { EndChat } from '../screens/end-chat.jsx'\nimport { Settings } from '../screens/settings.jsx'\nimport { Feedback } from '../screens/feedback.jsx'\n\nimport { useApp } from '../../store/useApp.js'\nimport { useChatSdk } from '../../store/useChatSdk.js'\nimport { useFocusedElements } from '../../hooks/useFocusedElements.js'\nimport { historyReplaceState } from '../../lib/history.js'\n\nexport function Panel () {\n const { sdk, availability, thread, threadId, setThread, setThreadId, setChatVisibility, setMessages, setUnseenCount, isMobile } = useApp()\n const { fetchThread, fetchMessages } = useChatSdk(sdk)\n\n const [screen, setScreen] = useState(threadId ? 2 : 0)\n\n useFocusedElements(screen)\n\n const onEscapeKey = useCallback(e => {\n if (e.key === 'Escape' || e.key === 'Esc') {\n if (threadId) {\n thread?.lastMessageSeen()\n setUnseenCount(0)\n }\n setChatVisibility(false)\n historyReplaceState()\n }\n }, [thread, threadId, setUnseenCount, setChatVisibility])\n\n /**\n * We need ammend classes on the body element to handle mobile behaviour\n */\n useEffect(() => {\n document.body.classList.remove('wc-u-hidden')\n document.getElementsByTagName('html')[0].classList.add('wc-u-html')\n document.body.classList.add('wc-u-body')\n return () => {\n document.getElementsByTagName('html')[0].classList.remove('wc-u-html')\n document.body.classList.remove('wc-u-body')\n }\n }, [isMobile])\n\n /**\n * Initializes the eventListener for pressing the escape key\n */\n useEffect(() => {\n document.addEventListener('keydown', onEscapeKey)\n\n return () => {\n document.removeEventListener('keydown', onEscapeKey)\n }\n }, [onEscapeKey, setChatVisibility])\n\n /**\n * Recovers the thread if there is a threadId but no thread loaded in to state\n */\n useEffect(() => {\n const recover = async () => {\n try {\n const fetchedThread = await fetchThread(threadId)\n setThread(fetchedThread)\n\n const fetchedMessages = await fetchMessages(fetchedThread, threadId)\n setMessages(fetchedMessages)\n } catch (err) {\n console.log('[Chat Error] fetchThread', err)\n\n setThreadId()\n setThread()\n setScreen(0)\n }\n }\n\n if (threadId) {\n if (thread) {\n thread.lastMessageSeen()\n setUnseenCount(0)\n setScreen(2)\n } else {\n recover()\n }\n }\n }, [thread, threadId])\n\n const handleScreenChange = newScreen => e => {\n e.preventDefault()\n setScreen(newScreen)\n }\n\n const goToPreChatScreen = handleScreenChange(0)\n const goToRequestChatScreen = handleScreenChange(1)\n const goToChatScreen = handleScreenChange(2)\n const goToEndChatScreen = handleScreenChange(3)\n const goToFeedbackScreen = handleScreenChange(4)\n const goToSettingsScreen = handleScreenChange(5)\n 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='wc-panel' tabIndex='-1' aria-modal='true' aria-labelledby='wc-header-title'>\n <div className='wc-panel__inner'>\n {ScreenComponent}\n </div>\n </div>\n )\n\n return (\n <>\n {createPortal(Component, document.body)}\n </>\n )\n}\n","import React from 'react'\nimport { PanelHeader } from '../panel/panel-header.jsx'\nimport { useApp } from '../../store/useApp.js'\n\nexport function EndChat ({ onChatScreen, onEndChatConfirm }) {\n const { setCustomerId, setThreadId, setMessages, agentStatus, thread, setUnseenCount } = useApp()\n\n const confirmEndChat = async e => {\n e.preventDefault()\n\n setThreadId()\n setMessages([])\n setCustomerId()\n thread.lastMessageSeen()\n setUnseenCount(0)\n\n // End chat if still open\n if (agentStatus !== 'closed') {\n thread.endChat()\n }\n\n onEndChatConfirm(e)\n }\n\n return (\n <>\n <PanelHeader />\n <div className='wc-body'>\n <div className='wc-content'>\n <h3 className='wc-heading' aria-live='polite'>Are you sure you want to end the chat?</h3>\n <div className='govuk-button-group'>\n <a href='#endChat' role='button' className='wc-button govuk-button' data-module='govuk-button' id='confirmEndChat' onClick={confirmEndChat}>Yes, end chat</a>\n <a href='#resumeChat' role='button' className='wc-link govuk-link' onClick={onChatScreen}>No, resume chat</a>\n </div>\n </div>\n </div>\n </>\n )\n}\n","import React from 'react'\nimport { PanelHeader } from '../panel/panel-header.jsx'\n\nexport function Feedback ({ onCancel }) {\n const feedbackCancel = async e => {\n onCancel(e)\n }\n\n return (\n <>\n <PanelHeader />\n\n <div className='wc-body'>\n <div className='wc-content'>\n <h3 id='wc-subtitle' className='wc-heading'>Give Feedback on Floodline webchat</h3>\n <p>Please note we’re unable to respond to feedback.</p>\n <p><a className='govuk-link' href='#' target='_blank' rel='noreferrer'>Feedback Link</a></p>\n <p><a id='feedback-cancel' className='wc-link govuk-link' href='#' data-module='govuk-button' role='button' onClick={feedbackCancel}>Close</a></p>\n </div>\n </div>\n </>\n )\n}\n","import React from 'react'\nimport { PanelHeader } from '../panel/panel-header.jsx'\n\nexport function PreChat ({ onContinue }) {\n return (\n <>\n <PanelHeader />\n\n <div className='wc-body'>\n <div className='wc-content'>\n <h3 className='wc-heading' aria-live='polite'>What you can use webchat for</h3>\n <p>Webchat lets you talk directly to a Floodline adviser.</p>\n\n <p>You can use webchat to get:</p>\n <ul className='wc-list'>\n <li>current flood warnings and alerts in your area</li>\n <li>information on the flood warning service</li>\n <li>advice on what to do before, during and after a flood</li>\n </ul>\n <p>\n There are other ways to&nbsp;\n <a className='govuk-link' href='https://www.gov.uk/sign-up-for-flood-warnings' target='_blank' rel='noreferrer'>\n sign up for flood warnings\n </a>\n &nbsp;and&nbsp;\n <a className='govuk-link' href='https://www.fws.environment-agency.gov.uk/app/olr/login' target='_blank' rel='noreferrer'>\n manage your flood warnings account\n </a>.\n </p>\n <p>\n Do not use webchat to&nbsp;\n <a\n className='govuk-link'\n href='https://www.gov.uk/report-flood-cause'\n target='_blank'\n rel='noreferrer'\n >\n report a flood\n </a>.\n </p>\n\n <button className='govuk-button wc-button govuk-!-margin-top-1' data-module='govuk-button' onClick={onContinue}>Continue</button>\n\n <h3 className='wc-heading'>Other flood information</h3>\n\n <p>Call Floodline for all other flood and flood warning information.</p>\n <p>\n <strong>Floodline helpline</strong>\n <br />\n Telephone: 0345 988 1188\n <br />\n Textphone: 0345 602 6340\n <br />\n Open 24 hours a day, 7 days a week\n <br />\n <a className='govuk-link' href='https://gov.uk/call-charges' target='_blank' rel='noreferrer'>Find out more about call charges</a>\n </p>\n </div>\n </div>\n </>\n )\n}\n","import React, { useRef, useState, useEffect } from 'react'\nimport * as uuid from 'uuid'\n\nimport { classnames } from '../../lib/classnames.js'\nimport { PanelHeader } from '../panel/panel-header.jsx'\nimport { useApp } from '../../store/useApp.js'\nimport { useChatSdk } from '../../store/useChatSdk.js'\nimport { ErrorSummary } from '../errorSummary/error-summary.jsx'\n\nconst QUESTION_MAX_LENGTH = 500\n\nexport function RequestChat ({ onPreChatScreen }) {\n const { sdk, setCustomerId, setThreadId, setThread } = useApp()\n const { fetchCustomerId, fetchThread } = useChatSdk(sdk)\n const [errors, setErrors] = useState({})\n const [questionLength, setQuestionLength] = useState(0)\n const [isButtonDisabled, setButtonDisabled] = useState(false)\n\n const nameRef = useRef()\n const questionRef = useRef()\n\n const isQuestionLengthValid = QUESTION_MAX_LENGTH >= questionLength\n const questionLengthRemaining = QUESTION_MAX_LENGTH - questionLength\n const questionLengthExceeded = questionLength - QUESTION_MAX_LENGTH\n\n let questionHint = `You have ${questionLengthRemaining} characters remaining`\n\n if (!isQuestionLengthValid) {\n questionHint = `You have ${questionLengthExceeded} characters too many`\n }\n\n useEffect(() => {\n if (Object.keys(errors).length) {\n document.querySelector('.govuk-error-summary')?.focus()\n }\n }, [errors])\n\n const onQuestionChange = e => {\n setQuestionLength(e.target.value.length)\n }\n\n const buttonLabel = isButtonDisabled ? 'Requesting...' : 'Request Chat'\n\n const onRequestChat = async e => {\n e.preventDefault()\n\n const errs = {}\n\n if (nameRef.current.value.length === 0) {\n errs.name = 'Enter your name'\n }\n\n if (questionRef.current.value.length === 0) {\n errs.question = 'Enter your question'\n }\n\n if (questionRef.current.value.length > QUESTION_MAX_LENGTH) {\n errs.question = 'Your question must be 500 characters or less'\n }\n\n if (Object.keys(errs).length === 0) {\n try {\n setButtonDisabled(true)\n const threadId = uuid.v4()\n const customerId = await fetchCustomerId()\n const thread = await fetchThread(threadId)\n\n sdk.getCustomer().setName(nameRef.current.value)\n\n await thread.startChat(questionRef.current.value || 'Begin conversation')\n\n setCustomerId(customerId)\n setThreadId(threadId)\n setThread(thread)\n thread.setCustomField('threadid', threadId)\n } catch (err) {\n console.log('[Request Chat Error]', err)\n }\n }\n\n setErrors(errs)\n }\n\n return (\n <>\n <PanelHeader />\n\n <div className='wc-body'>\n <div className='wc-content'>\n <a href='#' className='wc-back-link govuk-back-link' onClick={onPreChatScreen}>\n What you can use webchat for\n </a>\n\n <ErrorSummary errors={errors} />\n\n <h3 className='wc-heading' aria-live='polite'>\n Your name and question\n </h3>\n\n <form>\n <div className={classnames('wc-form-group', 'govuk-form-group', errors.name && 'govuk-form-group--error')}>\n <label className='wc-label govuk-label' htmlFor='wc-name'>\n Your name\n </label>\n {errors.name && (\n <p className='govuk-error-message'>\n <span className='govuk-visually-hidden'>Error:</span> {errors.name}\n </p>\n )}\n <input\n ref={nameRef}\n className={classnames('wc-input', 'govuk-input', errors.name && 'govuk-input--error')}\n id='wc-name'\n name='name'\n type='text'\n data-testid='request-chat-user-name'\n />\n </div>\n\n <div className='wc-form-group govuk-character-count' data-module='govuk-character-count' data-maxlength='500'>\n <div className={classnames('govuk-form-group', errors.question && 'govuk-form-group--error')}>\n <label className='wc-label govuk-label' htmlFor='wc-question'>\n Your question\n </label>\n {errors.question && (\n <p className='govuk-error-message'>\n <span className='govuk-visually-hidden'>Error:</span>\n {errors.question}\n </p>\n )}\n <textarea\n ref={questionRef}\n id='wc-question'\n name='question'\n rows='5'\n aria-describedby='wc-question-info'\n onChange={onQuestionChange}\n className={classnames('wc-textarea', 'govuk-textarea', 'govuk-js-character-count', !isQuestionLengthValid || errors.question ? 'govuk-textarea--error' : '')}\n data-testid='request-chat-user-question'\n />\n <div\n id='wc-question-info'\n className='wc-hint govuk-hint govuk-char-count__msg'\n style={{ color: `${!isQuestionLengthValid ? '#d4351c' : ''}` }}\n aria-hidden='true'\n >\n {questionHint}\n </div>\n <div className='govuk-character-count__sr-status govuk-visually-hidden' aria-live='polite'>\n {questionHint}\n </div>\n </div>\n </div>\n\n <div className='wc-inset-text govuk-inset-text'>\n By selecting 'Request chat' you agree to the terms of our&nbsp;\n <a href='https://check-for-flooding.service.gov.uk/privacy-notice' target='_blank' rel='noreferrer' className='govuk-link'>privacy notice</a>.\n </div>\n\n <button\n className='wc-button govuk-button govuk-!-margin-top-1'\n data-module='govuk-button'\n onClick={onRequestChat}\n disabled={isButtonDisabled}\n >\n {buttonLabel}\n </button>\n </form>\n </div>\n </div>\n </>\n )\n}\n","import React, { useState } from 'react'\nimport { PanelHeader } from '../panel/panel-header.jsx'\n\nimport { useApp } from '../../store/useApp.js'\n\nexport function Settings ({ onCancel }) {\n const { settings, setSettings } = useApp()\n\n const [optionAudio, setOptionAudio] = useState(settings.audio)\n const [optionScroll, setOptionScroll] = useState(settings.scroll)\n\n const onSave = e => {\n e.preventDefault()\n\n setSettings({ audio: optionAudio, scroll: optionScroll })\n onCancel(e)\n }\n\n return (\n <>\n <PanelHeader />\n\n <div className='wc-body'>\n <div className='wc-content'>\n <fieldset className='govuk-fieldset govuk-!-margin-bottom-4'>\n <legend className='govuk-fieldset__legend govuk-fieldset__legend'>\n <h3 id='wc-subtitle' className='wc-heading'>Change settings</h3>\n </legend>\n <div className='govuk-checkboxes govuk-checkboxes--small' data-module='govuk-checkboxes'>\n <div className='govuk-checkboxes__item'>\n <input\n id='audio'\n name='audio'\n type='checkbox'\n value='audio'\n className='govuk-checkboxes__input'\n defaultChecked={optionAudio}\n onChange={() => setOptionAudio(!optionAudio)}\n />\n <label className='wc-label govuk-label govuk-checkboxes__label' htmlFor='audio'>\n Play a sound when receiving a new message\n </label>\n </div>\n <div className='govuk-checkboxes__item'>\n <input\n id='scroll'\n name='scroll'\n type='checkbox'\n value='scroll'\n className='govuk-checkboxes__input'\n defaultChecked={optionScroll}\n onChange={() => setOptionScroll(!optionScroll)}\n />\n <label className='wc-label govuk-label govuk-checkboxes__label' htmlFor='scroll'>\n Scroll automatically to a new message\n </label>\n </div>\n </div>\n </fieldset>\n\n <div className='govuk-button-group'>\n <a id='settings-save' href='#' className='wc-button govuk-button' data-module='govuk-button' onClick={onSave}>Save</a>\n <a id='settings-cancel' href='#' className='wc-link govuk-link' data-module='govuk-button' role='button' onClick={onCancel}>Cancel</a>\n </div>\n </div>\n </div>\n </>\n )\n}\n","import React from 'react'\nimport { PanelHeader } from '../panel/panel-header.jsx'\n\nexport function Unavailable () {\n return (\n <>\n <PanelHeader />\n\n <div className='wc-body'>\n <h3 id='wc-subtitle' className='govuk-heading-m'>Webchat is currently not available</h3>\n <p className='govuk-body-s'>Try again later, or call Floodline:</p>\n <p className='govuk-body-s'>\n <strong>Floodline helpline</strong>\n <br />Telephone: 0345 988 1188\n <br />Textphone: 0345 602 6340\n <br />Open 24 hours a day, 7 days a week\n <br /><a className='govuk-link' href='https://gov.uk/call-charges'>Find out more about call charges</a>\n </p>\n <p className='govuk-body-s'>We're running webchat as a trial, it will not always be available.</p>\n </div>\n </>\n )\n}\n","import React from 'react'\nimport { createPortal } from 'react-dom'\nimport { useApp } from '../store/useApp'\n\nexport const SkipLink = () => {\n const { thread } = useApp()\n\n if (!thread) {\n return null\n }\n\n const targetContainer = document.getElementById('skip-links')\n\n if (!targetContainer) {\n return null\n }\n\n return (\n <>\n {createPortal(\n <a\n href='#webchat'\n className='govuk-skip-link'\n data-module='govuk-skip-link'\n data-wc-skiplink\n data-wc-open-btn\n >\n Skip to webchat\n </a>,\n targetContainer\n )}\n </>\n )\n}\n","import { useState, useEffect, useCallback } from 'react'\n\nconst ariaHidden = 'aria-hidden'\nconst dataWcInert = 'data-wc-inert'\n\nconst setAriaHidden = isInert => {\n for (const node of document.body.children) {\n if (node.id !== 'wc-panel') {\n // We only want to toggle elements that aren't already inert\n if (isInert && !node.getAttribute(ariaHidden)) {\n node.setAttribute(ariaHidden, 'true')\n node.setAttribute(dataWcInert, '')\n } else if (node.hasAttribute(dataWcInert)) {\n node.removeAttribute(ariaHidden)\n node.removeAttribute(dataWcInert)\n }\n }\n }\n}\n\nexport const getFocusableElements = () => {\n const selectors = [\n '#wc-panel a:not([disabled])',\n '#wc-panel button:not([disabled])',\n '#wc-panel select:not([disabled])',\n '#wc-panel input:not([disabled])',\n '#wc-panel textarea:not([disabled])',\n '#wc-panel *[tabindex=\"0\"]:not([disabled])'\n ]\n\n const elements = document.body.querySelectorAll(selectors.join(','))\n return Array.from(elements).filter(e => !e.closest('[hidden]') && !e.closest('[aria-hidden=\"true\"]'))\n}\n\nconst useFocusedElements = screen => {\n const [panelElements, setPanelElements] = useState([])\n\n const onKeyDown = useCallback(e => {\n const webchatPanelElement = document.querySelector('#wc-panel')\n\n if (e.key === 'Tab') {\n if (webchatPanelElement && !document.activeElement.closest('#wc-panel')) {\n webchatPanelElement.focus()\n }\n\n if (e.shiftKey) {\n if (document.activeElement === panelElements[0]) {\n panelElements[panelElements.length - 1].focus()\n e.preventDefault()\n } else if (document.activeElement === document.querySelector('#wc-panel')) {\n panelElements[panelElements.length - 1]?.focus()\n e.preventDefault()\n }\n } else if (document.activeElement === panelElements[panelElements.length - 1]) {\n panelElements[0].focus()\n e.preventDefault()\n }\n }\n }, [panelElements])\n\n useEffect(() => {\n setPanelElements(getFocusableElements())\n }, [screen])\n\n useEffect(() => {\n setAriaHidden(true)\n\n const panelElement = document.querySelector('#wc-panel')\n panelElement.focus()\n\n document.addEventListener('keydown', onKeyDown)\n\n return () => {\n setAriaHidden()\n document.body.querySelector('.wc-availability__link')?.focus()\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 window.history.back()\n }\n\n const url = window.location.href.split('#')[0]\n window.history.replaceState(null, null, url)\n}\n","export const messageNotification = audioUrl => {\n let buffer\n\n const context = new (window.AudioContext || window.webkitAudioContext)()\n\n if (context.state === 'suspended') {\n const events = ['touchstart', 'touchend', 'mousedown', 'wheel', 'keydown', 'click']\n\n const unlock = _e => {\n events.forEach(event => {\n document.body.removeEventListener(event, unlock)\n })\n\n context.resume()\n }\n\n events.forEach(event => {\n document.body.addEventListener(event, unlock, false)\n })\n }\n\n fetch(audioUrl)\n .then(response => response.arrayBuffer())\n .then(data => context.decodeAudioData(data))\n .then(decodedData => {\n buffer = decodedData\n })\n .catch(console.error)\n\n return () => {\n const source = context.createBufferSource()\n source.buffer = buffer\n source.connect(context.destination)\n source.start()\n }\n}\n","import { DateTime } from 'luxon'\n\nexport const transformMessage = message => {\n return {\n id: message.id,\n text: message.messageContent?.text,\n createdAt: new Date(message.createdAt),\n user: message.authorEndUserIdentity?.fullName?.trim() || null,\n assignee: message.authorUser?.firstName || null,\n direction: message.direction\n }\n}\n\nexport const transformMessages = messages => messages.map(message => transformMessage(message))\n\nexport const formatTranscript = messages => {\n const now = DateTime.local()\n now.setZone('Europe/London')\n\n let string = `Floodline webchat transcript, ${now.toFormat('HH:mm:ss a, dd LLLL yyyy')}\\n\\n`\n\n for (const message of messages) {\n const { text, direction, user, assignee, createdAt } = message\n\n const author = direction === 'inbound' ? user : `${assignee} (Floodline adviser)`\n const date = DateTime.fromJSDate(new Date(createdAt)).setZone('Europe/London').toFormat('HH:mm:ss a, dd LLLL yyyy')\n\n string += `[${date}] ${author}: \\n${text}\\n\\n`\n }\n\n string = string.replace(/<a\\b[^>]*>/i, '').replace(/<\\/a>/i, '')\n\n return encodeURIComponent(string)\n}\n","import React, { createContext, useEffect, useReducer, useMemo } from 'react'\nimport { ChatEvent } from '@nice-devone/nice-cxone-chat-web-sdk'\n\nimport { messageNotification } from '../lib/message-notification.js'\n\nimport { initialState, reducer } from './reducer.js'\nimport { CUSTOMER_ID_STORAGE_KEY, THREAD_ID_STORAGE_KEY, SETTINGS_STORAGE_KEY } from './constants.js'\n\nexport const AppContext = createContext(initialState)\n\nexport const AppProvider = ({ sdk, availability, options, children }) => {\n const [state, dispatch] = useReducer(reducer, initialState)\n\n const playSound = messageNotification(options.audioUrl)\n\n /**\n * SDK event handlers\n */\n const onLiveChatRecovered = e => {\n dispatch({ type: 'SET_AGENT', payload: e.detail.data.inboxAssignee })\n dispatch({ type: 'SET_AGENT_STATUS', payload: e.detail.data.contact.status })\n dispatch({ type: 'SET_UNSEEN_COUNT', payload: e.detail.data.contact.customerStatistics.unseenMessagesCount })\n }\n\n const onAssignedAgentChanged = e => {\n dispatch({ type: 'SET_AGENT', payload: e.detail.data.inboxAssignee })\n dispatch({ type: 'SET_AGENT_STATUS', payload: e.detail.data.case.status })\n }\n\n const onAgentTypingStarted = () => {\n dispatch({ type: 'SET_AGENT_TYPING', payload: true })\n }\n\n const onAgentTypingEnded = () => {\n dispatch({ type: 'SET_AGENT_TYPING', payload: false })\n }\n\n const onMessageCreated = e => {\n dispatch({ type: 'SET_MESSAGE', payload: e.detail.data.message })\n dispatch({ type: 'SET_AGENT_STATUS', payload: e.detail.data.case.status })\n dispatch({ type: 'SET_UNSEEN_COUNT', payload: e.detail.data.case.customerStatistics.unseenMessagesCount })\n\n const isAudioOn = JSON.parse(window.localStorage.getItem(SETTINGS_STORAGE_KEY)).audio\n\n if (isAudioOn && e.detail.data.message.direction === 'outbound') {\n playSound()\n }\n }\n\n const onContactStatusChanged = e => {\n dispatch({ type: 'SET_AGENT_STATUS', payload: e.detail.data.case.status })\n }\n\n const onMatchMedia = e => {\n dispatch({ type: 'TOGGLE_IS_MOBILE', payload: e.matches })\n }\n\n const onKeydown = () => {\n dispatch({ type: 'TOGGLE_IS_KEYBOARD', payload: true })\n }\n\n const onPointerdown = () => {\n dispatch({ type: 'TOGGLE_IS_KEYBOARD', payload: false })\n }\n\n useEffect(() => {\n sdk.onChatEvent(ChatEvent.LIVECHAT_RECOVERED, onLiveChatRecovered)\n sdk.onChatEvent(ChatEvent.MESSAGE_CREATED, onMessageCreated)\n sdk.onChatEvent(ChatEvent.AGENT_TYPING_STARTED, onAgentTypingStarted)\n sdk.onChatEvent(ChatEvent.AGENT_TYPING_ENDED, onAgentTypingEnded)\n sdk.onChatEvent(ChatEvent.ASSIGNED_AGENT_CHANGED, onAssignedAgentChanged)\n sdk.onChatEvent(ChatEvent.CONTACT_STATUS_CHANGED, onContactStatusChanged)\n // We need to know if it is a mobile and if it is a keyboard interaction\n window.matchMedia('(max-width: 640px)').addEventListener('change', onMatchMedia)\n window.addEventListener('keydown', onKeydown)\n window.addEventListener('pointerdown', onPointerdown)\n // Tidying up\n return () => {\n window.removeEventListener('change', onMatchMedia)\n window.removeEventListener('keydown', onKeydown)\n window.removeEventListener('pointerdown', onPointerdown)\n }\n }, [sdk])\n\n /**\n * Initialize customerId, threadId and whether the webchat should be open\n */\n useEffect(() => {\n dispatch({ type: 'SET_AVAILABILITY', payload: availability })\n\n setCustomerId(window.localStorage.getItem(CUSTOMER_ID_STORAGE_KEY))\n setThreadId(window.localStorage.getItem(THREAD_ID_STORAGE_KEY))\n setSettings(JSON.parse(window.localStorage.getItem(SETTINGS_STORAGE_KEY)) || state.settings)\n }, [])\n\n /**\n * Set browser history on start chat click\n */\n useEffect(() => {\n if (window.location.hash === '#webchat') {\n setChatVisibility(true)\n }\n\n const onBrowserNavigation = window.addEventListener('popstate', () => {\n if (window.location.hash === '#webchat') {\n setChatVisibility(true)\n } else {\n setChatVisibility(false)\n }\n })\n\n return () => {\n window.removeEventListener('popstate', onBrowserNavigation)\n }\n }, [])\n\n /**\n * State update functions\n */\n const setChatVisibility = payload => {\n dispatch({ type: 'SET_CHAT_VISIBILITY', payload })\n }\n\n const setCustomerId = customerId => {\n dispatch({ type: 'SET_CUSTOMER_ID', payload: customerId })\n }\n\n const setThreadId = threadId => {\n dispatch({ type: 'SET_THREAD_ID', payload: threadId })\n }\n\n const setThread = thread => {\n dispatch({ type: 'SET_THREAD', payload: thread })\n }\n\n const setMessages = messages => {\n dispatch({ type: 'SET_MESSAGES', payload: messages })\n }\n\n const setSettings = data => {\n dispatch({ type: 'SET_SETTINGS', payload: data })\n }\n\n const setUnseenCount = unseenCount => {\n dispatch({ type: 'SET_UNSEEN_COUNT', payload: unseenCount })\n }\n\n /**\n * Application-wide state and state functions\n */\n const store = useMemo(() => ({\n ...state,\n sdk,\n setSettings,\n setCustomerId,\n setThreadId,\n setThread,\n setMessages,\n setUnseenCount,\n setChatVisibility,\n onLiveChatRecovered,\n onAssignedAgentChanged,\n onAgentTypingStarted,\n onAgentTypingEnded,\n onMessageCreated,\n onContactStatusChanged\n }))\n\n return (\n <AppContext.Provider value={store}>\n {children}\n </AppContext.Provider>\n )\n}\n","import { transformMessages, transformMessage } from '../lib/transform-messages'\nimport { CUSTOMER_ID_STORAGE_KEY, THREAD_ID_STORAGE_KEY, SETTINGS_STORAGE_KEY } from './constants'\n\nconst setSettings = (state, payload) => {\n if (payload) {\n window.localStorage.setItem(SETTINGS_STORAGE_KEY, JSON.stringify(payload))\n } else {\n window.localStorage.removeItem(SETTINGS_STORAGE_KEY)\n }\n\n return {\n ...state,\n settings: payload\n }\n}\n\nconst setCustomerId = (state, payload) => {\n if (payload) {\n window.localStorage.setItem(CUSTOMER_ID_STORAGE_KEY, payload)\n } else {\n window.localStorage.removeItem(CUSTOMER_ID_STORAGE_KEY)\n }\n\n return {\n ...state,\n customerId: payload\n }\n}\n\nconst setThreadId = (state, payload) => {\n if (payload) {\n window.localStorage.setItem(THREAD_ID_STORAGE_KEY, payload)\n } else {\n window.localStorage.removeItem(THREAD_ID_STORAGE_KEY)\n }\n\n return {\n ...state,\n threadId: payload\n }\n}\n\nconst setChatVisibility = (state, payload) => {\n return {\n ...state,\n isChatOpen: payload\n }\n}\n\nconst setAvailability = (state, payload) => {\n return {\n ...state,\n availability: payload\n }\n}\n\nconst setThread = (state, payload) => {\n return {\n ...state,\n thread: payload\n }\n}\n\nconst setMessage = (state, payload) => {\n return {\n ...state,\n messages: [...state.messages, transformMessage(payload)]\n }\n}\n\nconst setMessages = (state, payload) => {\n return {\n ...state,\n messages: transformMessages(payload).reverse()\n }\n}\n\nconst setAgent = (state, payload) => {\n return {\n ...state,\n agent: payload\n }\n}\n\nconst setAgentIsTyping = (state, payload) => {\n return {\n ...state,\n isAgentTyping: payload\n }\n}\n\nconst setAgentStatus = (state, payload) => {\n return {\n ...state,\n agentStatus: payload\n }\n}\n\nconst setUnseenCount = (state, payload) => {\n return {\n ...state,\n unseenCount: payload\n }\n}\n\nconst toggleIsMobile = (state, payload) => {\n return {\n ...state,\n isMobile: payload\n }\n}\n\nconst toggleIsKeyboard = (state, payload) => {\n return {\n ...state,\n isKeyboard: payload\n }\n}\n\nexport const actionsMap = {\n SET_CHAT_VISIBILITY: setChatVisibility,\n SET_AVAILABILITY: setAvailability,\n SET_SETTINGS: setSettings,\n SET_CUSTOMER_ID: setCustomerId,\n SET_THREAD_ID: setThreadId,\n SET_THREAD: setThread,\n SET_MESSAGE: setMessage,\n SET_MESSAGES: setMessages,\n SET_AGENT: setAgent,\n SET_AGENT_TYPING: setAgentIsTyping,\n SET_AGENT_STATUS: setAgentStatus,\n SET_UNSEEN_COUNT: setUnseenCount,\n TOGGLE_IS_MOBILE: toggleIsMobile,\n TOGGLE_IS_KEYBOARD: toggleIsKeyboard\n}\n","export const SETTINGS_STORAGE_KEY = 'webchat_settings'\nexport const CUSTOMER_ID_STORAGE_KEY = 'webchat_customer_id'\nexport const THREAD_ID_STORAGE_KEY = 'webchat_thread_id'\n","import { actionsMap } from './actions-map'\n\nexport const initialState = {\n availability: null,\n customerId: null,\n threadId: null,\n thread: null,\n messages: [],\n unseenCount: 0,\n agent: null,\n agentStatus: null,\n isAgentTyping: false,\n isChatOpen: false,\n isMobile: window.matchMedia('(max-width: 640px)').matches,\n isKeyboard: false,\n settings: { audio: true, scroll: true }\n}\n\nexport const reducer = (state, action) => {\n const { type, payload } = action\n\n const fn = actionsMap[type]\n\n if (fn) {\n const actionFunction = fn.bind(this, state, payload)\n return actionFunction()\n }\n\n return state\n}\n","import { useContext } from 'react'\n\nimport { AppContext } from './AppProvider.jsx'\n\nexport const useApp = () => useContext(AppContext)\n","export const useChatSdk = sdk => {\n const connect = async () => sdk.authorize()\n\n const fetchCustomerId = async () => {\n const response = await connect()\n return response?.consumerIdentity.idOnExternalPlatform\n }\n\n const fetchThread = async threadId => {\n await connect()\n return sdk.getThread(threadId)\n }\n\n const fetchMessages = async (thread, threadId) => {\n await connect()\n\n const recovered = await thread.recover(threadId)\n\n const allMessages = []\n let fetchedMessages = recovered.messages\n\n while (fetchedMessages.length) {\n fetchedMessages.map(msg => allMessages.push(msg))\n\n try {\n const response = await thread.loadMoreMessages()\n fetchedMessages = response.data.messages\n } catch (err) {\n fetchedMessages = []\n }\n }\n\n return allMessages\n }\n\n return { connect, fetchCustomerId, fetchThread, fetchMessages }\n}\n","module.exports = require(\"@nice-devone/nice-cxone-chat-web-sdk\");","module.exports = require(\"luxon\");","module.exports = require(\"react\");","module.exports = require(\"react-dom\");","module.exports = require(\"react-dom/client\");","module.exports = require(\"uuid\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import React from 'react'\nimport { createRoot } from 'react-dom/client'\nimport { ChatSdk } from '@nice-devone/nice-cxone-chat-web-sdk'\nimport { Availability } from './components/availability/availability.jsx'\nimport { checkAvailability } from './lib/check-availability'\nimport { AppProvider } from './store/AppProvider.jsx'\nimport { CUSTOMER_ID_STORAGE_KEY } from './store/constants.js'\n\nexport async function init (container, options) {\n const sdk = new ChatSdk({\n brandId: options.brandId,\n channelId: options.channelId,\n customerId: window.localStorage.getItem(CUSTOMER_ID_STORAGE_KEY) || '',\n environment: options.environment\n })\n\n const root = createRoot(container)\n let availability\n try {\n const result = await checkAvailability(options.availabilityEndpoint)\n availability = result.availability\n } catch (e) {\n availability = 'UNAVAILABLE'\n }\n root.render(\n <AppProvider sdk={sdk} availability={availability} options={options}>\n <Availability />\n </AppProvider>\n )\n}\n"],"names":["React","useEffect","useRef","useState","classnames","Panel","SkipLink","useApp","historyPushState","historyReplaceState","Availability","availability","isChatOpen","setChatVisibility","unseenCount","threadId","setUnseenCount","isFixed","setIsFixed","buttonRef","onClick","e","preventDefault","onKeyDown","event","key","onKeyUp","intersectionCallback","entries","entry","isBelowFold","isIntersecting","boundingClientRect","top","observer","window","IntersectionObserver","rootMargin","parentElement","current","observe","unobserve","document","documentElement","classList","toggle","body","TextComponent","createElement","Fragment","className","ref","href","draggable","role","PanelHeader","PanelFooter","Message","useTextareaAutosize","formatTranscript","Chat","onEndChatScreen","onSettingsScreen","thread","messages","agent","agentStatus","isAgentTyping","settings","isKeyboard","userMessage","setUserMessage","focusVisibleWithin","setFocusVisibleWithin","messageRef","scroll","length","chatBody","querySelector","scrollTop","scrollHeight","label","remove","add","onChange","target","value","agentName","nickname","firstName","connectionHeadlineText","sendMessage","sendTextMessage","trim","err","console","log","handleKeyPress","shiftKey","handleSubmit","saveChat","transcript","saveChatLink","setAttribute","tabIndex","map","msg","index","id","message","previousMessage","width","height","x","y","viewBox","stroke","cx","cy","r","fill","noValidate","onSubmit","htmlFor","rows","name","onFocus","onBlur","type","download","ErrorSummary","errors","errs","Object","keys","goToInput","getAttribute","focus","outbound","direction","messageOwnerSameAsPrevious","assignee","text","children","isMobile","onClose","lastMessageSeen","BackButtonComponent","focusable","d","CloseButtonComponent","MinimiseButtonComponent","isMobileAndHasHistory","history","state","isMobileAndNoHistory","RightButtonComponent","useCallback","createPortal","PreChat","RequestChat","Unavailable","EndChat","Settings","Feedback","useChatSdk","useFocusedElements","sdk","setThread","setThreadId","setMessages","fetchThread","fetchMessages","screen","setScreen","onEscapeKey","getElementsByTagName","addEventListener","removeEventListener","recover","fetchedThread","fetchedMessages","handleScreenChange","newScreen","goToPreChatScreen","goToRequestChatScreen","goToChatScreen","goToEndChatScreen","goToFeedbackScreen","goToSettingsScreen","ScreenComponent","onContinue","onPreChatScreen","onChatScreen","onEndChatConfirm","onCancel","Component","setCustomerId","confirmEndChat","endChat","feedbackCancel","rel","uuid","QUESTION_MAX_LENGTH","fetchCustomerId","setErrors","questionLength","setQuestionLength","isButtonDisabled","setButtonDisabled","nameRef","questionRef","isQuestionLengthValid","questionLengthRemaining","questionLengthExceeded","questionHint","onQuestionChange","buttonLabel","onRequestChat","question","v4","customerId","getCustomer","setName","startChat","setCustomField","style","color","disabled","setSettings","optionAudio","setOptionAudio","audio","optionScroll","setOptionScroll","onSave","defaultChecked","targetContainer","getElementById","ariaHidden","dataWcInert","setAriaHidden","isInert","node","hasAttribute","removeAttribute","getFocusableElements","selectors","elements","querySelectorAll","join","Array","from","filter","closest","panelElements","setPanelElements","webchatPanelElement","activeElement","panelElement","textAreaRef","checkAvailability","endpoint","response","fetch","data","json","classes","classname","url","location","split","pushState","back","replaceState","messageNotification","audioUrl","buffer","context","AudioContext","webkitAudioContext","events","unlock","_e","forEach","resume","then","arrayBuffer","decodeAudioData","decodedData","catch","error","source","createBufferSource","connect","destination","start","DateTime","transformMessage","messageContent","createdAt","Date","user","authorEndUserIdentity","fullName","authorUser","transformMessages","now","local","setZone","string","toFormat","author","date","fromJSDate","replace","encodeURIComponent","createContext","useReducer","useMemo","ChatEvent","initialState","reducer","CUSTOMER_ID_STORAGE_KEY","THREAD_ID_STORAGE_KEY","SETTINGS_STORAGE_KEY","AppContext","AppProvider","options","dispatch","playSound","onLiveChatRecovered","payload","detail","inboxAssignee","contact","status","customerStatistics","unseenMessagesCount","onAssignedAgentChanged","case","onAgentTypingStarted","onAgentTypingEnded","onMessageCreated","isAudioOn","JSON","parse","localStorage","getItem","onContactStatusChanged","onMatchMedia","matches","onKeydown","onPointerdown","onChatEvent","LIVECHAT_RECOVERED","MESSAGE_CREATED","AGENT_TYPING_STARTED","AGENT_TYPING_ENDED","ASSIGNED_AGENT_CHANGED","CONTACT_STATUS_CHANGED","matchMedia","hash","onBrowserNavigation","store","Provider","setItem","stringify","removeItem","setAvailability","setMessage","reverse","setAgent","setAgentIsTyping","setAgentStatus","toggleIsMobile","toggleIsKeyboard","actionsMap","SET_CHAT_VISIBILITY","SET_AVAILABILITY","SET_SETTINGS","SET_CUSTOMER_ID","SET_THREAD_ID","SET_THREAD","SET_MESSAGE","SET_MESSAGES","SET_AGENT","SET_AGENT_TYPING","SET_AGENT_STATUS","SET_UNSEEN_COUNT","TOGGLE_IS_MOBILE","TOGGLE_IS_KEYBOARD","action","fn","actionFunction","bind","useContext","authorize","consumerIdentity","idOnExternalPlatform","getThread","recovered","allMessages","push","loadMoreMessages","createRoot","ChatSdk","init","container","brandId","channelId","environment","root","result","availabilityEndpoint","render"],"sourceRoot":""}
1
+ {"version":3,"file":"client.js","mappings":"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","sources":["webpack://@defra/flood-webchat/./src/client/components/availability/availability.jsx","webpack://@defra/flood-webchat/./src/client/components/chat/chat.jsx","webpack://@defra/flood-webchat/./src/client/components/errorSummary/error-summary.jsx","webpack://@defra/flood-webchat/./src/client/components/message/message.jsx","webpack://@defra/flood-webchat/./src/client/components/panel/panel-footer.jsx","webpack://@defra/flood-webchat/./src/client/components/panel/panel-header.jsx","webpack://@defra/flood-webchat/./src/client/components/panel/panel.jsx","webpack://@defra/flood-webchat/./src/client/components/screens/end-chat.jsx","webpack://@defra/flood-webchat/./src/client/components/screens/feedback.jsx","webpack://@defra/flood-webchat/./src/client/components/screens/pre-chat.jsx","webpack://@defra/flood-webchat/./src/client/components/screens/request-chat.jsx","webpack://@defra/flood-webchat/./src/client/components/screens/settings.jsx","webpack://@defra/flood-webchat/./src/client/components/screens/unavailable.jsx","webpack://@defra/flood-webchat/./src/client/components/skip-link.jsx","webpack://@defra/flood-webchat/./src/client/hooks/useFocusedElements.js","webpack://@defra/flood-webchat/./src/client/hooks/useTextareaAutosize.js","webpack://@defra/flood-webchat/./src/client/lib/check-availability.js","webpack://@defra/flood-webchat/./src/client/lib/classnames.js","webpack://@defra/flood-webchat/./src/client/lib/history.js","webpack://@defra/flood-webchat/./src/client/lib/message-notification.js","webpack://@defra/flood-webchat/./src/client/lib/transform-messages.js","webpack://@defra/flood-webchat/./src/client/store/AppProvider.jsx","webpack://@defra/flood-webchat/./src/client/store/actions-map.js","webpack://@defra/flood-webchat/./src/client/store/constants.js","webpack://@defra/flood-webchat/./src/client/store/reducer.js","webpack://@defra/flood-webchat/./src/client/store/useApp.js","webpack://@defra/flood-webchat/./src/client/store/useChatSdk.js","webpack://@defra/flood-webchat/external commonjs \"@nice-devone/nice-cxone-chat-web-sdk\"","webpack://@defra/flood-webchat/external commonjs \"luxon\"","webpack://@defra/flood-webchat/external commonjs \"react\"","webpack://@defra/flood-webchat/external commonjs \"react-dom\"","webpack://@defra/flood-webchat/external commonjs \"react-dom/client\"","webpack://@defra/flood-webchat/external commonjs \"uuid\"","webpack://@defra/flood-webchat/webpack/bootstrap","webpack://@defra/flood-webchat/webpack/runtime/compat get default export","webpack://@defra/flood-webchat/webpack/runtime/define property getters","webpack://@defra/flood-webchat/webpack/runtime/hasOwnProperty shorthand","webpack://@defra/flood-webchat/webpack/runtime/make namespace object","webpack://@defra/flood-webchat/./src/client/index.jsx"],"sourcesContent":["import React, { useEffect, useRef } from 'react'\n\nimport { classnames } from '../../lib/classnames'\nimport { Panel } from '../panel/panel.jsx'\nimport { SkipLink } from '../skip-link.jsx'\n\nimport { useApp } from '../../store/useApp'\nimport { historyPushState, historyReplaceState } from '../../lib/history.js'\n\nexport function Availability () {\n const { availability, isChatOpen, setChatVisibility, unseenCount, threadId, setUnseenCount } = useApp()\n\n const buttonRef = useRef()\n\n const onClick = e => {\n e.preventDefault()\n setUnseenCount(0)\n setChatVisibility(!isChatOpen)\n\n if (!isChatOpen) {\n historyPushState()\n } else {\n historyReplaceState()\n }\n }\n\n const onKeyDown = event => {\n if (event.key === ' ') {\n event.preventDefault()\n }\n }\n\n const onKeyUp = event => {\n if (event.key === ' ') {\n setUnseenCount(0)\n setChatVisibility(!isChatOpen)\n }\n }\n\n useEffect(() => {\n const onScroll = () => {\n if (!threadId) {\n return\n }\n\n if (availability !== 'AVAILABLE') {\n return\n }\n\n const rect = buttonRef.current.parentElement.getBoundingClientRect()\n\n const isBelowFold = rect.top + 35 > (window.innerHeight || document.documentElement.clientHeight)\n const isFixed = !isChatOpen && isBelowFold\n\n document.documentElement.classList.toggle('wc-u-scroll-padding', isFixed)\n document.body.classList.toggle('wc-u-scroll-padding', isFixed)\n buttonRef.current.classList.toggle('wc-availability--fixed', isFixed)\n }\n\n document.addEventListener('scroll', onScroll)\n onScroll()\n\n return () => {\n document.removeEventListener('scroll', onScroll)\n }\n }, [threadId, isChatOpen, availability])\n\n let TextComponent = (<>Show chat</>)\n\n if (!threadId) {\n TextComponent = (<>Start chat</>)\n }\n\n switch (availability) {\n case 'AVAILABLE':\n return (\n <>\n <div\n className={classnames('wc-availability', isChatOpen && 'wc-open')}\n ref={buttonRef}\n >\n <div className='wc-availability__inner'>\n <a\n className='wc-availability__link'\n href='#webchat'\n draggable='false'\n onClick={onClick}\n onKeyUp={onKeyUp}\n onKeyDown={onKeyDown}\n role='button'\n data-module='govuk-button'\n >\n {TextComponent}\n {unseenCount > 0 && !isChatOpen ? <span className='wc-availability__unseen'>{unseenCount}</span> : null}\n </a>\n </div>\n </div>\n {isChatOpen && <Panel />}\n <SkipLink />\n </>\n )\n case 'EXISTING':\n case 'UNAVAILABLE':\n return (\n <p className='govuk-body'>When it is available, a 'start chat' link will appear.</p>\n )\n default:\n return (\n <p className='govuk-body'>Checking availability</p>\n )\n }\n}\n","import React, { useEffect, useRef, useState } from 'react'\n\nimport { PanelHeader } from '../panel/panel-header.jsx'\nimport { PanelFooter } from '../panel/panel-footer.jsx'\nimport { Message } from '../message/message.jsx'\n\nimport { useApp } from '../../store/useApp.js'\nimport { useTextareaAutosize } from '../../hooks/useTextareaAutosize.js'\nimport { formatTranscript } from '../../lib/transform-messages.js'\n\nexport function Chat ({ onEndChatScreen, onSettingsScreen }) {\n const { availability, thread, messages, agent, agentStatus, isAgentTyping, settings, isKeyboard } = useApp()\n\n const [userMessage, setUserMessage] = useState('')\n const [focusVisibleWithin, setFocusVisibleWithin] = useState(false)\n\n const messageRef = useRef()\n\n useTextareaAutosize(messageRef.current, userMessage)\n\n useEffect(() => {\n if (settings.scroll && messages.length !== 0) {\n const chatBody = document.querySelector('.wc-body')\n chatBody.scrollTop = chatBody.scrollHeight\n }\n }, [messages, isAgentTyping])\n\n useEffect(() => {\n const label = document.querySelector('.wc-form__label')\n\n if (userMessage.length === 0) {\n label.classList.remove('govuk-visually-hidden')\n } else {\n label.classList.add('govuk-visually-hidden')\n }\n }, [userMessage])\n\n const onChange = e => {\n setUserMessage(e.target?.value)\n }\n\n const agentName = agent?.nickname || agent?.firstName\n\n let connectionHeadlineText = 'Connecting to Floodline'\n\n if (agentStatus === 'closed') {\n connectionHeadlineText = agentName ? `${agentName} ended the session` : 'Session ended by advisor'\n } else if (agentStatus) {\n if (agentName) {\n connectionHeadlineText = `You are speaking with ${agentName}`\n } else {\n connectionHeadlineText = 'No advisers currently available'\n }\n }\n\n if (availability === 'UNAVAILABLE') {\n connectionHeadlineText = 'Webchat is not currently available'\n }\n\n const sendMessage = () => {\n if (messageRef.current.value.length === 0) {\n return\n }\n\n try {\n thread.sendTextMessage(messageRef.current.value.trim())\n } catch (err) {\n console.log('[Chat Error] sendMessage', err)\n }\n\n setUserMessage('')\n }\n const handleKeyPress = e => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n sendMessage()\n }\n }\n\n const handleSubmit = e => {\n e.preventDefault()\n sendMessage()\n }\n\n const saveChat = () => {\n const transcript = formatTranscript(messages)\n\n const saveChatLink = document.querySelector('#transcript-download')\n\n saveChatLink.setAttribute('href', `data:text/plain;charset=utf-8,${transcript}`)\n }\n\n return (\n <>\n <PanelHeader />\n\n <div className='wc-status'>\n <p className='wc-status__availability'>{connectionHeadlineText}</p>\n <a className='wc-status__link' href='#' data-module='govuk-button' onClick={onEndChatScreen}>End chat</a>\n </div>\n\n <div className='wc-body' tabIndex='0'>\n <ul className='wc-chat'>\n {messages.length\n ? messages.map((msg, index) => <Message key={msg.id} message={msg} previousMessage={messages[index - 1]} />)\n : null}\n {isAgentTyping\n ? (\n <li className='wc-chat__message outbound'>\n <div className='wc-chat__from'>{agentName} is typing</div>\n <div className='wc-chat__text outbound'>\n <svg width='28' height='16' x='0px' y='0px' viewBox='0 0 28 16'>\n <circle stroke='none' cx='3' cy='8' r='3' fill='currentColor' />\n <circle stroke='none' cx='14' cy='8' r='3' fill='currentColor' />\n <circle stroke='none' cx='25' cy='8' r='3' fill='currentColor' />\n </svg>\n </div>\n </li>\n )\n : null}\n </ul>\n </div>\n\n <PanelFooter>\n <form className={`wc-form${focusVisibleWithin ? ' wc-focus-within' : ''}`} noValidate onSubmit={handleSubmit}>\n <label className='govuk-label wc-form__label' htmlFor='wc-form-textarea'>\n Your message<span className='govuk-visually-hidden'> (enter key submits)</span>\n </label>\n\n <textarea\n ref={messageRef}\n rows='1'\n aria-required='true'\n className='wc-form__textarea'\n id='wc-form-textarea'\n name='message'\n onChange={onChange}\n onKeyDown={handleKeyPress}\n onFocus={() => { setFocusVisibleWithin(isKeyboard) }}\n onBlur={() => { setFocusVisibleWithin(false) }}\n value={userMessage}\n />\n\n <input\n type='submit'\n className='wc-form__button govuk-button'\n value='Send'\n data-prevent-double-click='true'\n />\n </form>\n\n <div className='wc-footer__settings'>\n <a\n href='#'\n id='wc-settings'\n className='wc-footer__settings-link'\n data-module='govuk-button'\n onClick={onSettingsScreen}\n >\n Settings\n </a>\n <a\n href='#'\n id='transcript-download'\n className='wc-footer__settings-link'\n data-module='govuk-button'\n download='floodline-webchat-transcript.txt'\n onClick={saveChat}\n >\n Save chat\n </a>\n </div>\n </PanelFooter>\n </>\n )\n}\n","import React from 'react'\n\nexport const ErrorSummary = ({ errors }) => {\n const errs = Object.keys(errors)\n\n const goToInput = e => {\n e.preventDefault()\n const key = e.target.getAttribute('data-key')\n document.querySelector(`#wc-${key}`).focus()\n }\n\n if (errs.length === 0) {\n return null\n }\n\n return (\n <div className='govuk-error-summary govuk-!-static-margin-bottom-7' data-module='govuk-error-summary' tabIndex='-1'>\n <div role='alert'>\n <h2 id='wc-error' className='wc-error-summary__title govuk-error-summary__title'>\n There is a problem\n </h2>\n <div className='govuk-error-summary__body'>\n <ul className='govuk-list govuk-error-summary__list wc-error-summary__list'>\n {errs.map(key => (\n <li key={key}>\n <a href='#' data-key={key} onClick={goToInput}>{errors[key]}</a>\n </li>\n ))}\n </ul>\n </div>\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport { classnames } from '../../lib/classnames'\n\nexport function Message ({ message, previousMessage }) {\n const outbound = message.direction === 'outbound'\n\n const messageOwnerSameAsPrevious = message?.direction === previousMessage?.direction\n\n return (\n <li className={classnames('wc-chat__message', outbound ? 'outbound' : 'inbound')}>\n <div className='wc-chat__from'>\n {messageOwnerSameAsPrevious ? null : <span>{outbound ? message.assignee : 'You'}</span>}\n <span className='govuk-visually-hidden'>:</span>\n </div>\n <div className={classnames('wc-chat__text', outbound ? 'outbound' : 'inbound')}>\n {message.text}\n </div>\n </li>\n )\n}\n","import React from 'react'\n\nexport function PanelFooter ({ children }) {\n return (\n <div className='wc-footer'>\n {children}\n </div>\n )\n}\n","import React from 'react'\nimport { useApp } from '../../store/useApp.js'\nimport { historyReplaceState } from '../../lib/history.js'\n\nexport function PanelHeader () {\n const { thread, threadId, setChatVisibility, setUnseenCount, isMobile } = useApp()\n\n const onClose = e => {\n e.preventDefault()\n setChatVisibility(false)\n historyReplaceState()\n\n if (threadId) {\n thread?.lastMessageSeen()\n setUnseenCount(0)\n }\n }\n\n const BackButtonComponent = (\n <button className='wc-header__back' aria-label='Close the webchat' onClick={onClose}>\n <svg aria-hidden='true' focusable='false' width='20' height='20' viewBox='0 0 20 20'>\n <path d='M4.828,11L12.314,18.485L10.899,19.899L1,10L10.899,0.101L12.314,1.515L4.828,9L19,9L19,11L4.828,11Z' fill='currentColor' />\n </svg>\n </button>\n )\n\n const CloseButtonComponent = (\n <button className='wc-header__close' aria-label='Close the webchat' onClick={onClose}>\n <svg aria-hidden='true' focusable='false' width='20' height='20' viewBox='0 0 20 20'>\n <path d='M10,8.6L15.6,3L17,4.4L11.4,10L17,15.6L15.6,17L10,11.4L4.4,17L3,15.6L8.6,10L3,4.4L4.4,3L10,8.6Z' fill='currentColor' />\n </svg>\n </button>\n )\n\n const MinimiseButtonComponent = (\n <button className='wc-header__hide' aria-label='Minimise the webchat' onClick={onClose}>\n <svg aria-hidden='true' focusable='false' width='20' height='20' viewBox='0 0 20 20'>\n <path d='M10 14.4l-7-7L4.4 6l5.6 5.6L15.6 6 17 7.4l-7 7z' fill='currentColor' />\n </svg>\n </button>\n )\n\n const isMobileAndHasHistory = isMobile && window.history.state\n const isMobileAndNoHistory = isMobile && !window.history.state\n\n let RightButtonComponent = CloseButtonComponent\n\n if (thread) {\n RightButtonComponent = MinimiseButtonComponent\n\n if (isMobileAndNoHistory) {\n RightButtonComponent = MinimiseButtonComponent\n }\n }\n\n if (!thread && isMobileAndNoHistory) {\n RightButtonComponent = CloseButtonComponent\n }\n\n if (isMobileAndHasHistory) {\n RightButtonComponent = null\n }\n\n return (\n <div className='wc-header'>\n {isMobileAndHasHistory ? BackButtonComponent : null}\n\n <h2 id='wc-header-title' className='wc-header__title'>\n Floodline Webchat\n </h2>\n\n {RightButtonComponent}\n </div>\n )\n}\n","import React, { useEffect, useState, useCallback } from 'react'\nimport { createPortal } from 'react-dom'\nimport { classnames } from '../../lib/classnames.js'\n\nimport { PreChat } from '../screens/pre-chat.jsx'\nimport { RequestChat } from '../screens/request-chat.jsx'\nimport { Chat } from '../chat/chat.jsx'\nimport { Unavailable } from '../screens/unavailable.jsx'\nimport { EndChat } from '../screens/end-chat.jsx'\nimport { Settings } from '../screens/settings.jsx'\nimport { Feedback } from '../screens/feedback.jsx'\n\nimport { useApp } from '../../store/useApp.js'\nimport { useChatSdk } from '../../store/useChatSdk.js'\nimport { useFocusedElements } from '../../hooks/useFocusedElements.js'\nimport { historyReplaceState } from '../../lib/history.js'\n\nexport function Panel () {\n const { sdk, availability, thread, threadId, setThread, setThreadId, setChatVisibility, setMessages, setUnseenCount, isMobile, isKeyboard } = useApp()\n const { fetchThread, fetchMessages } = useChatSdk(sdk)\n\n const [screen, setScreen] = useState(threadId ? 2 : 0)\n\n useFocusedElements(screen)\n\n const onEscapeKey = useCallback(e => {\n if (e.key === 'Escape' || e.key === 'Esc') {\n if (threadId) {\n thread?.lastMessageSeen()\n setUnseenCount(0)\n }\n setChatVisibility(false)\n historyReplaceState()\n }\n }, [thread, threadId, setUnseenCount, setChatVisibility])\n\n /**\n * We need ammend classes on the body element to handle mobile behaviour\n */\n useEffect(() => {\n document.body.classList.remove('wc-u-hidden')\n document.getElementsByTagName('html')[0].classList.add('wc-u-html')\n document.body.classList.add('wc-u-body')\n return () => {\n document.getElementsByTagName('html')[0].classList.remove('wc-u-html')\n document.body.classList.remove('wc-u-body')\n }\n }, [isMobile])\n\n /**\n * Initializes the eventListener for pressing the escape key\n */\n useEffect(() => {\n document.addEventListener('keydown', onEscapeKey)\n\n return () => {\n document.removeEventListener('keydown', onEscapeKey)\n }\n }, [onEscapeKey, setChatVisibility])\n\n /**\n * Recovers the thread if there is a threadId but no thread loaded in to state\n */\n useEffect(() => {\n const recover = async () => {\n try {\n const fetchedThread = await fetchThread(threadId)\n setThread(fetchedThread)\n\n const fetchedMessages = await fetchMessages(fetchedThread, threadId)\n setMessages(fetchedMessages)\n } catch (err) {\n console.log('[Chat Error] fetchThread', err)\n\n setThreadId()\n setThread()\n setScreen(0)\n }\n }\n\n if (threadId) {\n if (thread) {\n thread.lastMessageSeen()\n setUnseenCount(0)\n setScreen(2)\n } else {\n recover()\n }\n }\n }, [thread, threadId])\n\n const handleScreenChange = newScreen => e => {\n e.preventDefault()\n setScreen(newScreen)\n }\n\n const goToPreChatScreen = handleScreenChange(0)\n const goToRequestChatScreen = handleScreenChange(1)\n const goToChatScreen = handleScreenChange(2)\n const goToEndChatScreen = handleScreenChange(3)\n const goToFeedbackScreen = handleScreenChange(4)\n const goToSettingsScreen = handleScreenChange(5)\n\n let ScreenComponent\n\n switch (screen) {\n case 0:\n ScreenComponent = <PreChat onContinue={goToRequestChatScreen} />\n break\n case 1:\n ScreenComponent = <RequestChat onPreChatScreen={goToPreChatScreen} />\n break\n case 2:\n ScreenComponent = <Chat onSettingsScreen={goToSettingsScreen} onEndChatScreen={goToEndChatScreen} />\n break\n case 3:\n ScreenComponent = <EndChat onChatScreen={goToChatScreen} onEndChatConfirm={goToFeedbackScreen} />\n break\n case 4:\n ScreenComponent = <Feedback onCancel={() => setChatVisibility(false)} />\n break\n case 5:\n ScreenComponent = <Settings onCancel={goToChatScreen} />\n break\n default:\n ScreenComponent = <PreChat onContinue={goToRequestChatScreen} />\n }\n\n if (availability === 'UNAVAILABLE') {\n ScreenComponent = <Unavailable />\n }\n\n const Component = (\n <div id='wc-panel' role='dialog' className={classnames('wc-panel', isKeyboard && 'wc-focus-visible')} tabIndex='-1' aria-modal='true' aria-labelledby='wc-header-title'>\n <div className='wc-panel__inner'>\n {ScreenComponent}\n </div>\n </div>\n )\n\n return (\n <>\n {createPortal(Component, document.body)}\n </>\n )\n}\n","import React from 'react'\nimport { PanelHeader } from '../panel/panel-header.jsx'\nimport { useApp } from '../../store/useApp.js'\n\nexport function EndChat ({ onChatScreen, onEndChatConfirm }) {\n const { setCustomerId, setThreadId, setMessages, agentStatus, thread, setUnseenCount } = useApp()\n\n const confirmEndChat = async e => {\n e.preventDefault()\n\n setThreadId()\n setMessages([])\n setCustomerId()\n thread.lastMessageSeen()\n setUnseenCount(0)\n\n // End chat if still open\n if (agentStatus !== 'closed') {\n thread.endChat()\n }\n\n onEndChatConfirm(e)\n }\n\n return (\n <>\n <PanelHeader />\n <div className='wc-body'>\n <div className='wc-content'>\n <h3 className='wc-heading' aria-live='polite'>Are you sure you want to end the chat?</h3>\n <div className='govuk-button-group'>\n <a href='#endChat' role='button' className='wc-button govuk-button' data-module='govuk-button' id='confirmEndChat' onClick={confirmEndChat}>Yes, end chat</a>\n <a href='#resumeChat' role='button' className='wc-link govuk-link' onClick={onChatScreen}>No, resume chat</a>\n </div>\n </div>\n </div>\n </>\n )\n}\n","import React from 'react'\nimport { PanelHeader } from '../panel/panel-header.jsx'\n\nexport function Feedback ({ onCancel }) {\n const feedbackCancel = async e => {\n onCancel(e)\n }\n\n return (\n <>\n <PanelHeader />\n\n <div className='wc-body'>\n <div className='wc-content'>\n <h3 id='wc-subtitle' className='wc-heading'>Give Feedback on Floodline webchat</h3>\n <p>Please note we’re unable to respond to feedback.</p>\n <p><a className='govuk-link' href='#' target='_blank' rel='noreferrer'>Feedback Link</a></p>\n <p><a id='feedback-cancel' className='wc-link govuk-link' href='#' data-module='govuk-button' role='button' onClick={feedbackCancel}>Close</a></p>\n </div>\n </div>\n </>\n )\n}\n","import React from 'react'\nimport { PanelHeader } from '../panel/panel-header.jsx'\n\nexport function PreChat ({ onContinue }) {\n return (\n <>\n <PanelHeader />\n\n <div className='wc-body'>\n <div className='wc-content'>\n <h3 className='wc-heading' aria-live='polite'>What you can use webchat for</h3>\n <p>Webchat lets you talk directly to a Floodline adviser.</p>\n\n <p>You can use webchat to get:</p>\n <ul className='wc-list'>\n <li>current flood warnings and alerts in your area</li>\n <li>information on the flood warning service</li>\n <li>advice on what to do before, during and after a flood</li>\n </ul>\n <p>\n There are other ways to&nbsp;\n <a className='govuk-link' href='https://www.gov.uk/sign-up-for-flood-warnings' target='_blank' rel='noreferrer'>\n sign up for flood warnings\n </a>\n &nbsp;and&nbsp;\n <a className='govuk-link' href='https://www.fws.environment-agency.gov.uk/app/olr/login' target='_blank' rel='noreferrer'>\n manage your flood warnings account\n </a>.\n </p>\n <p>\n Do not use webchat to&nbsp;\n <a\n className='govuk-link'\n href='https://www.gov.uk/report-flood-cause'\n target='_blank'\n rel='noreferrer'\n >\n report a flood\n </a>.\n </p>\n\n <button className='govuk-button wc-button govuk-!-margin-top-1' data-module='govuk-button' onClick={onContinue}>Continue</button>\n\n <h3 className='wc-heading'>Other flood information</h3>\n\n <p>Call Floodline for all other flood and flood warning information.</p>\n <p>\n <strong>Floodline helpline</strong>\n <br />\n Telephone: 0345 988 1188\n <br />\n Textphone: 0345 602 6340\n <br />\n Open 24 hours a day, 7 days a week\n <br />\n <a className='govuk-link' href='https://gov.uk/call-charges' target='_blank' rel='noreferrer'>Find out more about call charges</a>\n </p>\n </div>\n </div>\n </>\n )\n}\n","import React, { useRef, useState, useEffect } from 'react'\nimport * as uuid from 'uuid'\n\nimport { classnames } from '../../lib/classnames.js'\nimport { PanelHeader } from '../panel/panel-header.jsx'\nimport { useApp } from '../../store/useApp.js'\nimport { useChatSdk } from '../../store/useChatSdk.js'\nimport { ErrorSummary } from '../errorSummary/error-summary.jsx'\n\nconst QUESTION_MAX_LENGTH = 500\n\nexport function RequestChat ({ onPreChatScreen }) {\n const { sdk, setCustomerId, setThreadId, setThread } = useApp()\n const { fetchCustomerId, fetchThread } = useChatSdk(sdk)\n const [errors, setErrors] = useState({})\n const [questionLength, setQuestionLength] = useState(0)\n const [isButtonDisabled, setButtonDisabled] = useState(false)\n\n const nameRef = useRef()\n const questionRef = useRef()\n\n const isQuestionLengthValid = QUESTION_MAX_LENGTH >= questionLength\n const questionLengthRemaining = QUESTION_MAX_LENGTH - questionLength\n const questionLengthExceeded = questionLength - QUESTION_MAX_LENGTH\n\n let questionHint = `You have ${questionLengthRemaining} characters remaining`\n\n if (!isQuestionLengthValid) {\n questionHint = `You have ${questionLengthExceeded} characters too many`\n }\n\n useEffect(() => {\n if (Object.keys(errors).length) {\n document.querySelector('.govuk-error-summary')?.focus()\n }\n }, [errors])\n\n const onQuestionChange = e => {\n setQuestionLength(e.target.value.length)\n }\n\n const buttonLabel = isButtonDisabled ? 'Requesting...' : 'Request Chat'\n\n const onRequestChat = async e => {\n e.preventDefault()\n\n const errs = {}\n\n if (nameRef.current.value.length === 0) {\n errs.name = 'Enter your name'\n }\n\n if (questionRef.current.value.length === 0) {\n errs.question = 'Enter your question'\n }\n\n if (questionRef.current.value.length > QUESTION_MAX_LENGTH) {\n errs.question = 'Your question must be 500 characters or less'\n }\n\n if (Object.keys(errs).length === 0) {\n try {\n setButtonDisabled(true)\n const threadId = uuid.v4()\n const customerId = await fetchCustomerId()\n const thread = await fetchThread(threadId)\n\n sdk.getCustomer().setName(nameRef.current.value)\n\n await thread.startChat(questionRef.current.value || 'Begin conversation')\n\n setCustomerId(customerId)\n setThreadId(threadId)\n setThread(thread)\n thread.setCustomField('threadid', threadId)\n } catch (err) {\n console.log('[Request Chat Error]', err)\n }\n }\n\n setErrors(errs)\n }\n\n return (\n <>\n <PanelHeader />\n\n <div className='wc-body'>\n <div className='wc-content'>\n <a href='#' className='wc-back-link govuk-back-link' onClick={onPreChatScreen}>\n What you can use webchat for\n </a>\n\n <ErrorSummary errors={errors} />\n\n <h3 className='wc-heading' aria-live='polite'>\n Your name and question\n </h3>\n\n <form>\n <div className={classnames('wc-form-group', 'govuk-form-group', errors.name && 'govuk-form-group--error')}>\n <label className='wc-label govuk-label' htmlFor='wc-name'>\n Your name\n </label>\n {errors.name && (\n <p className='govuk-error-message'>\n <span className='govuk-visually-hidden'>Error:</span> {errors.name}\n </p>\n )}\n <input\n ref={nameRef}\n className={classnames('wc-input', 'govuk-input', errors.name && 'govuk-input--error')}\n id='wc-name'\n name='name'\n type='text'\n data-testid='request-chat-user-name'\n />\n </div>\n\n <div className='wc-form-group govuk-character-count' data-module='govuk-character-count' data-maxlength='500'>\n <div className={classnames('govuk-form-group', errors.question && 'govuk-form-group--error')}>\n <label className='wc-label govuk-label' htmlFor='wc-question'>\n Your question\n </label>\n {errors.question && (\n <p className='govuk-error-message'>\n <span className='govuk-visually-hidden'>Error:</span>\n {errors.question}\n </p>\n )}\n <textarea\n ref={questionRef}\n id='wc-question'\n name='question'\n rows='5'\n aria-describedby='wc-question-info'\n onChange={onQuestionChange}\n className={classnames('wc-textarea', 'govuk-textarea', 'govuk-js-character-count', !isQuestionLengthValid || errors.question ? 'govuk-textarea--error' : '')}\n data-testid='request-chat-user-question'\n />\n <div\n id='wc-question-info'\n className='wc-hint govuk-hint govuk-char-count__msg'\n style={{ color: `${!isQuestionLengthValid ? '#d4351c' : ''}` }}\n aria-hidden='true'\n >\n {questionHint}\n </div>\n <div className='govuk-character-count__sr-status govuk-visually-hidden' aria-live='polite'>\n {questionHint}\n </div>\n </div>\n </div>\n\n <div className='wc-inset-text govuk-inset-text'>\n By selecting 'Request chat' you agree to the terms of our&nbsp;\n <a href='https://check-for-flooding.service.gov.uk/privacy-notice' target='_blank' rel='noreferrer' className='govuk-link'>privacy notice</a>.\n </div>\n\n <button\n className='wc-button govuk-button govuk-!-margin-top-1'\n data-module='govuk-button'\n onClick={onRequestChat}\n disabled={isButtonDisabled}\n >\n {buttonLabel}\n </button>\n </form>\n </div>\n </div>\n </>\n )\n}\n","import React, { useState } from 'react'\nimport { PanelHeader } from '../panel/panel-header.jsx'\n\nimport { useApp } from '../../store/useApp.js'\n\nexport function Settings ({ onCancel }) {\n const { settings, setSettings } = useApp()\n\n const [optionAudio, setOptionAudio] = useState(settings.audio)\n const [optionScroll, setOptionScroll] = useState(settings.scroll)\n\n const onSave = e => {\n e.preventDefault()\n\n setSettings({ audio: optionAudio, scroll: optionScroll })\n onCancel(e)\n }\n\n return (\n <>\n <PanelHeader />\n\n <div className='wc-body'>\n <div className='wc-content'>\n <fieldset className='govuk-fieldset govuk-!-margin-bottom-4'>\n <legend className='govuk-fieldset__legend govuk-fieldset__legend'>\n <h3 id='wc-subtitle' className='wc-heading'>Change settings</h3>\n </legend>\n <div className='govuk-checkboxes govuk-checkboxes--small' data-module='govuk-checkboxes'>\n <div className='govuk-checkboxes__item'>\n <input\n id='audio'\n name='audio'\n type='checkbox'\n value='audio'\n className='govuk-checkboxes__input'\n defaultChecked={optionAudio}\n onChange={() => setOptionAudio(!optionAudio)}\n />\n <label className='wc-label govuk-label govuk-checkboxes__label' htmlFor='audio'>\n Play a sound when receiving a new message\n </label>\n </div>\n <div className='govuk-checkboxes__item'>\n <input\n id='scroll'\n name='scroll'\n type='checkbox'\n value='scroll'\n className='govuk-checkboxes__input'\n defaultChecked={optionScroll}\n onChange={() => setOptionScroll(!optionScroll)}\n />\n <label className='wc-label govuk-label govuk-checkboxes__label' htmlFor='scroll'>\n Scroll automatically to a new message\n </label>\n </div>\n </div>\n </fieldset>\n\n <div className='govuk-button-group'>\n <a id='settings-save' href='#' className='wc-button govuk-button' data-module='govuk-button' onClick={onSave}>Save</a>\n <a id='settings-cancel' href='#' className='wc-link govuk-link' data-module='govuk-button' role='button' onClick={onCancel}>Cancel</a>\n </div>\n </div>\n </div>\n </>\n )\n}\n","import React from 'react'\nimport { PanelHeader } from '../panel/panel-header.jsx'\n\nexport function Unavailable () {\n return (\n <>\n <PanelHeader />\n\n <div className='wc-body'>\n <h3 id='wc-subtitle' className='govuk-heading-m'>Webchat is currently not available</h3>\n <p className='govuk-body-s'>Try again later, or call Floodline:</p>\n <p className='govuk-body-s'>\n <strong>Floodline helpline</strong>\n <br />Telephone: 0345 988 1188\n <br />Textphone: 0345 602 6340\n <br />Open 24 hours a day, 7 days a week\n <br /><a className='govuk-link' href='https://gov.uk/call-charges'>Find out more about call charges</a>\n </p>\n <p className='govuk-body-s'>We're running webchat as a trial, it will not always be available.</p>\n </div>\n </>\n )\n}\n","import React from 'react'\nimport { createPortal } from 'react-dom'\nimport { useApp } from '../store/useApp'\n\nexport const SkipLink = () => {\n const { thread } = useApp()\n\n if (!thread) {\n return null\n }\n\n const targetContainer = document.getElementById('skip-links')\n\n if (!targetContainer) {\n return null\n }\n\n return (\n <>\n {createPortal(\n <a\n href='#webchat'\n className='govuk-skip-link'\n data-module='govuk-skip-link'\n data-wc-skiplink\n data-wc-open-btn\n >\n Skip to webchat\n </a>,\n targetContainer\n )}\n </>\n )\n}\n","import { useState, useEffect, useCallback } from 'react'\n\nconst ariaHidden = 'aria-hidden'\nconst dataWcInert = 'data-wc-inert'\n\nconst setAriaHidden = isInert => {\n for (const node of document.body.children) {\n if (node.id !== 'wc-panel') {\n // We only want to toggle elements that aren't already inert\n if (isInert && !node.getAttribute(ariaHidden)) {\n node.setAttribute(ariaHidden, 'true')\n node.setAttribute(dataWcInert, '')\n } else if (node.hasAttribute(dataWcInert)) {\n node.removeAttribute(ariaHidden)\n node.removeAttribute(dataWcInert)\n }\n }\n }\n}\n\nexport const getFocusableElements = () => {\n const selectors = [\n '#wc-panel a:not([disabled])',\n '#wc-panel button:not([disabled])',\n '#wc-panel select:not([disabled])',\n '#wc-panel input:not([disabled])',\n '#wc-panel textarea:not([disabled])',\n '#wc-panel *[tabindex=\"0\"]:not([disabled])'\n ]\n\n const elements = document.body.querySelectorAll(selectors.join(','))\n return Array.from(elements).filter(e => !e.closest('[hidden]') && !e.closest('[aria-hidden=\"true\"]'))\n}\n\nconst useFocusedElements = screen => {\n const [panelElements, setPanelElements] = useState([])\n\n const onKeyDown = useCallback(e => {\n const webchatPanelElement = document.querySelector('#wc-panel')\n\n if (e.key === 'Tab') {\n if (webchatPanelElement && !document.activeElement.closest('#wc-panel')) {\n webchatPanelElement.focus()\n }\n\n if (e.shiftKey) {\n if (document.activeElement === panelElements[0]) {\n panelElements[panelElements.length - 1].focus()\n e.preventDefault()\n } else if (document.activeElement === document.querySelector('#wc-panel')) {\n panelElements[panelElements.length - 1]?.focus()\n e.preventDefault()\n }\n } else if (document.activeElement === panelElements[panelElements.length - 1]) {\n panelElements[0].focus()\n e.preventDefault()\n }\n }\n }, [panelElements])\n\n useEffect(() => {\n setPanelElements(getFocusableElements())\n }, [screen])\n\n useEffect(() => {\n setAriaHidden(true)\n\n const panelElement = document.querySelector('#wc-panel')\n panelElement.focus()\n\n document.addEventListener('keydown', onKeyDown)\n\n return () => {\n setAriaHidden()\n document.body.querySelector('.wc-availability__link')?.focus({ preventScroll: true })\n document.removeEventListener('keydown', onKeyDown)\n }\n }, [panelElements])\n}\n\nexport { useFocusedElements }\n","import { useEffect } from 'react'\n\nexport const useTextareaAutosize = (textAreaRef, value) => {\n useEffect(() => {\n if (textAreaRef) {\n textAreaRef.style.height = '0px'\n\n const scrollHeight = textAreaRef.scrollHeight\n\n textAreaRef.style.height = `${scrollHeight}px`\n }\n }, [textAreaRef, value])\n}\n","export async function checkAvailability (endpoint) {\n const response = await fetch(endpoint)\n const data = await response.json()\n\n return {\n availability: data.availability || 'UNAVAILABLE'\n }\n}\n","export const classnames = (...classes) => classes.filter(classname => classname && typeof classname === 'string').join(' ')\n","export const historyPushState = () => {\n const url = window.location.href.split('#')[0]\n window.history.pushState({ history: true }, null, `${url}#webchat`)\n}\n\nexport const historyReplaceState = () => {\n if (window.history.state?.history) {\n return window.history.back()\n }\n\n const url = window.location.href.split('#')[0]\n return window.history.replaceState(null, null, url)\n}\n","export const messageNotification = audioUrl => {\n let buffer\n\n const context = new (window.AudioContext || window.webkitAudioContext)()\n\n if (context.state === 'suspended') {\n const events = ['touchstart', 'touchend', 'mousedown', 'wheel', 'keydown', 'click']\n\n const unlock = _e => {\n events.forEach(event => {\n document.body.removeEventListener(event, unlock)\n })\n\n context.resume()\n }\n\n events.forEach(event => {\n document.body.addEventListener(event, unlock, false)\n })\n }\n\n fetch(audioUrl)\n .then(response => response.arrayBuffer())\n .then(data => context.decodeAudioData(data))\n .then(decodedData => {\n buffer = decodedData\n })\n .catch(console.error)\n\n return () => {\n const source = context.createBufferSource()\n source.buffer = buffer\n source.connect(context.destination)\n source.start()\n }\n}\n","import { DateTime } from 'luxon'\n\nexport const transformMessage = message => {\n return {\n id: message.id,\n text: message.messageContent?.text,\n createdAt: new Date(message.createdAt),\n user: message.authorEndUserIdentity?.fullName?.trim() || null,\n assignee: message.authorUser?.firstName || null,\n direction: message.direction\n }\n}\n\nexport const transformMessages = messages => messages.map(message => transformMessage(message))\n\nexport const formatTranscript = messages => {\n const now = DateTime.local()\n now.setZone('Europe/London')\n\n let string = `Floodline webchat transcript, ${now.toFormat('HH:mm:ss a, dd LLLL yyyy')}\\n\\n`\n\n for (const message of messages) {\n const { text, direction, user, assignee, createdAt } = message\n\n const author = direction === 'inbound' ? user : `${assignee} (Floodline adviser)`\n const date = DateTime.fromJSDate(new Date(createdAt)).setZone('Europe/London').toFormat('HH:mm:ss a, dd LLLL yyyy')\n\n string += `[${date}] ${author}: \\n${text}\\n\\n`\n }\n\n string = string.replace(/<a\\b[^>]*>/i, '').replace(/<\\/a>/i, '')\n\n return encodeURIComponent(string)\n}\n","import React, { createContext, useEffect, useReducer, useMemo } from 'react'\nimport { ChatEvent } from '@nice-devone/nice-cxone-chat-web-sdk'\n\nimport { messageNotification } from '../lib/message-notification.js'\n\nimport { initialState, reducer } from './reducer.js'\nimport { CUSTOMER_ID_STORAGE_KEY, THREAD_ID_STORAGE_KEY, SETTINGS_STORAGE_KEY } from './constants.js'\n\nexport const AppContext = createContext(initialState)\n\nexport const AppProvider = ({ sdk, availability, options, children }) => {\n const [state, dispatch] = useReducer(reducer, initialState)\n\n const playSound = messageNotification(options.audioUrl)\n\n /**\n * SDK event handlers\n */\n const onLiveChatRecovered = e => {\n dispatch({ type: 'SET_AGENT', payload: e.detail.data.inboxAssignee })\n dispatch({ type: 'SET_AGENT_STATUS', payload: e.detail.data.contact.status })\n dispatch({ type: 'SET_UNSEEN_COUNT', payload: e.detail.data.contact.customerStatistics.unseenMessagesCount })\n }\n\n const onAssignedAgentChanged = e => {\n dispatch({ type: 'SET_AGENT', payload: e.detail.data.inboxAssignee })\n dispatch({ type: 'SET_AGENT_STATUS', payload: e.detail.data.case.status })\n }\n\n const onAgentTypingStarted = () => {\n dispatch({ type: 'SET_AGENT_TYPING', payload: true })\n }\n\n const onAgentTypingEnded = () => {\n dispatch({ type: 'SET_AGENT_TYPING', payload: false })\n }\n\n const onMessageCreated = e => {\n dispatch({ type: 'SET_MESSAGE', payload: e.detail.data.message })\n dispatch({ type: 'SET_AGENT_STATUS', payload: e.detail.data.case.status })\n dispatch({ type: 'SET_UNSEEN_COUNT', payload: e.detail.data.case.customerStatistics.unseenMessagesCount })\n\n const isAudioOn = JSON.parse(window.localStorage.getItem(SETTINGS_STORAGE_KEY)).audio\n\n if (isAudioOn && e.detail.data.message.direction === 'outbound') {\n playSound()\n }\n }\n\n const onContactStatusChanged = e => {\n dispatch({ type: 'SET_AGENT_STATUS', payload: e.detail.data.case.status })\n }\n\n const onMatchMedia = e => {\n dispatch({ type: 'TOGGLE_IS_MOBILE', payload: e.matches })\n }\n\n const onKeydown = () => {\n dispatch({ type: 'TOGGLE_IS_KEYBOARD', payload: true })\n }\n\n const onPointerdown = () => {\n dispatch({ type: 'TOGGLE_IS_KEYBOARD', payload: false })\n }\n\n useEffect(() => {\n sdk.onChatEvent(ChatEvent.LIVECHAT_RECOVERED, onLiveChatRecovered)\n sdk.onChatEvent(ChatEvent.MESSAGE_CREATED, onMessageCreated)\n sdk.onChatEvent(ChatEvent.AGENT_TYPING_STARTED, onAgentTypingStarted)\n sdk.onChatEvent(ChatEvent.AGENT_TYPING_ENDED, onAgentTypingEnded)\n sdk.onChatEvent(ChatEvent.ASSIGNED_AGENT_CHANGED, onAssignedAgentChanged)\n sdk.onChatEvent(ChatEvent.CONTACT_STATUS_CHANGED, onContactStatusChanged)\n // We need to know if it is a mobile and if it is a keyboard interaction\n window.matchMedia('(max-width: 640px)').addEventListener('change', onMatchMedia)\n window.addEventListener('keydown', onKeydown)\n window.addEventListener('pointerdown', onPointerdown)\n // Tidying up\n return () => {\n window.removeEventListener('change', onMatchMedia)\n window.removeEventListener('keydown', onKeydown)\n window.removeEventListener('pointerdown', onPointerdown)\n }\n }, [sdk])\n\n /**\n * Initialize customerId, threadId and whether the webchat should be open\n */\n useEffect(() => {\n dispatch({ type: 'SET_AVAILABILITY', payload: availability })\n\n setCustomerId(window.localStorage.getItem(CUSTOMER_ID_STORAGE_KEY))\n setThreadId(window.localStorage.getItem(THREAD_ID_STORAGE_KEY))\n setSettings(JSON.parse(window.localStorage.getItem(SETTINGS_STORAGE_KEY)) || state.settings)\n }, [])\n\n /**\n * Set browser history on start chat click\n */\n useEffect(() => {\n if (window.location.hash === '#webchat') {\n setChatVisibility(true)\n }\n\n const onBrowserNavigation = window.addEventListener('popstate', () => {\n if (window.location.hash === '#webchat') {\n setChatVisibility(true)\n } else {\n setChatVisibility(false)\n }\n })\n\n return () => {\n window.removeEventListener('popstate', onBrowserNavigation)\n }\n }, [])\n\n /**\n * State update functions\n */\n const setChatVisibility = payload => {\n dispatch({ type: 'SET_CHAT_VISIBILITY', payload })\n }\n\n const setCustomerId = customerId => {\n dispatch({ type: 'SET_CUSTOMER_ID', payload: customerId })\n }\n\n const setThreadId = threadId => {\n dispatch({ type: 'SET_THREAD_ID', payload: threadId })\n }\n\n const setThread = thread => {\n dispatch({ type: 'SET_THREAD', payload: thread })\n }\n\n const setMessages = messages => {\n dispatch({ type: 'SET_MESSAGES', payload: messages })\n }\n\n const setSettings = data => {\n dispatch({ type: 'SET_SETTINGS', payload: data })\n }\n\n const setUnseenCount = unseenCount => {\n dispatch({ type: 'SET_UNSEEN_COUNT', payload: unseenCount })\n }\n\n /**\n * Application-wide state and state functions\n */\n const store = useMemo(() => ({\n ...state,\n sdk,\n setSettings,\n setCustomerId,\n setThreadId,\n setThread,\n setMessages,\n setUnseenCount,\n setChatVisibility,\n onLiveChatRecovered,\n onAssignedAgentChanged,\n onAgentTypingStarted,\n onAgentTypingEnded,\n onMessageCreated,\n onContactStatusChanged\n }))\n\n return (\n <AppContext.Provider value={store}>\n {children}\n </AppContext.Provider>\n )\n}\n","import { transformMessages, transformMessage } from '../lib/transform-messages'\nimport { CUSTOMER_ID_STORAGE_KEY, THREAD_ID_STORAGE_KEY, SETTINGS_STORAGE_KEY } from './constants'\n\nconst setSettings = (state, payload) => {\n if (payload) {\n window.localStorage.setItem(SETTINGS_STORAGE_KEY, JSON.stringify(payload))\n } else {\n window.localStorage.removeItem(SETTINGS_STORAGE_KEY)\n }\n\n return {\n ...state,\n settings: payload\n }\n}\n\nconst setCustomerId = (state, payload) => {\n if (payload) {\n window.localStorage.setItem(CUSTOMER_ID_STORAGE_KEY, payload)\n } else {\n window.localStorage.removeItem(CUSTOMER_ID_STORAGE_KEY)\n }\n\n return {\n ...state,\n customerId: payload\n }\n}\n\nconst setThreadId = (state, payload) => {\n if (payload) {\n window.localStorage.setItem(THREAD_ID_STORAGE_KEY, payload)\n } else {\n window.localStorage.removeItem(THREAD_ID_STORAGE_KEY)\n }\n\n return {\n ...state,\n threadId: payload\n }\n}\n\nconst setChatVisibility = (state, payload) => {\n return {\n ...state,\n isChatOpen: payload\n }\n}\n\nconst setAvailability = (state, payload) => {\n return {\n ...state,\n availability: payload\n }\n}\n\nconst setThread = (state, payload) => {\n return {\n ...state,\n thread: payload\n }\n}\n\nconst setMessage = (state, payload) => {\n return {\n ...state,\n messages: [...state.messages, transformMessage(payload)]\n }\n}\n\nconst setMessages = (state, payload) => {\n return {\n ...state,\n messages: transformMessages(payload).reverse()\n }\n}\n\nconst setAgent = (state, payload) => {\n return {\n ...state,\n agent: payload\n }\n}\n\nconst setAgentIsTyping = (state, payload) => {\n return {\n ...state,\n isAgentTyping: payload\n }\n}\n\nconst setAgentStatus = (state, payload) => {\n return {\n ...state,\n agentStatus: payload\n }\n}\n\nconst setUnseenCount = (state, payload) => {\n return {\n ...state,\n unseenCount: payload\n }\n}\n\nconst toggleIsMobile = (state, payload) => {\n return {\n ...state,\n isMobile: payload\n }\n}\n\nconst toggleIsKeyboard = (state, payload) => {\n return {\n ...state,\n isKeyboard: payload\n }\n}\n\nexport const actionsMap = {\n SET_CHAT_VISIBILITY: setChatVisibility,\n SET_AVAILABILITY: setAvailability,\n SET_SETTINGS: setSettings,\n SET_CUSTOMER_ID: setCustomerId,\n SET_THREAD_ID: setThreadId,\n SET_THREAD: setThread,\n SET_MESSAGE: setMessage,\n SET_MESSAGES: setMessages,\n SET_AGENT: setAgent,\n SET_AGENT_TYPING: setAgentIsTyping,\n SET_AGENT_STATUS: setAgentStatus,\n SET_UNSEEN_COUNT: setUnseenCount,\n TOGGLE_IS_MOBILE: toggleIsMobile,\n TOGGLE_IS_KEYBOARD: toggleIsKeyboard\n}\n","export const SETTINGS_STORAGE_KEY = 'webchat_settings'\nexport const CUSTOMER_ID_STORAGE_KEY = 'webchat_customer_id'\nexport const THREAD_ID_STORAGE_KEY = 'webchat_thread_id'\n","import { actionsMap } from './actions-map'\n\nexport const initialState = {\n availability: null,\n customerId: null,\n threadId: null,\n thread: null,\n messages: [],\n unseenCount: 0,\n agent: null,\n agentStatus: null,\n isAgentTyping: false,\n isChatOpen: false,\n isMobile: window.matchMedia('(max-width: 640px)').matches,\n isKeyboard: false,\n settings: { audio: true, scroll: true }\n}\n\nexport const reducer = (state, action) => {\n const { type, payload } = action\n\n const fn = actionsMap[type]\n\n if (fn) {\n const actionFunction = fn.bind(this, state, payload)\n return actionFunction()\n }\n\n return state\n}\n","import { useContext } from 'react'\n\nimport { AppContext } from './AppProvider.jsx'\n\nexport const useApp = () => useContext(AppContext)\n","export const useChatSdk = sdk => {\n const connect = async () => sdk.authorize()\n\n const fetchCustomerId = async () => {\n const response = await connect()\n return response?.consumerIdentity.idOnExternalPlatform\n }\n\n const fetchThread = async threadId => {\n await connect()\n return sdk.getThread(threadId)\n }\n\n const fetchMessages = async (thread, threadId) => {\n await connect()\n\n const recovered = await thread.recover(threadId)\n\n const allMessages = []\n let fetchedMessages = recovered.messages\n\n while (fetchedMessages.length) {\n fetchedMessages.map(msg => allMessages.push(msg))\n\n try {\n const response = await thread.loadMoreMessages()\n fetchedMessages = response.data.messages\n } catch (err) {\n fetchedMessages = []\n }\n }\n\n return allMessages\n }\n\n return { connect, fetchCustomerId, fetchThread, fetchMessages }\n}\n","module.exports = require(\"@nice-devone/nice-cxone-chat-web-sdk\");","module.exports = require(\"luxon\");","module.exports = require(\"react\");","module.exports = require(\"react-dom\");","module.exports = require(\"react-dom/client\");","module.exports = require(\"uuid\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import React from 'react'\nimport { createRoot } from 'react-dom/client'\nimport { ChatSdk } from '@nice-devone/nice-cxone-chat-web-sdk'\nimport { Availability } from './components/availability/availability.jsx'\nimport { checkAvailability } from './lib/check-availability'\nimport { AppProvider } from './store/AppProvider.jsx'\nimport { CUSTOMER_ID_STORAGE_KEY } from './store/constants.js'\n\nexport async function init (container, options) {\n const sdk = new ChatSdk({\n brandId: options.brandId,\n channelId: options.channelId,\n customerId: window.localStorage.getItem(CUSTOMER_ID_STORAGE_KEY) || '',\n environment: options.environment\n })\n\n const root = createRoot(container)\n let availability\n try {\n const result = await checkAvailability(options.availabilityEndpoint)\n availability = result.availability\n } catch (e) {\n availability = 'UNAVAILABLE'\n }\n root.render(\n <AppProvider sdk={sdk} availability={availability} options={options}>\n <Availability />\n </AppProvider>\n )\n}\n"],"names":["React","useEffect","useRef","classnames","Panel","SkipLink","useApp","historyPushState","historyReplaceState","Availability","availability","isChatOpen","setChatVisibility","unseenCount","threadId","setUnseenCount","buttonRef","onClick","e","preventDefault","onKeyDown","event","key","onKeyUp","onScroll","rect","current","parentElement","getBoundingClientRect","isBelowFold","top","window","innerHeight","document","documentElement","clientHeight","isFixed","classList","toggle","body","addEventListener","removeEventListener","TextComponent","createElement","Fragment","className","ref","href","draggable","role","useState","PanelHeader","PanelFooter","Message","useTextareaAutosize","formatTranscript","Chat","onEndChatScreen","onSettingsScreen","thread","messages","agent","agentStatus","isAgentTyping","settings","isKeyboard","userMessage","setUserMessage","focusVisibleWithin","setFocusVisibleWithin","messageRef","scroll","length","chatBody","querySelector","scrollTop","scrollHeight","label","remove","add","onChange","target","value","agentName","nickname","firstName","connectionHeadlineText","sendMessage","sendTextMessage","trim","err","console","log","handleKeyPress","shiftKey","handleSubmit","saveChat","transcript","saveChatLink","setAttribute","tabIndex","map","msg","index","id","message","previousMessage","width","height","x","y","viewBox","stroke","cx","cy","r","fill","noValidate","onSubmit","htmlFor","rows","name","onFocus","onBlur","type","download","ErrorSummary","errors","errs","Object","keys","goToInput","getAttribute","focus","outbound","direction","messageOwnerSameAsPrevious","assignee","text","children","isMobile","onClose","lastMessageSeen","BackButtonComponent","focusable","d","CloseButtonComponent","MinimiseButtonComponent","isMobileAndHasHistory","history","state","isMobileAndNoHistory","RightButtonComponent","useCallback","createPortal","PreChat","RequestChat","Unavailable","EndChat","Settings","Feedback","useChatSdk","useFocusedElements","sdk","setThread","setThreadId","setMessages","fetchThread","fetchMessages","screen","setScreen","onEscapeKey","getElementsByTagName","recover","fetchedThread","fetchedMessages","handleScreenChange","newScreen","goToPreChatScreen","goToRequestChatScreen","goToChatScreen","goToEndChatScreen","goToFeedbackScreen","goToSettingsScreen","ScreenComponent","onContinue","onPreChatScreen","onChatScreen","onEndChatConfirm","onCancel","Component","setCustomerId","confirmEndChat","endChat","feedbackCancel","rel","uuid","QUESTION_MAX_LENGTH","fetchCustomerId","setErrors","questionLength","setQuestionLength","isButtonDisabled","setButtonDisabled","nameRef","questionRef","isQuestionLengthValid","questionLengthRemaining","questionLengthExceeded","questionHint","onQuestionChange","buttonLabel","onRequestChat","question","v4","customerId","getCustomer","setName","startChat","setCustomField","style","color","disabled","setSettings","optionAudio","setOptionAudio","audio","optionScroll","setOptionScroll","onSave","defaultChecked","targetContainer","getElementById","ariaHidden","dataWcInert","setAriaHidden","isInert","node","hasAttribute","removeAttribute","getFocusableElements","selectors","elements","querySelectorAll","join","Array","from","filter","closest","panelElements","setPanelElements","webchatPanelElement","activeElement","panelElement","preventScroll","textAreaRef","checkAvailability","endpoint","response","fetch","data","json","classes","classname","url","location","split","pushState","back","replaceState","messageNotification","audioUrl","buffer","context","AudioContext","webkitAudioContext","events","unlock","_e","forEach","resume","then","arrayBuffer","decodeAudioData","decodedData","catch","error","source","createBufferSource","connect","destination","start","DateTime","transformMessage","messageContent","createdAt","Date","user","authorEndUserIdentity","fullName","authorUser","transformMessages","now","local","setZone","string","toFormat","author","date","fromJSDate","replace","encodeURIComponent","createContext","useReducer","useMemo","ChatEvent","initialState","reducer","CUSTOMER_ID_STORAGE_KEY","THREAD_ID_STORAGE_KEY","SETTINGS_STORAGE_KEY","AppContext","AppProvider","options","dispatch","playSound","onLiveChatRecovered","payload","detail","inboxAssignee","contact","status","customerStatistics","unseenMessagesCount","onAssignedAgentChanged","case","onAgentTypingStarted","onAgentTypingEnded","onMessageCreated","isAudioOn","JSON","parse","localStorage","getItem","onContactStatusChanged","onMatchMedia","matches","onKeydown","onPointerdown","onChatEvent","LIVECHAT_RECOVERED","MESSAGE_CREATED","AGENT_TYPING_STARTED","AGENT_TYPING_ENDED","ASSIGNED_AGENT_CHANGED","CONTACT_STATUS_CHANGED","matchMedia","hash","onBrowserNavigation","store","Provider","setItem","stringify","removeItem","setAvailability","setMessage","reverse","setAgent","setAgentIsTyping","setAgentStatus","toggleIsMobile","toggleIsKeyboard","actionsMap","SET_CHAT_VISIBILITY","SET_AVAILABILITY","SET_SETTINGS","SET_CUSTOMER_ID","SET_THREAD_ID","SET_THREAD","SET_MESSAGE","SET_MESSAGES","SET_AGENT","SET_AGENT_TYPING","SET_AGENT_STATUS","SET_UNSEEN_COUNT","TOGGLE_IS_MOBILE","TOGGLE_IS_KEYBOARD","action","fn","actionFunction","bind","useContext","authorize","consumerIdentity","idOnExternalPlatform","getThread","recovered","allMessages","push","loadMoreMessages","createRoot","ChatSdk","init","container","brandId","channelId","environment","root","result","availabilityEndpoint","render"],"sourceRoot":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@defra/flood-webchat",
3
- "version": "0.0.1-beta.31",
3
+ "version": "0.0.1-beta.33",
4
4
  "description": "",
5
5
  "main": "dist/server.js",
6
6
  "browser": "dist/client.js",
@@ -1,4 +1,4 @@
1
- import React, { useEffect, useRef, useState } from 'react'
1
+ import React, { useEffect, useRef } from 'react'
2
2
 
3
3
  import { classnames } from '../../lib/classnames'
4
4
  import { Panel } from '../panel/panel.jsx'
@@ -10,7 +10,6 @@ import { historyPushState, historyReplaceState } from '../../lib/history.js'
10
10
  export function Availability () {
11
11
  const { availability, isChatOpen, setChatVisibility, unseenCount, threadId, setUnseenCount } = useApp()
12
12
 
13
- const [isFixed, setIsFixed] = useState(false)
14
13
  const buttonRef = useRef()
15
14
 
16
15
  const onClick = e => {
@@ -38,34 +37,33 @@ export function Availability () {
38
37
  }
39
38
  }
40
39
 
41
- const intersectionCallback = entries => {
42
- const [entry] = entries
43
- const isBelowFold = !entry.isIntersecting && entry.boundingClientRect.top > 0
44
- setIsFixed(!isChatOpen && isBelowFold && threadId)
45
- }
46
-
47
40
  useEffect(() => {
48
- const observer = new window.IntersectionObserver(intersectionCallback, {
49
- rootMargin: '35px'
50
- })
41
+ const onScroll = () => {
42
+ if (!threadId) {
43
+ return
44
+ }
45
+
46
+ if (availability !== 'AVAILABLE') {
47
+ return
48
+ }
51
49
 
52
- const parentElement = buttonRef.current?.parentElement
50
+ const rect = buttonRef.current.parentElement.getBoundingClientRect()
53
51
 
54
- if (parentElement) {
55
- observer.observe(parentElement)
52
+ const isBelowFold = rect.top + 35 > (window.innerHeight || document.documentElement.clientHeight)
53
+ const isFixed = !isChatOpen && isBelowFold
54
+
55
+ document.documentElement.classList.toggle('wc-u-scroll-padding', isFixed)
56
+ document.body.classList.toggle('wc-u-scroll-padding', isFixed)
57
+ buttonRef.current.classList.toggle('wc-availability--fixed', isFixed)
56
58
  }
57
59
 
60
+ document.addEventListener('scroll', onScroll)
61
+ onScroll()
62
+
58
63
  return () => {
59
- if (parentElement) {
60
- observer.unobserve(parentElement)
61
- }
64
+ document.removeEventListener('scroll', onScroll)
62
65
  }
63
- }, [buttonRef, isChatOpen])
64
-
65
- useEffect(() => {
66
- document.documentElement.classList.toggle('wc-u-scroll-padding', isFixed)
67
- document.body.classList.toggle('wc-u-scroll-padding', isFixed)
68
- }, [isFixed])
66
+ }, [threadId, isChatOpen, availability])
69
67
 
70
68
  let TextComponent = (<>Show chat</>)
71
69
 
@@ -78,7 +76,7 @@ export function Availability () {
78
76
  return (
79
77
  <>
80
78
  <div
81
- className={classnames('wc-availability', isFixed && 'wc-availability--fixed', isChatOpen && 'wc-open')}
79
+ className={classnames('wc-availability', isChatOpen && 'wc-open')}
82
80
  ref={buttonRef}
83
81
  >
84
82
  <div className='wc-availability__inner'>
@@ -1,5 +1,6 @@
1
1
  import React, { useEffect, useState, useCallback } from 'react'
2
2
  import { createPortal } from 'react-dom'
3
+ import { classnames } from '../../lib/classnames.js'
3
4
 
4
5
  import { PreChat } from '../screens/pre-chat.jsx'
5
6
  import { RequestChat } from '../screens/request-chat.jsx'
@@ -15,7 +16,7 @@ import { useFocusedElements } from '../../hooks/useFocusedElements.js'
15
16
  import { historyReplaceState } from '../../lib/history.js'
16
17
 
17
18
  export function Panel () {
18
- const { sdk, availability, thread, threadId, setThread, setThreadId, setChatVisibility, setMessages, setUnseenCount, isMobile } = useApp()
19
+ const { sdk, availability, thread, threadId, setThread, setThreadId, setChatVisibility, setMessages, setUnseenCount, isMobile, isKeyboard } = useApp()
19
20
  const { fetchThread, fetchMessages } = useChatSdk(sdk)
20
21
 
21
22
  const [screen, setScreen] = useState(threadId ? 2 : 0)
@@ -99,6 +100,7 @@ export function Panel () {
99
100
  const goToEndChatScreen = handleScreenChange(3)
100
101
  const goToFeedbackScreen = handleScreenChange(4)
101
102
  const goToSettingsScreen = handleScreenChange(5)
103
+
102
104
  let ScreenComponent
103
105
 
104
106
  switch (screen) {
@@ -129,7 +131,7 @@ export function Panel () {
129
131
  }
130
132
 
131
133
  const Component = (
132
- <div id='wc-panel' role='dialog' className='wc-panel' tabIndex='-1' aria-modal='true' aria-labelledby='wc-header-title'>
134
+ <div id='wc-panel' role='dialog' className={classnames('wc-panel', isKeyboard && 'wc-focus-visible')} tabIndex='-1' aria-modal='true' aria-labelledby='wc-header-title'>
133
135
  <div className='wc-panel__inner'>
134
136
  {ScreenComponent}
135
137
  </div>
@@ -72,7 +72,7 @@ const useFocusedElements = screen => {
72
72
 
73
73
  return () => {
74
74
  setAriaHidden()
75
- document.body.querySelector('.wc-availability__link')?.focus()
75
+ document.body.querySelector('.wc-availability__link')?.focus({ preventScroll: true })
76
76
  document.removeEventListener('keydown', onKeyDown)
77
77
  }
78
78
  }, [panelElements])
@@ -5,9 +5,9 @@ export const historyPushState = () => {
5
5
 
6
6
  export const historyReplaceState = () => {
7
7
  if (window.history.state?.history) {
8
- window.history.back()
8
+ return window.history.back()
9
9
  }
10
10
 
11
11
  const url = window.location.href.split('#')[0]
12
- window.history.replaceState(null, null, url)
12
+ return window.history.replaceState(null, null, url)
13
13
  }