@defra/flood-webchat 0.0.1-beta.32 → 0.0.1-beta.34

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/client.js CHANGED
@@ -32,14 +32,15 @@ function Availability() {
32
32
  setChatVisibility,
33
33
  unseenCount,
34
34
  threadId,
35
- setUnseenCount
35
+ setUnseenCount,
36
+ setInstigatorId
36
37
  } = (0,_store_useApp__WEBPACK_IMPORTED_MODULE_4__.useApp)();
37
- const [isFixed, setIsFixed] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
38
38
  const buttonRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)();
39
39
  const onClick = e => {
40
40
  e.preventDefault();
41
41
  setUnseenCount(0);
42
42
  setChatVisibility(!isChatOpen);
43
+ setInstigatorId(e.target.id);
43
44
  if (!isChatOpen) {
44
45
  (0,_lib_history_js__WEBPACK_IMPORTED_MODULE_5__.historyPushState)();
45
46
  } else {
@@ -57,29 +58,27 @@ function Availability() {
57
58
  setChatVisibility(!isChatOpen);
58
59
  }
59
60
  };
60
- const intersectionCallback = entries => {
61
- const [entry] = entries;
62
- const isBelowFold = !entry.isIntersecting && entry.boundingClientRect.top > 0;
63
- setIsFixed(!isChatOpen && isBelowFold && threadId);
64
- };
65
61
  (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);
62
+ const onScroll = () => {
63
+ if (!threadId) {
64
+ return;
76
65
  }
66
+ if (availability !== 'AVAILABLE') {
67
+ return;
68
+ }
69
+ const rect = buttonRef.current.parentElement.getBoundingClientRect();
70
+ const isBelowFold = rect.top + 35 > (window.innerHeight || document.documentElement.clientHeight);
71
+ const isFixed = !isChatOpen && isBelowFold;
72
+ document.documentElement.classList.toggle('wc-u-scroll-padding', isFixed);
73
+ document.body.classList.toggle('wc-u-scroll-padding', isFixed);
74
+ buttonRef.current.classList.toggle('wc-availability--fixed', isFixed);
77
75
  };
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]);
76
+ document.addEventListener('scroll', onScroll);
77
+ onScroll();
78
+ return () => {
79
+ document.removeEventListener('scroll', onScroll);
80
+ };
81
+ }, [threadId, isChatOpen, availability]);
83
82
  let TextComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, "Show chat");
84
83
  if (!threadId) {
85
84
  TextComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, "Start chat");
@@ -87,11 +86,12 @@ function Availability() {
87
86
  switch (availability) {
88
87
  case 'AVAILABLE':
89
88
  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'),
89
+ className: (0,_lib_classnames__WEBPACK_IMPORTED_MODULE_1__.classnames)('wc-availability', isChatOpen && 'wc-open'),
91
90
  ref: buttonRef
92
91
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
93
92
  className: "wc-availability__inner"
94
93
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
94
+ id: "webchat-start-chat-link",
95
95
  className: "wc-availability__link",
96
96
  href: "#webchat",
97
97
  draggable: "false",
@@ -224,6 +224,7 @@ function Chat({
224
224
  }, connectionHeadlineText), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
225
225
  className: "wc-status__link",
226
226
  href: "#",
227
+ role: "button",
227
228
  "data-module": "govuk-button",
228
229
  onClick: onEndChatScreen
229
230
  }, "End chat")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
@@ -536,17 +537,19 @@ __webpack_require__.r(__webpack_exports__);
536
537
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
537
538
  /* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom */ "react-dom");
538
539
  /* 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");
540
+ /* harmony import */ var _lib_classnames_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../lib/classnames.js */ "./src/client/lib/classnames.js");
541
+ /* harmony import */ var _screens_pre_chat_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../screens/pre-chat.jsx */ "./src/client/components/screens/pre-chat.jsx");
542
+ /* harmony import */ var _screens_request_chat_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../screens/request-chat.jsx */ "./src/client/components/screens/request-chat.jsx");
543
+ /* harmony import */ var _chat_chat_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../chat/chat.jsx */ "./src/client/components/chat/chat.jsx");
544
+ /* harmony import */ var _screens_unavailable_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../screens/unavailable.jsx */ "./src/client/components/screens/unavailable.jsx");
545
+ /* harmony import */ var _screens_end_chat_jsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../screens/end-chat.jsx */ "./src/client/components/screens/end-chat.jsx");
546
+ /* harmony import */ var _screens_settings_jsx__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../screens/settings.jsx */ "./src/client/components/screens/settings.jsx");
547
+ /* harmony import */ var _screens_feedback_jsx__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../screens/feedback.jsx */ "./src/client/components/screens/feedback.jsx");
548
+ /* harmony import */ var _store_useApp_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../store/useApp.js */ "./src/client/store/useApp.js");
549
+ /* harmony import */ var _store_useChatSdk_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../store/useChatSdk.js */ "./src/client/store/useChatSdk.js");
550
+ /* harmony import */ var _hooks_useFocusedElements_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../hooks/useFocusedElements.js */ "./src/client/hooks/useFocusedElements.js");
551
+ /* harmony import */ var _lib_history_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../lib/history.js */ "./src/client/lib/history.js");
552
+
550
553
 
551
554
 
552
555
 
@@ -564,6 +567,7 @@ function Panel() {
564
567
  const {
565
568
  sdk,
566
569
  availability,
570
+ instigatorId,
567
571
  thread,
568
572
  threadId,
569
573
  setThread,
@@ -571,14 +575,15 @@ function Panel() {
571
575
  setChatVisibility,
572
576
  setMessages,
573
577
  setUnseenCount,
574
- isMobile
575
- } = (0,_store_useApp_js__WEBPACK_IMPORTED_MODULE_9__.useApp)();
578
+ isMobile,
579
+ isKeyboard
580
+ } = (0,_store_useApp_js__WEBPACK_IMPORTED_MODULE_10__.useApp)();
576
581
  const {
577
582
  fetchThread,
578
583
  fetchMessages
579
- } = (0,_store_useChatSdk_js__WEBPACK_IMPORTED_MODULE_10__.useChatSdk)(sdk);
584
+ } = (0,_store_useChatSdk_js__WEBPACK_IMPORTED_MODULE_11__.useChatSdk)(sdk);
580
585
  const [screen, setScreen] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(threadId ? 2 : 0);
581
- (0,_hooks_useFocusedElements_js__WEBPACK_IMPORTED_MODULE_11__.useFocusedElements)(screen);
586
+ (0,_hooks_useFocusedElements_js__WEBPACK_IMPORTED_MODULE_12__.useFocusedElements)(screen);
582
587
  const onEscapeKey = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(e => {
583
588
  if (e.key === 'Escape' || e.key === 'Esc') {
584
589
  if (threadId) {
@@ -586,7 +591,8 @@ function Panel() {
586
591
  setUnseenCount(0);
587
592
  }
588
593
  setChatVisibility(false);
589
- (0,_lib_history_js__WEBPACK_IMPORTED_MODULE_12__.historyReplaceState)();
594
+ (0,_lib_history_js__WEBPACK_IMPORTED_MODULE_13__.historyReplaceState)();
595
+ document.getElementById(instigatorId)?.focus();
590
596
  }
591
597
  }, [thread, threadId, setUnseenCount, setChatVisibility]);
592
598
 
@@ -653,49 +659,49 @@ function Panel() {
653
659
  let ScreenComponent;
654
660
  switch (screen) {
655
661
  case 0:
656
- ScreenComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_screens_pre_chat_jsx__WEBPACK_IMPORTED_MODULE_2__.PreChat, {
662
+ ScreenComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_screens_pre_chat_jsx__WEBPACK_IMPORTED_MODULE_3__.PreChat, {
657
663
  onContinue: goToRequestChatScreen
658
664
  });
659
665
  break;
660
666
  case 1:
661
- ScreenComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_screens_request_chat_jsx__WEBPACK_IMPORTED_MODULE_3__.RequestChat, {
667
+ ScreenComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_screens_request_chat_jsx__WEBPACK_IMPORTED_MODULE_4__.RequestChat, {
662
668
  onPreChatScreen: goToPreChatScreen
663
669
  });
664
670
  break;
665
671
  case 2:
666
- ScreenComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_chat_chat_jsx__WEBPACK_IMPORTED_MODULE_4__.Chat, {
672
+ ScreenComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_chat_chat_jsx__WEBPACK_IMPORTED_MODULE_5__.Chat, {
667
673
  onSettingsScreen: goToSettingsScreen,
668
674
  onEndChatScreen: goToEndChatScreen
669
675
  });
670
676
  break;
671
677
  case 3:
672
- ScreenComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_screens_end_chat_jsx__WEBPACK_IMPORTED_MODULE_6__.EndChat, {
678
+ ScreenComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_screens_end_chat_jsx__WEBPACK_IMPORTED_MODULE_7__.EndChat, {
673
679
  onChatScreen: goToChatScreen,
674
680
  onEndChatConfirm: goToFeedbackScreen
675
681
  });
676
682
  break;
677
683
  case 4:
678
- ScreenComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_screens_feedback_jsx__WEBPACK_IMPORTED_MODULE_8__.Feedback, {
684
+ ScreenComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_screens_feedback_jsx__WEBPACK_IMPORTED_MODULE_9__.Feedback, {
679
685
  onCancel: () => setChatVisibility(false)
680
686
  });
681
687
  break;
682
688
  case 5:
683
- ScreenComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_screens_settings_jsx__WEBPACK_IMPORTED_MODULE_7__.Settings, {
689
+ ScreenComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_screens_settings_jsx__WEBPACK_IMPORTED_MODULE_8__.Settings, {
684
690
  onCancel: goToChatScreen
685
691
  });
686
692
  break;
687
693
  default:
688
- ScreenComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_screens_pre_chat_jsx__WEBPACK_IMPORTED_MODULE_2__.PreChat, {
694
+ ScreenComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_screens_pre_chat_jsx__WEBPACK_IMPORTED_MODULE_3__.PreChat, {
689
695
  onContinue: goToRequestChatScreen
690
696
  });
691
697
  }
692
698
  if (availability === 'UNAVAILABLE') {
693
- ScreenComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_screens_unavailable_jsx__WEBPACK_IMPORTED_MODULE_5__.Unavailable, null);
699
+ ScreenComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_screens_unavailable_jsx__WEBPACK_IMPORTED_MODULE_6__.Unavailable, null);
694
700
  }
695
701
  const Component = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
696
702
  id: "wc-panel",
697
703
  role: "dialog",
698
- className: "wc-panel",
704
+ className: (0,_lib_classnames_js__WEBPACK_IMPORTED_MODULE_2__.classnames)('wc-panel', isKeyboard && 'wc-focus-visible'),
699
705
  tabIndex: "-1",
700
706
  "aria-modal": "true",
701
707
  "aria-labelledby": "wc-header-title"
@@ -734,7 +740,8 @@ function EndChat({
734
740
  setMessages,
735
741
  agentStatus,
736
742
  thread,
737
- setUnseenCount
743
+ setUnseenCount,
744
+ isKeyboard
738
745
  } = (0,_store_useApp_js__WEBPACK_IMPORTED_MODULE_2__.useApp)();
739
746
  const confirmEndChat = async e => {
740
747
  e.preventDefault();
@@ -750,6 +757,13 @@ function EndChat({
750
757
  }
751
758
  onEndChatConfirm(e);
752
759
  };
760
+ (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
761
+ if (isKeyboard) {
762
+ setTimeout(() => {
763
+ document.querySelector('#confirmEndChat').focus();
764
+ }, 10);
765
+ }
766
+ }, []);
753
767
  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_panel_panel_header_jsx__WEBPACK_IMPORTED_MODULE_1__.PanelHeader, null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
754
768
  className: "wc-body"
755
769
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
@@ -770,6 +784,7 @@ function EndChat({
770
784
  href: "#resumeChat",
771
785
  role: "button",
772
786
  className: "wc-link govuk-link",
787
+ "data-module": "govuk-button",
773
788
  onClick: onChatScreen
774
789
  }, "No, resume chat")))));
775
790
  }
@@ -808,7 +823,9 @@ function Feedback({
808
823
  className: "govuk-link",
809
824
  href: "#",
810
825
  target: "_blank",
811
- rel: "noreferrer"
826
+ rel: "noreferrer",
827
+ role: "button",
828
+ "data-module": "govuk-button"
812
829
  }, "Feedback Link")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
813
830
  id: "feedback-cancel",
814
831
  className: "wc-link govuk-link",
@@ -1129,6 +1146,7 @@ function Settings({
1129
1146
  href: "#",
1130
1147
  className: "wc-button govuk-button",
1131
1148
  "data-module": "govuk-button",
1149
+ role: "button",
1132
1150
  onClick: onSave
1133
1151
  }, "Save"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
1134
1152
  id: "settings-cancel",
@@ -1197,7 +1215,8 @@ __webpack_require__.r(__webpack_exports__);
1197
1215
 
1198
1216
  const SkipLink = () => {
1199
1217
  const {
1200
- thread
1218
+ thread,
1219
+ setInstigatorId
1201
1220
  } = (0,_store_useApp__WEBPACK_IMPORTED_MODULE_2__.useApp)();
1202
1221
  if (!thread) {
1203
1222
  return null;
@@ -1206,10 +1225,17 @@ const SkipLink = () => {
1206
1225
  if (!targetContainer) {
1207
1226
  return null;
1208
1227
  }
1228
+ const onClick = e => {
1229
+ e.preventDefault();
1230
+ setInstigatorId(e.target.id);
1231
+ window.location.hash = '#webchat';
1232
+ };
1209
1233
  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/(0,react_dom__WEBPACK_IMPORTED_MODULE_1__.createPortal)( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
1234
+ id: "webchat-skip-link",
1210
1235
  href: "#webchat",
1211
1236
  className: "govuk-skip-link",
1212
1237
  "data-module": "govuk-skip-link",
1238
+ onClick: onClick,
1213
1239
  "data-wc-skiplink": true,
1214
1240
  "data-wc-open-btn": true
1215
1241
  }, "Skip to webchat"), targetContainer));
@@ -1284,7 +1310,6 @@ const useFocusedElements = screen => {
1284
1310
  document.addEventListener('keydown', onKeyDown);
1285
1311
  return () => {
1286
1312
  setAriaHidden();
1287
- document.body.querySelector('.wc-availability__link')?.focus();
1288
1313
  document.removeEventListener('keydown', onKeyDown);
1289
1314
  };
1290
1315
  }, [panelElements]);
@@ -1675,6 +1700,12 @@ const AppProvider = ({
1675
1700
  payload: unseenCount
1676
1701
  });
1677
1702
  };
1703
+ const setInstigatorId = id => {
1704
+ dispatch({
1705
+ type: 'SET_INSTIGATOR_ID',
1706
+ payload: id
1707
+ });
1708
+ };
1678
1709
 
1679
1710
  /**
1680
1711
  * Application-wide state and state functions
@@ -1689,6 +1720,7 @@ const AppProvider = ({
1689
1720
  setMessages,
1690
1721
  setUnseenCount,
1691
1722
  setChatVisibility,
1723
+ setInstigatorId,
1692
1724
  onLiveChatRecovered,
1693
1725
  onAssignedAgentChanged,
1694
1726
  onAgentTypingStarted,
@@ -1804,6 +1836,12 @@ const setUnseenCount = (state, payload) => {
1804
1836
  unseenCount: payload
1805
1837
  };
1806
1838
  };
1839
+ const setInstigatorId = (state, payload) => {
1840
+ return {
1841
+ ...state,
1842
+ instigatorId: payload
1843
+ };
1844
+ };
1807
1845
  const toggleIsMobile = (state, payload) => {
1808
1846
  return {
1809
1847
  ...state,
@@ -1829,6 +1867,7 @@ const actionsMap = {
1829
1867
  SET_AGENT_TYPING: setAgentIsTyping,
1830
1868
  SET_AGENT_STATUS: setAgentStatus,
1831
1869
  SET_UNSEEN_COUNT: setUnseenCount,
1870
+ SET_INSTIGATOR_ID: setInstigatorId,
1832
1871
  TOGGLE_IS_MOBILE: toggleIsMobile,
1833
1872
  TOGGLE_IS_KEYBOARD: toggleIsKeyboard
1834
1873
  };
@@ -1873,6 +1912,7 @@ const initialState = {
1873
1912
  thread: null,
1874
1913
  messages: [],
1875
1914
  unseenCount: 0,
1915
+ instigatorId: null,
1876
1916
  agent: null,
1877
1917
  agentStatus: null,
1878
1918
  isAgentTyping: false,
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","mappings":"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","sources":["webpack://@defra/flood-webchat/./src/client/components/availability/availability.jsx","webpack://@defra/flood-webchat/./src/client/components/chat/chat.jsx","webpack://@defra/flood-webchat/./src/client/components/errorSummary/error-summary.jsx","webpack://@defra/flood-webchat/./src/client/components/message/message.jsx","webpack://@defra/flood-webchat/./src/client/components/panel/panel-footer.jsx","webpack://@defra/flood-webchat/./src/client/components/panel/panel-header.jsx","webpack://@defra/flood-webchat/./src/client/components/panel/panel.jsx","webpack://@defra/flood-webchat/./src/client/components/screens/end-chat.jsx","webpack://@defra/flood-webchat/./src/client/components/screens/feedback.jsx","webpack://@defra/flood-webchat/./src/client/components/screens/pre-chat.jsx","webpack://@defra/flood-webchat/./src/client/components/screens/request-chat.jsx","webpack://@defra/flood-webchat/./src/client/components/screens/settings.jsx","webpack://@defra/flood-webchat/./src/client/components/screens/unavailable.jsx","webpack://@defra/flood-webchat/./src/client/components/skip-link.jsx","webpack://@defra/flood-webchat/./src/client/hooks/useFocusedElements.js","webpack://@defra/flood-webchat/./src/client/hooks/useTextareaAutosize.js","webpack://@defra/flood-webchat/./src/client/lib/check-availability.js","webpack://@defra/flood-webchat/./src/client/lib/classnames.js","webpack://@defra/flood-webchat/./src/client/lib/history.js","webpack://@defra/flood-webchat/./src/client/lib/message-notification.js","webpack://@defra/flood-webchat/./src/client/lib/transform-messages.js","webpack://@defra/flood-webchat/./src/client/store/AppProvider.jsx","webpack://@defra/flood-webchat/./src/client/store/actions-map.js","webpack://@defra/flood-webchat/./src/client/store/constants.js","webpack://@defra/flood-webchat/./src/client/store/reducer.js","webpack://@defra/flood-webchat/./src/client/store/useApp.js","webpack://@defra/flood-webchat/./src/client/store/useChatSdk.js","webpack://@defra/flood-webchat/external commonjs \"@nice-devone/nice-cxone-chat-web-sdk\"","webpack://@defra/flood-webchat/external commonjs \"luxon\"","webpack://@defra/flood-webchat/external commonjs \"react\"","webpack://@defra/flood-webchat/external commonjs \"react-dom\"","webpack://@defra/flood-webchat/external commonjs \"react-dom/client\"","webpack://@defra/flood-webchat/external commonjs \"uuid\"","webpack://@defra/flood-webchat/webpack/bootstrap","webpack://@defra/flood-webchat/webpack/runtime/compat get default export","webpack://@defra/flood-webchat/webpack/runtime/define property getters","webpack://@defra/flood-webchat/webpack/runtime/hasOwnProperty shorthand","webpack://@defra/flood-webchat/webpack/runtime/make namespace object","webpack://@defra/flood-webchat/./src/client/index.jsx"],"sourcesContent":["import React, { useEffect, useRef, 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 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","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, setInstigatorId } = useApp()\n\n const buttonRef = useRef()\n\n const onClick = e => {\n e.preventDefault()\n setUnseenCount(0)\n setChatVisibility(!isChatOpen)\n setInstigatorId(e.target.id)\n\n if (!isChatOpen) {\n historyPushState()\n } else {\n historyReplaceState()\n }\n }\n\n const onKeyDown = event => {\n if (event.key === ' ') {\n event.preventDefault()\n }\n }\n\n const onKeyUp = event => {\n if (event.key === ' ') {\n setUnseenCount(0)\n setChatVisibility(!isChatOpen)\n }\n }\n\n useEffect(() => {\n const onScroll = () => {\n if (!threadId) {\n return\n }\n\n if (availability !== 'AVAILABLE') {\n return\n }\n\n const rect = buttonRef.current.parentElement.getBoundingClientRect()\n\n const isBelowFold = rect.top + 35 > (window.innerHeight || document.documentElement.clientHeight)\n const isFixed = !isChatOpen && isBelowFold\n\n document.documentElement.classList.toggle('wc-u-scroll-padding', isFixed)\n document.body.classList.toggle('wc-u-scroll-padding', isFixed)\n buttonRef.current.classList.toggle('wc-availability--fixed', isFixed)\n }\n\n document.addEventListener('scroll', onScroll)\n onScroll()\n\n return () => {\n document.removeEventListener('scroll', onScroll)\n }\n }, [threadId, isChatOpen, availability])\n\n let TextComponent = (<>Show chat</>)\n\n if (!threadId) {\n TextComponent = (<>Start chat</>)\n }\n\n switch (availability) {\n case 'AVAILABLE':\n return (\n <>\n <div\n className={classnames('wc-availability', isChatOpen && 'wc-open')}\n ref={buttonRef}\n >\n <div className='wc-availability__inner'>\n <a\n id='webchat-start-chat-link'\n className='wc-availability__link'\n href='#webchat'\n draggable='false'\n onClick={onClick}\n onKeyUp={onKeyUp}\n onKeyDown={onKeyDown}\n role='button'\n data-module='govuk-button'\n >\n {TextComponent}\n {unseenCount > 0 && !isChatOpen ? <span className='wc-availability__unseen'>{unseenCount}</span> : null}\n </a>\n </div>\n </div>\n {isChatOpen && <Panel />}\n <SkipLink />\n </>\n )\n case 'EXISTING':\n case 'UNAVAILABLE':\n return (\n <p className='govuk-body'>When it is available, a 'start chat' link will appear.</p>\n )\n default:\n return (\n <p className='govuk-body'>Checking availability</p>\n )\n }\n}\n","import React, { useEffect, useRef, useState } from 'react'\n\nimport { PanelHeader } from '../panel/panel-header.jsx'\nimport { PanelFooter } from '../panel/panel-footer.jsx'\nimport { Message } from '../message/message.jsx'\n\nimport { useApp } from '../../store/useApp.js'\nimport { useTextareaAutosize } from '../../hooks/useTextareaAutosize.js'\nimport { formatTranscript } from '../../lib/transform-messages.js'\n\nexport function Chat ({ onEndChatScreen, onSettingsScreen }) {\n const { availability, thread, messages, agent, agentStatus, isAgentTyping, settings, isKeyboard } = useApp()\n\n const [userMessage, setUserMessage] = useState('')\n const [focusVisibleWithin, setFocusVisibleWithin] = useState(false)\n\n const messageRef = useRef()\n\n useTextareaAutosize(messageRef.current, userMessage)\n\n useEffect(() => {\n if (settings.scroll && messages.length !== 0) {\n const chatBody = document.querySelector('.wc-body')\n chatBody.scrollTop = chatBody.scrollHeight\n }\n }, [messages, isAgentTyping])\n\n useEffect(() => {\n const label = document.querySelector('.wc-form__label')\n\n if (userMessage.length === 0) {\n label.classList.remove('govuk-visually-hidden')\n } else {\n label.classList.add('govuk-visually-hidden')\n }\n }, [userMessage])\n\n const onChange = e => {\n setUserMessage(e.target?.value)\n }\n\n const agentName = agent?.nickname || agent?.firstName\n\n let connectionHeadlineText = 'Connecting to Floodline'\n\n if (agentStatus === 'closed') {\n connectionHeadlineText = agentName ? `${agentName} ended the session` : 'Session ended by advisor'\n } else if (agentStatus) {\n if (agentName) {\n connectionHeadlineText = `You are speaking with ${agentName}`\n } else {\n connectionHeadlineText = 'No advisers currently available'\n }\n }\n\n if (availability === 'UNAVAILABLE') {\n connectionHeadlineText = 'Webchat is not currently available'\n }\n\n const sendMessage = () => {\n if (messageRef.current.value.length === 0) {\n return\n }\n\n try {\n thread.sendTextMessage(messageRef.current.value.trim())\n } catch (err) {\n console.log('[Chat Error] sendMessage', err)\n }\n\n setUserMessage('')\n }\n const handleKeyPress = e => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n sendMessage()\n }\n }\n\n const handleSubmit = e => {\n e.preventDefault()\n sendMessage()\n }\n\n const saveChat = () => {\n const transcript = formatTranscript(messages)\n\n const saveChatLink = document.querySelector('#transcript-download')\n\n saveChatLink.setAttribute('href', `data:text/plain;charset=utf-8,${transcript}`)\n }\n\n return (\n <>\n <PanelHeader />\n\n <div className='wc-status'>\n <p className='wc-status__availability'>{connectionHeadlineText}</p>\n <a className='wc-status__link' href='#' role='button' data-module='govuk-button' onClick={onEndChatScreen}>End chat</a>\n </div>\n\n <div className='wc-body' tabIndex='0'>\n <ul className='wc-chat'>\n {messages.length\n ? messages.map((msg, index) => <Message key={msg.id} message={msg} previousMessage={messages[index - 1]} />)\n : null}\n {isAgentTyping\n ? (\n <li className='wc-chat__message outbound'>\n <div className='wc-chat__from'>{agentName} is typing</div>\n <div className='wc-chat__text outbound'>\n <svg width='28' height='16' x='0px' y='0px' viewBox='0 0 28 16'>\n <circle stroke='none' cx='3' cy='8' r='3' fill='currentColor' />\n <circle stroke='none' cx='14' cy='8' r='3' fill='currentColor' />\n <circle stroke='none' cx='25' cy='8' r='3' fill='currentColor' />\n </svg>\n </div>\n </li>\n )\n : null}\n </ul>\n </div>\n\n <PanelFooter>\n <form className={`wc-form${focusVisibleWithin ? ' wc-focus-within' : ''}`} noValidate onSubmit={handleSubmit}>\n <label className='govuk-label wc-form__label' htmlFor='wc-form-textarea'>\n Your message<span className='govuk-visually-hidden'> (enter key submits)</span>\n </label>\n\n <textarea\n ref={messageRef}\n rows='1'\n aria-required='true'\n className='wc-form__textarea'\n id='wc-form-textarea'\n name='message'\n onChange={onChange}\n onKeyDown={handleKeyPress}\n onFocus={() => { setFocusVisibleWithin(isKeyboard) }}\n onBlur={() => { setFocusVisibleWithin(false) }}\n value={userMessage}\n />\n\n <input\n type='submit'\n className='wc-form__button govuk-button'\n value='Send'\n data-prevent-double-click='true'\n />\n </form>\n\n <div className='wc-footer__settings'>\n <a\n href='#'\n id='wc-settings'\n className='wc-footer__settings-link'\n data-module='govuk-button'\n onClick={onSettingsScreen}\n >\n Settings\n </a>\n <a\n href='#'\n id='transcript-download'\n className='wc-footer__settings-link'\n data-module='govuk-button'\n download='floodline-webchat-transcript.txt'\n onClick={saveChat}\n >\n Save chat\n </a>\n </div>\n </PanelFooter>\n </>\n )\n}\n","import React from 'react'\n\nexport const ErrorSummary = ({ errors }) => {\n const errs = Object.keys(errors)\n\n const goToInput = e => {\n e.preventDefault()\n const key = e.target.getAttribute('data-key')\n document.querySelector(`#wc-${key}`).focus()\n }\n\n if (errs.length === 0) {\n return null\n }\n\n return (\n <div className='govuk-error-summary govuk-!-static-margin-bottom-7' data-module='govuk-error-summary' tabIndex='-1'>\n <div role='alert'>\n <h2 id='wc-error' className='wc-error-summary__title govuk-error-summary__title'>\n There is a problem\n </h2>\n <div className='govuk-error-summary__body'>\n <ul className='govuk-list govuk-error-summary__list wc-error-summary__list'>\n {errs.map(key => (\n <li key={key}>\n <a href='#' data-key={key} onClick={goToInput}>{errors[key]}</a>\n </li>\n ))}\n </ul>\n </div>\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport { classnames } from '../../lib/classnames'\n\nexport function Message ({ message, previousMessage }) {\n const outbound = message.direction === 'outbound'\n\n const messageOwnerSameAsPrevious = message?.direction === previousMessage?.direction\n\n return (\n <li className={classnames('wc-chat__message', outbound ? 'outbound' : 'inbound')}>\n <div className='wc-chat__from'>\n {messageOwnerSameAsPrevious ? null : <span>{outbound ? message.assignee : 'You'}</span>}\n <span className='govuk-visually-hidden'>:</span>\n </div>\n <div className={classnames('wc-chat__text', outbound ? 'outbound' : 'inbound')}>\n {message.text}\n </div>\n </li>\n )\n}\n","import React from 'react'\n\nexport function PanelFooter ({ children }) {\n return (\n <div className='wc-footer'>\n {children}\n </div>\n )\n}\n","import React from 'react'\nimport { useApp } from '../../store/useApp.js'\nimport { historyReplaceState } from '../../lib/history.js'\n\nexport function PanelHeader () {\n const { thread, threadId, setChatVisibility, setUnseenCount, isMobile } = useApp()\n\n const onClose = e => {\n e.preventDefault()\n setChatVisibility(false)\n historyReplaceState()\n\n if (threadId) {\n thread?.lastMessageSeen()\n setUnseenCount(0)\n }\n }\n\n const BackButtonComponent = (\n <button className='wc-header__back' aria-label='Close the webchat' onClick={onClose}>\n <svg aria-hidden='true' focusable='false' width='20' height='20' viewBox='0 0 20 20'>\n <path d='M4.828,11L12.314,18.485L10.899,19.899L1,10L10.899,0.101L12.314,1.515L4.828,9L19,9L19,11L4.828,11Z' fill='currentColor' />\n </svg>\n </button>\n )\n\n const CloseButtonComponent = (\n <button className='wc-header__close' aria-label='Close the webchat' onClick={onClose}>\n <svg aria-hidden='true' focusable='false' width='20' height='20' viewBox='0 0 20 20'>\n <path d='M10,8.6L15.6,3L17,4.4L11.4,10L17,15.6L15.6,17L10,11.4L4.4,17L3,15.6L8.6,10L3,4.4L4.4,3L10,8.6Z' fill='currentColor' />\n </svg>\n </button>\n )\n\n const MinimiseButtonComponent = (\n <button className='wc-header__hide' aria-label='Minimise the webchat' onClick={onClose}>\n <svg aria-hidden='true' focusable='false' width='20' height='20' viewBox='0 0 20 20'>\n <path d='M10 14.4l-7-7L4.4 6l5.6 5.6L15.6 6 17 7.4l-7 7z' fill='currentColor' />\n </svg>\n </button>\n )\n\n const isMobileAndHasHistory = isMobile && window.history.state\n const isMobileAndNoHistory = isMobile && !window.history.state\n\n let RightButtonComponent = CloseButtonComponent\n\n if (thread) {\n RightButtonComponent = MinimiseButtonComponent\n\n if (isMobileAndNoHistory) {\n RightButtonComponent = MinimiseButtonComponent\n }\n }\n\n if (!thread && isMobileAndNoHistory) {\n RightButtonComponent = CloseButtonComponent\n }\n\n if (isMobileAndHasHistory) {\n RightButtonComponent = null\n }\n\n return (\n <div className='wc-header'>\n {isMobileAndHasHistory ? BackButtonComponent : null}\n\n <h2 id='wc-header-title' className='wc-header__title'>\n Floodline Webchat\n </h2>\n\n {RightButtonComponent}\n </div>\n )\n}\n","import React, { useEffect, useState, useCallback } from 'react'\nimport { createPortal } from 'react-dom'\nimport { classnames } from '../../lib/classnames.js'\n\nimport { PreChat } from '../screens/pre-chat.jsx'\nimport { RequestChat } from '../screens/request-chat.jsx'\nimport { Chat } from '../chat/chat.jsx'\nimport { Unavailable } from '../screens/unavailable.jsx'\nimport { EndChat } from '../screens/end-chat.jsx'\nimport { Settings } from '../screens/settings.jsx'\nimport { Feedback } from '../screens/feedback.jsx'\n\nimport { useApp } from '../../store/useApp.js'\nimport { useChatSdk } from '../../store/useChatSdk.js'\nimport { useFocusedElements } from '../../hooks/useFocusedElements.js'\nimport { historyReplaceState } from '../../lib/history.js'\n\nexport function Panel () {\n const { sdk, availability, instigatorId, thread, threadId, setThread, setThreadId, setChatVisibility, setMessages, setUnseenCount, isMobile, isKeyboard } = useApp()\n const { fetchThread, fetchMessages } = useChatSdk(sdk)\n\n const [screen, setScreen] = useState(threadId ? 2 : 0)\n\n useFocusedElements(screen)\n\n const onEscapeKey = useCallback(e => {\n if (e.key === 'Escape' || e.key === 'Esc') {\n if (threadId) {\n thread?.lastMessageSeen()\n setUnseenCount(0)\n }\n setChatVisibility(false)\n historyReplaceState()\n document.getElementById(instigatorId)?.focus()\n }\n }, [thread, threadId, setUnseenCount, setChatVisibility])\n\n /**\n * We need ammend classes on the body element to handle mobile behaviour\n */\n useEffect(() => {\n document.body.classList.remove('wc-u-hidden')\n document.getElementsByTagName('html')[0].classList.add('wc-u-html')\n document.body.classList.add('wc-u-body')\n return () => {\n document.getElementsByTagName('html')[0].classList.remove('wc-u-html')\n document.body.classList.remove('wc-u-body')\n }\n }, [isMobile])\n\n /**\n * Initializes the eventListener for pressing the escape key\n */\n useEffect(() => {\n document.addEventListener('keydown', onEscapeKey)\n\n return () => {\n document.removeEventListener('keydown', onEscapeKey)\n }\n }, [onEscapeKey, setChatVisibility])\n\n /**\n * Recovers the thread if there is a threadId but no thread loaded in to state\n */\n useEffect(() => {\n const recover = async () => {\n try {\n const fetchedThread = await fetchThread(threadId)\n setThread(fetchedThread)\n\n const fetchedMessages = await fetchMessages(fetchedThread, threadId)\n setMessages(fetchedMessages)\n } catch (err) {\n console.log('[Chat Error] fetchThread', err)\n\n setThreadId()\n setThread()\n setScreen(0)\n }\n }\n\n if (threadId) {\n if (thread) {\n thread.lastMessageSeen()\n setUnseenCount(0)\n setScreen(2)\n } else {\n recover()\n }\n }\n }, [thread, threadId])\n\n const handleScreenChange = newScreen => e => {\n e.preventDefault()\n setScreen(newScreen)\n }\n\n const goToPreChatScreen = handleScreenChange(0)\n const goToRequestChatScreen = handleScreenChange(1)\n const goToChatScreen = handleScreenChange(2)\n const goToEndChatScreen = handleScreenChange(3)\n const goToFeedbackScreen = handleScreenChange(4)\n const goToSettingsScreen = handleScreenChange(5)\n\n let ScreenComponent\n\n switch (screen) {\n case 0:\n ScreenComponent = <PreChat onContinue={goToRequestChatScreen} />\n break\n case 1:\n ScreenComponent = <RequestChat onPreChatScreen={goToPreChatScreen} />\n break\n case 2:\n ScreenComponent = <Chat onSettingsScreen={goToSettingsScreen} onEndChatScreen={goToEndChatScreen} />\n break\n case 3:\n ScreenComponent = <EndChat onChatScreen={goToChatScreen} onEndChatConfirm={goToFeedbackScreen} />\n break\n case 4:\n ScreenComponent = <Feedback onCancel={() => setChatVisibility(false)} />\n break\n case 5:\n ScreenComponent = <Settings onCancel={goToChatScreen} />\n break\n default:\n ScreenComponent = <PreChat onContinue={goToRequestChatScreen} />\n }\n\n if (availability === 'UNAVAILABLE') {\n ScreenComponent = <Unavailable />\n }\n\n const Component = (\n <div id='wc-panel' role='dialog' className={classnames('wc-panel', isKeyboard && 'wc-focus-visible')} tabIndex='-1' aria-modal='true' aria-labelledby='wc-header-title'>\n <div className='wc-panel__inner'>\n {ScreenComponent}\n </div>\n </div>\n )\n\n return (\n <>\n {createPortal(Component, document.body)}\n </>\n )\n}\n","import React, { useEffect } from 'react'\nimport { PanelHeader } from '../panel/panel-header.jsx'\nimport { useApp } from '../../store/useApp.js'\n\nexport function EndChat ({ onChatScreen, onEndChatConfirm }) {\n const { setCustomerId, setThreadId, setMessages, agentStatus, thread, setUnseenCount, isKeyboard } = useApp()\n\n const confirmEndChat = async e => {\n e.preventDefault()\n\n setThreadId()\n setMessages([])\n setCustomerId()\n thread.lastMessageSeen()\n setUnseenCount(0)\n\n // End chat if still open\n if (agentStatus !== 'closed') {\n thread.endChat()\n }\n\n onEndChatConfirm(e)\n }\n\n useEffect(() => {\n if (isKeyboard) {\n setTimeout(() => {\n document.querySelector('#confirmEndChat').focus()\n }, 10)\n }\n }, [])\n\n return (\n <>\n <PanelHeader />\n <div className='wc-body'>\n <div className='wc-content'>\n <h3 className='wc-heading' aria-live='polite'>Are you sure you want to end the chat?</h3>\n <div className='govuk-button-group'>\n <a href='#endChat' role='button' className='wc-button govuk-button' data-module='govuk-button' id='confirmEndChat' onClick={confirmEndChat}>Yes, end chat</a>\n <a href='#resumeChat' role='button' className='wc-link govuk-link' data-module='govuk-button' onClick={onChatScreen}>No, resume chat</a>\n </div>\n </div>\n </div>\n </>\n )\n}\n","import React from 'react'\nimport { PanelHeader } from '../panel/panel-header.jsx'\n\nexport function Feedback ({ onCancel }) {\n const feedbackCancel = async e => {\n onCancel(e)\n }\n\n return (\n <>\n <PanelHeader />\n\n <div className='wc-body'>\n <div className='wc-content'>\n <h3 id='wc-subtitle' className='wc-heading'>Give Feedback on Floodline webchat</h3>\n <p>Please note we’re unable to respond to feedback.</p>\n <p><a className='govuk-link' href='#' target='_blank' rel='noreferrer' role='button' data-module='govuk-button'>Feedback Link</a></p>\n <p><a id='feedback-cancel' className='wc-link govuk-link' href='#' data-module='govuk-button' role='button' onClick={feedbackCancel}>Close</a></p>\n </div>\n </div>\n </>\n )\n}\n","import React from 'react'\nimport { PanelHeader } from '../panel/panel-header.jsx'\n\nexport function PreChat ({ onContinue }) {\n return (\n <>\n <PanelHeader />\n\n <div className='wc-body'>\n <div className='wc-content'>\n <h3 className='wc-heading' aria-live='polite'>What you can use webchat for</h3>\n <p>Webchat lets you talk directly to a Floodline adviser.</p>\n\n <p>You can use webchat to get:</p>\n <ul className='wc-list'>\n <li>current flood warnings and alerts in your area</li>\n <li>information on the flood warning service</li>\n <li>advice on what to do before, during and after a flood</li>\n </ul>\n <p>\n There are other ways to&nbsp;\n <a className='govuk-link' href='https://www.gov.uk/sign-up-for-flood-warnings' target='_blank' rel='noreferrer'>\n sign up for flood warnings\n </a>\n &nbsp;and&nbsp;\n <a className='govuk-link' href='https://www.fws.environment-agency.gov.uk/app/olr/login' target='_blank' rel='noreferrer'>\n manage your flood warnings account\n </a>.\n </p>\n <p>\n Do not use webchat to&nbsp;\n <a\n className='govuk-link'\n href='https://www.gov.uk/report-flood-cause'\n target='_blank'\n rel='noreferrer'\n >\n report a flood\n </a>.\n </p>\n\n <button className='govuk-button wc-button govuk-!-margin-top-1' data-module='govuk-button' onClick={onContinue}>Continue</button>\n\n <h3 className='wc-heading'>Other flood information</h3>\n\n <p>Call Floodline for all other flood and flood warning information.</p>\n <p>\n <strong>Floodline helpline</strong>\n <br />\n Telephone: 0345 988 1188\n <br />\n Textphone: 0345 602 6340\n <br />\n Open 24 hours a day, 7 days a week\n <br />\n <a className='govuk-link' href='https://gov.uk/call-charges' target='_blank' rel='noreferrer'>Find out more about call charges</a>\n </p>\n </div>\n </div>\n </>\n )\n}\n","import React, { useRef, useState, useEffect } from 'react'\nimport * as uuid from 'uuid'\n\nimport { classnames } from '../../lib/classnames.js'\nimport { PanelHeader } from '../panel/panel-header.jsx'\nimport { useApp } from '../../store/useApp.js'\nimport { useChatSdk } from '../../store/useChatSdk.js'\nimport { ErrorSummary } from '../errorSummary/error-summary.jsx'\n\nconst QUESTION_MAX_LENGTH = 500\n\nexport function RequestChat ({ onPreChatScreen }) {\n const { sdk, setCustomerId, setThreadId, setThread } = useApp()\n const { fetchCustomerId, fetchThread } = useChatSdk(sdk)\n const [errors, setErrors] = useState({})\n const [questionLength, setQuestionLength] = useState(0)\n const [isButtonDisabled, setButtonDisabled] = useState(false)\n\n const nameRef = useRef()\n const questionRef = useRef()\n\n const isQuestionLengthValid = QUESTION_MAX_LENGTH >= questionLength\n const questionLengthRemaining = QUESTION_MAX_LENGTH - questionLength\n const questionLengthExceeded = questionLength - QUESTION_MAX_LENGTH\n\n let questionHint = `You have ${questionLengthRemaining} characters remaining`\n\n if (!isQuestionLengthValid) {\n questionHint = `You have ${questionLengthExceeded} characters too many`\n }\n\n useEffect(() => {\n if (Object.keys(errors).length) {\n document.querySelector('.govuk-error-summary')?.focus()\n }\n }, [errors])\n\n const onQuestionChange = e => {\n setQuestionLength(e.target.value.length)\n }\n\n const buttonLabel = isButtonDisabled ? 'Requesting...' : 'Request Chat'\n\n const onRequestChat = async e => {\n e.preventDefault()\n\n const errs = {}\n\n if (nameRef.current.value.length === 0) {\n errs.name = 'Enter your name'\n }\n\n if (questionRef.current.value.length === 0) {\n errs.question = 'Enter your question'\n }\n\n if (questionRef.current.value.length > QUESTION_MAX_LENGTH) {\n errs.question = 'Your question must be 500 characters or less'\n }\n\n if (Object.keys(errs).length === 0) {\n try {\n setButtonDisabled(true)\n const threadId = uuid.v4()\n const customerId = await fetchCustomerId()\n const thread = await fetchThread(threadId)\n\n sdk.getCustomer().setName(nameRef.current.value)\n\n await thread.startChat(questionRef.current.value || 'Begin conversation')\n\n setCustomerId(customerId)\n setThreadId(threadId)\n setThread(thread)\n thread.setCustomField('threadid', threadId)\n } catch (err) {\n console.log('[Request Chat Error]', err)\n }\n }\n\n setErrors(errs)\n }\n\n return (\n <>\n <PanelHeader />\n\n <div className='wc-body'>\n <div className='wc-content'>\n <a href='#' className='wc-back-link govuk-back-link' onClick={onPreChatScreen}>\n What you can use webchat for\n </a>\n\n <ErrorSummary errors={errors} />\n\n <h3 className='wc-heading' aria-live='polite'>\n Your name and question\n </h3>\n\n <form>\n <div className={classnames('wc-form-group', 'govuk-form-group', errors.name && 'govuk-form-group--error')}>\n <label className='wc-label govuk-label' htmlFor='wc-name'>\n Your name\n </label>\n {errors.name && (\n <p className='govuk-error-message'>\n <span className='govuk-visually-hidden'>Error:</span> {errors.name}\n </p>\n )}\n <input\n ref={nameRef}\n className={classnames('wc-input', 'govuk-input', errors.name && 'govuk-input--error')}\n id='wc-name'\n name='name'\n type='text'\n data-testid='request-chat-user-name'\n />\n </div>\n\n <div className='wc-form-group govuk-character-count' data-module='govuk-character-count' data-maxlength='500'>\n <div className={classnames('govuk-form-group', errors.question && 'govuk-form-group--error')}>\n <label className='wc-label govuk-label' htmlFor='wc-question'>\n Your question\n </label>\n {errors.question && (\n <p className='govuk-error-message'>\n <span className='govuk-visually-hidden'>Error:</span>\n {errors.question}\n </p>\n )}\n <textarea\n ref={questionRef}\n id='wc-question'\n name='question'\n rows='5'\n aria-describedby='wc-question-info'\n onChange={onQuestionChange}\n className={classnames('wc-textarea', 'govuk-textarea', 'govuk-js-character-count', !isQuestionLengthValid || errors.question ? 'govuk-textarea--error' : '')}\n data-testid='request-chat-user-question'\n />\n <div\n id='wc-question-info'\n className='wc-hint govuk-hint govuk-char-count__msg'\n style={{ color: `${!isQuestionLengthValid ? '#d4351c' : ''}` }}\n aria-hidden='true'\n >\n {questionHint}\n </div>\n <div className='govuk-character-count__sr-status govuk-visually-hidden' aria-live='polite'>\n {questionHint}\n </div>\n </div>\n </div>\n\n <div className='wc-inset-text govuk-inset-text'>\n By selecting 'Request chat' you agree to the terms of our&nbsp;\n <a href='https://check-for-flooding.service.gov.uk/privacy-notice' target='_blank' rel='noreferrer' className='govuk-link'>privacy notice</a>.\n </div>\n\n <button\n className='wc-button govuk-button govuk-!-margin-top-1'\n data-module='govuk-button'\n onClick={onRequestChat}\n disabled={isButtonDisabled}\n >\n {buttonLabel}\n </button>\n </form>\n </div>\n </div>\n </>\n )\n}\n","import React, { useState } from 'react'\nimport { PanelHeader } from '../panel/panel-header.jsx'\n\nimport { useApp } from '../../store/useApp.js'\n\nexport function Settings ({ onCancel }) {\n const { settings, setSettings } = useApp()\n\n const [optionAudio, setOptionAudio] = useState(settings.audio)\n const [optionScroll, setOptionScroll] = useState(settings.scroll)\n\n const onSave = e => {\n e.preventDefault()\n\n setSettings({ audio: optionAudio, scroll: optionScroll })\n onCancel(e)\n }\n\n return (\n <>\n <PanelHeader />\n\n <div className='wc-body'>\n <div className='wc-content'>\n <fieldset className='govuk-fieldset govuk-!-margin-bottom-4'>\n <legend className='govuk-fieldset__legend govuk-fieldset__legend'>\n <h3 id='wc-subtitle' className='wc-heading'>Change settings</h3>\n </legend>\n <div className='govuk-checkboxes govuk-checkboxes--small' data-module='govuk-checkboxes'>\n <div className='govuk-checkboxes__item'>\n <input\n id='audio'\n name='audio'\n type='checkbox'\n value='audio'\n className='govuk-checkboxes__input'\n defaultChecked={optionAudio}\n onChange={() => setOptionAudio(!optionAudio)}\n />\n <label className='wc-label govuk-label govuk-checkboxes__label' htmlFor='audio'>\n Play a sound when receiving a new message\n </label>\n </div>\n <div className='govuk-checkboxes__item'>\n <input\n id='scroll'\n name='scroll'\n type='checkbox'\n value='scroll'\n className='govuk-checkboxes__input'\n defaultChecked={optionScroll}\n onChange={() => setOptionScroll(!optionScroll)}\n />\n <label className='wc-label govuk-label govuk-checkboxes__label' htmlFor='scroll'>\n Scroll automatically to a new message\n </label>\n </div>\n </div>\n </fieldset>\n\n <div className='govuk-button-group'>\n <a id='settings-save' href='#' className='wc-button govuk-button' data-module='govuk-button' role='button' onClick={onSave}>Save</a>\n <a id='settings-cancel' href='#' className='wc-link govuk-link' data-module='govuk-button' role='button' onClick={onCancel}>Cancel</a>\n </div>\n </div>\n </div>\n </>\n )\n}\n","import React from 'react'\nimport { PanelHeader } from '../panel/panel-header.jsx'\n\nexport function Unavailable () {\n return (\n <>\n <PanelHeader />\n\n <div className='wc-body'>\n <h3 id='wc-subtitle' className='govuk-heading-m'>Webchat is currently not available</h3>\n <p className='govuk-body-s'>Try again later, or call Floodline:</p>\n <p className='govuk-body-s'>\n <strong>Floodline helpline</strong>\n <br />Telephone: 0345 988 1188\n <br />Textphone: 0345 602 6340\n <br />Open 24 hours a day, 7 days a week\n <br /><a className='govuk-link' href='https://gov.uk/call-charges'>Find out more about call charges</a>\n </p>\n <p className='govuk-body-s'>We're running webchat as a trial, it will not always be available.</p>\n </div>\n </>\n )\n}\n","import React from 'react'\nimport { createPortal } from 'react-dom'\nimport { useApp } from '../store/useApp'\n\nexport const SkipLink = () => {\n const { thread, setInstigatorId } = useApp()\n\n if (!thread) {\n return null\n }\n\n const targetContainer = document.getElementById('skip-links')\n\n if (!targetContainer) {\n return null\n }\n\n const onClick = e => {\n e.preventDefault()\n setInstigatorId(e.target.id)\n window.location.hash = '#webchat'\n }\n\n return (\n <>\n {createPortal(\n <a\n id='webchat-skip-link'\n href='#webchat'\n className='govuk-skip-link'\n data-module='govuk-skip-link'\n onClick={onClick}\n data-wc-skiplink\n data-wc-open-btn\n >\n Skip to webchat\n </a>,\n targetContainer\n )}\n </>\n )\n}\n","import { useState, useEffect, useCallback } from 'react'\n\nconst ariaHidden = 'aria-hidden'\nconst dataWcInert = 'data-wc-inert'\n\nconst setAriaHidden = isInert => {\n for (const node of document.body.children) {\n if (node.id !== 'wc-panel') {\n // We only want to toggle elements that aren't already inert\n if (isInert && !node.getAttribute(ariaHidden)) {\n node.setAttribute(ariaHidden, 'true')\n node.setAttribute(dataWcInert, '')\n } else if (node.hasAttribute(dataWcInert)) {\n node.removeAttribute(ariaHidden)\n node.removeAttribute(dataWcInert)\n }\n }\n }\n}\n\nexport const getFocusableElements = () => {\n const selectors = [\n '#wc-panel a:not([disabled])',\n '#wc-panel button:not([disabled])',\n '#wc-panel select:not([disabled])',\n '#wc-panel input:not([disabled])',\n '#wc-panel textarea:not([disabled])',\n '#wc-panel *[tabindex=\"0\"]:not([disabled])'\n ]\n\n const elements = document.body.querySelectorAll(selectors.join(','))\n return Array.from(elements).filter(e => !e.closest('[hidden]') && !e.closest('[aria-hidden=\"true\"]'))\n}\n\nconst useFocusedElements = screen => {\n const [panelElements, setPanelElements] = useState([])\n\n const onKeyDown = useCallback(e => {\n const webchatPanelElement = document.querySelector('#wc-panel')\n\n if (e.key === 'Tab') {\n if (webchatPanelElement && !document.activeElement.closest('#wc-panel')) {\n webchatPanelElement.focus()\n }\n\n if (e.shiftKey) {\n if (document.activeElement === panelElements[0]) {\n panelElements[panelElements.length - 1].focus()\n e.preventDefault()\n } else if (document.activeElement === document.querySelector('#wc-panel')) {\n panelElements[panelElements.length - 1]?.focus()\n e.preventDefault()\n }\n } else if (document.activeElement === panelElements[panelElements.length - 1]) {\n panelElements[0].focus()\n e.preventDefault()\n }\n }\n }, [panelElements])\n\n useEffect(() => {\n setPanelElements(getFocusableElements())\n }, [screen])\n\n useEffect(() => {\n setAriaHidden(true)\n\n const panelElement = document.querySelector('#wc-panel')\n panelElement.focus()\n\n document.addEventListener('keydown', onKeyDown)\n\n return () => {\n setAriaHidden()\n document.removeEventListener('keydown', onKeyDown)\n }\n }, [panelElements])\n}\n\nexport { useFocusedElements }\n","import { useEffect } from 'react'\n\nexport const useTextareaAutosize = (textAreaRef, value) => {\n useEffect(() => {\n if (textAreaRef) {\n textAreaRef.style.height = '0px'\n\n const scrollHeight = textAreaRef.scrollHeight\n\n textAreaRef.style.height = `${scrollHeight}px`\n }\n }, [textAreaRef, value])\n}\n","export async function checkAvailability (endpoint) {\n const response = await fetch(endpoint)\n const data = await response.json()\n\n return {\n availability: data.availability || 'UNAVAILABLE'\n }\n}\n","export const classnames = (...classes) => classes.filter(classname => classname && typeof classname === 'string').join(' ')\n","export const historyPushState = () => {\n const url = window.location.href.split('#')[0]\n window.history.pushState({ history: true }, null, `${url}#webchat`)\n}\n\nexport const historyReplaceState = () => {\n if (window.history.state?.history) {\n return window.history.back()\n }\n\n const url = window.location.href.split('#')[0]\n return window.history.replaceState(null, null, url)\n}\n","export const messageNotification = audioUrl => {\n let buffer\n\n const context = new (window.AudioContext || window.webkitAudioContext)()\n\n if (context.state === 'suspended') {\n const events = ['touchstart', 'touchend', 'mousedown', 'wheel', 'keydown', 'click']\n\n const unlock = _e => {\n events.forEach(event => {\n document.body.removeEventListener(event, unlock)\n })\n\n context.resume()\n }\n\n events.forEach(event => {\n document.body.addEventListener(event, unlock, false)\n })\n }\n\n fetch(audioUrl)\n .then(response => response.arrayBuffer())\n .then(data => context.decodeAudioData(data))\n .then(decodedData => {\n buffer = decodedData\n })\n .catch(console.error)\n\n return () => {\n const source = context.createBufferSource()\n source.buffer = buffer\n source.connect(context.destination)\n source.start()\n }\n}\n","import { DateTime } from 'luxon'\n\nexport const transformMessage = message => {\n return {\n id: message.id,\n text: message.messageContent?.text,\n createdAt: new Date(message.createdAt),\n user: message.authorEndUserIdentity?.fullName?.trim() || null,\n assignee: message.authorUser?.firstName || null,\n direction: message.direction\n }\n}\n\nexport const transformMessages = messages => messages.map(message => transformMessage(message))\n\nexport const formatTranscript = messages => {\n const now = DateTime.local()\n now.setZone('Europe/London')\n\n let string = `Floodline webchat transcript, ${now.toFormat('HH:mm:ss a, dd LLLL yyyy')}\\n\\n`\n\n for (const message of messages) {\n const { text, direction, user, assignee, createdAt } = message\n\n const author = direction === 'inbound' ? user : `${assignee} (Floodline adviser)`\n const date = DateTime.fromJSDate(new Date(createdAt)).setZone('Europe/London').toFormat('HH:mm:ss a, dd LLLL yyyy')\n\n string += `[${date}] ${author}: \\n${text}\\n\\n`\n }\n\n string = string.replace(/<a\\b[^>]*>/i, '').replace(/<\\/a>/i, '')\n\n return encodeURIComponent(string)\n}\n","import React, { createContext, useEffect, useReducer, useMemo } from 'react'\nimport { ChatEvent } from '@nice-devone/nice-cxone-chat-web-sdk'\n\nimport { messageNotification } from '../lib/message-notification.js'\n\nimport { initialState, reducer } from './reducer.js'\nimport { CUSTOMER_ID_STORAGE_KEY, THREAD_ID_STORAGE_KEY, SETTINGS_STORAGE_KEY } from './constants.js'\n\nexport const AppContext = createContext(initialState)\n\nexport const AppProvider = ({ sdk, availability, options, children }) => {\n const [state, dispatch] = useReducer(reducer, initialState)\n\n const playSound = messageNotification(options.audioUrl)\n\n /**\n * SDK event handlers\n */\n const onLiveChatRecovered = e => {\n dispatch({ type: 'SET_AGENT', payload: e.detail.data.inboxAssignee })\n dispatch({ type: 'SET_AGENT_STATUS', payload: e.detail.data.contact.status })\n dispatch({ type: 'SET_UNSEEN_COUNT', payload: e.detail.data.contact.customerStatistics.unseenMessagesCount })\n }\n\n const onAssignedAgentChanged = e => {\n dispatch({ type: 'SET_AGENT', payload: e.detail.data.inboxAssignee })\n dispatch({ type: 'SET_AGENT_STATUS', payload: e.detail.data.case.status })\n }\n\n const onAgentTypingStarted = () => {\n dispatch({ type: 'SET_AGENT_TYPING', payload: true })\n }\n\n const onAgentTypingEnded = () => {\n dispatch({ type: 'SET_AGENT_TYPING', payload: false })\n }\n\n const onMessageCreated = e => {\n dispatch({ type: 'SET_MESSAGE', payload: e.detail.data.message })\n dispatch({ type: 'SET_AGENT_STATUS', payload: e.detail.data.case.status })\n dispatch({ type: 'SET_UNSEEN_COUNT', payload: e.detail.data.case.customerStatistics.unseenMessagesCount })\n\n const isAudioOn = JSON.parse(window.localStorage.getItem(SETTINGS_STORAGE_KEY)).audio\n\n if (isAudioOn && e.detail.data.message.direction === 'outbound') {\n playSound()\n }\n }\n\n const onContactStatusChanged = e => {\n dispatch({ type: 'SET_AGENT_STATUS', payload: e.detail.data.case.status })\n }\n\n const onMatchMedia = e => {\n dispatch({ type: 'TOGGLE_IS_MOBILE', payload: e.matches })\n }\n\n const onKeydown = () => {\n dispatch({ type: 'TOGGLE_IS_KEYBOARD', payload: true })\n }\n\n const onPointerdown = () => {\n dispatch({ type: 'TOGGLE_IS_KEYBOARD', payload: false })\n }\n\n useEffect(() => {\n sdk.onChatEvent(ChatEvent.LIVECHAT_RECOVERED, onLiveChatRecovered)\n sdk.onChatEvent(ChatEvent.MESSAGE_CREATED, onMessageCreated)\n sdk.onChatEvent(ChatEvent.AGENT_TYPING_STARTED, onAgentTypingStarted)\n sdk.onChatEvent(ChatEvent.AGENT_TYPING_ENDED, onAgentTypingEnded)\n sdk.onChatEvent(ChatEvent.ASSIGNED_AGENT_CHANGED, onAssignedAgentChanged)\n sdk.onChatEvent(ChatEvent.CONTACT_STATUS_CHANGED, onContactStatusChanged)\n // We need to know if it is a mobile and if it is a keyboard interaction\n window.matchMedia('(max-width: 640px)').addEventListener('change', onMatchMedia)\n window.addEventListener('keydown', onKeydown)\n window.addEventListener('pointerdown', onPointerdown)\n // Tidying up\n return () => {\n window.removeEventListener('change', onMatchMedia)\n window.removeEventListener('keydown', onKeydown)\n window.removeEventListener('pointerdown', onPointerdown)\n }\n }, [sdk])\n\n /**\n * Initialize customerId, threadId and whether the webchat should be open\n */\n useEffect(() => {\n dispatch({ type: 'SET_AVAILABILITY', payload: availability })\n\n setCustomerId(window.localStorage.getItem(CUSTOMER_ID_STORAGE_KEY))\n setThreadId(window.localStorage.getItem(THREAD_ID_STORAGE_KEY))\n setSettings(JSON.parse(window.localStorage.getItem(SETTINGS_STORAGE_KEY)) || state.settings)\n }, [])\n\n /**\n * Set browser history on start chat click\n */\n useEffect(() => {\n if (window.location.hash === '#webchat') {\n setChatVisibility(true)\n }\n\n const onBrowserNavigation = window.addEventListener('popstate', () => {\n if (window.location.hash === '#webchat') {\n setChatVisibility(true)\n } else {\n setChatVisibility(false)\n }\n })\n\n return () => {\n window.removeEventListener('popstate', onBrowserNavigation)\n }\n }, [])\n\n /**\n * State update functions\n */\n const setChatVisibility = payload => {\n dispatch({ type: 'SET_CHAT_VISIBILITY', payload })\n }\n\n const setCustomerId = customerId => {\n dispatch({ type: 'SET_CUSTOMER_ID', payload: customerId })\n }\n\n const setThreadId = threadId => {\n dispatch({ type: 'SET_THREAD_ID', payload: threadId })\n }\n\n const setThread = thread => {\n dispatch({ type: 'SET_THREAD', payload: thread })\n }\n\n const setMessages = messages => {\n dispatch({ type: 'SET_MESSAGES', payload: messages })\n }\n\n const setSettings = data => {\n dispatch({ type: 'SET_SETTINGS', payload: data })\n }\n\n const setUnseenCount = unseenCount => {\n dispatch({ type: 'SET_UNSEEN_COUNT', payload: unseenCount })\n }\n\n const setInstigatorId = id => {\n dispatch({ type: 'SET_INSTIGATOR_ID', payload: id })\n }\n\n /**\n * Application-wide state and state functions\n */\n const store = useMemo(() => ({\n ...state,\n sdk,\n setSettings,\n setCustomerId,\n setThreadId,\n setThread,\n setMessages,\n setUnseenCount,\n setChatVisibility,\n setInstigatorId,\n onLiveChatRecovered,\n onAssignedAgentChanged,\n onAgentTypingStarted,\n onAgentTypingEnded,\n onMessageCreated,\n onContactStatusChanged\n }))\n\n return (\n <AppContext.Provider value={store}>\n {children}\n </AppContext.Provider>\n )\n}\n","import { transformMessages, transformMessage } from '../lib/transform-messages'\nimport { CUSTOMER_ID_STORAGE_KEY, THREAD_ID_STORAGE_KEY, SETTINGS_STORAGE_KEY } from './constants'\n\nconst setSettings = (state, payload) => {\n if (payload) {\n window.localStorage.setItem(SETTINGS_STORAGE_KEY, JSON.stringify(payload))\n } else {\n window.localStorage.removeItem(SETTINGS_STORAGE_KEY)\n }\n\n return {\n ...state,\n settings: payload\n }\n}\n\nconst setCustomerId = (state, payload) => {\n if (payload) {\n window.localStorage.setItem(CUSTOMER_ID_STORAGE_KEY, payload)\n } else {\n window.localStorage.removeItem(CUSTOMER_ID_STORAGE_KEY)\n }\n\n return {\n ...state,\n customerId: payload\n }\n}\n\nconst setThreadId = (state, payload) => {\n if (payload) {\n window.localStorage.setItem(THREAD_ID_STORAGE_KEY, payload)\n } else {\n window.localStorage.removeItem(THREAD_ID_STORAGE_KEY)\n }\n\n return {\n ...state,\n threadId: payload\n }\n}\n\nconst setChatVisibility = (state, payload) => {\n return {\n ...state,\n isChatOpen: payload\n }\n}\n\nconst setAvailability = (state, payload) => {\n return {\n ...state,\n availability: payload\n }\n}\n\nconst setThread = (state, payload) => {\n return {\n ...state,\n thread: payload\n }\n}\n\nconst setMessage = (state, payload) => {\n return {\n ...state,\n messages: [...state.messages, transformMessage(payload)]\n }\n}\n\nconst setMessages = (state, payload) => {\n return {\n ...state,\n messages: transformMessages(payload).reverse()\n }\n}\n\nconst setAgent = (state, payload) => {\n return {\n ...state,\n agent: payload\n }\n}\n\nconst setAgentIsTyping = (state, payload) => {\n return {\n ...state,\n isAgentTyping: payload\n }\n}\n\nconst setAgentStatus = (state, payload) => {\n return {\n ...state,\n agentStatus: payload\n }\n}\n\nconst setUnseenCount = (state, payload) => {\n return {\n ...state,\n unseenCount: payload\n }\n}\n\nconst setInstigatorId = (state, payload) => {\n return {\n ...state,\n instigatorId: payload\n }\n}\n\nconst toggleIsMobile = (state, payload) => {\n return {\n ...state,\n isMobile: payload\n }\n}\n\nconst toggleIsKeyboard = (state, payload) => {\n return {\n ...state,\n isKeyboard: payload\n }\n}\n\nexport const actionsMap = {\n SET_CHAT_VISIBILITY: setChatVisibility,\n SET_AVAILABILITY: setAvailability,\n SET_SETTINGS: setSettings,\n SET_CUSTOMER_ID: setCustomerId,\n SET_THREAD_ID: setThreadId,\n SET_THREAD: setThread,\n SET_MESSAGE: setMessage,\n SET_MESSAGES: setMessages,\n SET_AGENT: setAgent,\n SET_AGENT_TYPING: setAgentIsTyping,\n SET_AGENT_STATUS: setAgentStatus,\n SET_UNSEEN_COUNT: setUnseenCount,\n SET_INSTIGATOR_ID: setInstigatorId,\n TOGGLE_IS_MOBILE: toggleIsMobile,\n TOGGLE_IS_KEYBOARD: toggleIsKeyboard\n}\n","export const SETTINGS_STORAGE_KEY = 'webchat_settings'\nexport const CUSTOMER_ID_STORAGE_KEY = 'webchat_customer_id'\nexport const THREAD_ID_STORAGE_KEY = 'webchat_thread_id'\n","import { actionsMap } from './actions-map'\n\nexport const initialState = {\n availability: null,\n customerId: null,\n threadId: null,\n thread: null,\n messages: [],\n unseenCount: 0,\n instigatorId: null,\n agent: null,\n agentStatus: null,\n isAgentTyping: false,\n isChatOpen: false,\n isMobile: window.matchMedia('(max-width: 640px)').matches,\n isKeyboard: false,\n settings: { audio: true, scroll: true }\n}\n\nexport const reducer = (state, action) => {\n const { type, payload } = action\n\n const fn = actionsMap[type]\n\n if (fn) {\n const actionFunction = fn.bind(this, state, payload)\n return actionFunction()\n }\n\n return state\n}\n","import { useContext } from 'react'\n\nimport { AppContext } from './AppProvider.jsx'\n\nexport const useApp = () => useContext(AppContext)\n","export const useChatSdk = sdk => {\n const connect = async () => sdk.authorize()\n\n const fetchCustomerId = async () => {\n const response = await connect()\n return response?.consumerIdentity.idOnExternalPlatform\n }\n\n const fetchThread = async threadId => {\n await connect()\n return sdk.getThread(threadId)\n }\n\n const fetchMessages = async (thread, threadId) => {\n await connect()\n\n const recovered = await thread.recover(threadId)\n\n const allMessages = []\n let fetchedMessages = recovered.messages\n\n while (fetchedMessages.length) {\n fetchedMessages.map(msg => allMessages.push(msg))\n\n try {\n const response = await thread.loadMoreMessages()\n fetchedMessages = response.data.messages\n } catch (err) {\n fetchedMessages = []\n }\n }\n\n return allMessages\n }\n\n return { connect, fetchCustomerId, fetchThread, fetchMessages }\n}\n","module.exports = require(\"@nice-devone/nice-cxone-chat-web-sdk\");","module.exports = require(\"luxon\");","module.exports = require(\"react\");","module.exports = require(\"react-dom\");","module.exports = require(\"react-dom/client\");","module.exports = require(\"uuid\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import React from 'react'\nimport { createRoot } from 'react-dom/client'\nimport { ChatSdk } from '@nice-devone/nice-cxone-chat-web-sdk'\nimport { Availability } from './components/availability/availability.jsx'\nimport { checkAvailability } from './lib/check-availability'\nimport { AppProvider } from './store/AppProvider.jsx'\nimport { CUSTOMER_ID_STORAGE_KEY } from './store/constants.js'\n\nexport async function init (container, options) {\n const sdk = new ChatSdk({\n brandId: options.brandId,\n channelId: options.channelId,\n customerId: window.localStorage.getItem(CUSTOMER_ID_STORAGE_KEY) || '',\n environment: options.environment\n })\n\n const root = createRoot(container)\n let availability\n try {\n const result = await checkAvailability(options.availabilityEndpoint)\n availability = result.availability\n } catch (e) {\n availability = 'UNAVAILABLE'\n }\n root.render(\n <AppProvider sdk={sdk} availability={availability} options={options}>\n <Availability />\n </AppProvider>\n )\n}\n"],"names":["React","useEffect","useRef","classnames","Panel","SkipLink","useApp","historyPushState","historyReplaceState","Availability","availability","isChatOpen","setChatVisibility","unseenCount","threadId","setUnseenCount","setInstigatorId","buttonRef","onClick","e","preventDefault","target","id","onKeyDown","event","key","onKeyUp","onScroll","rect","current","parentElement","getBoundingClientRect","isBelowFold","top","window","innerHeight","document","documentElement","clientHeight","isFixed","classList","toggle","body","addEventListener","removeEventListener","TextComponent","createElement","Fragment","className","ref","href","draggable","role","useState","PanelHeader","PanelFooter","Message","useTextareaAutosize","formatTranscript","Chat","onEndChatScreen","onSettingsScreen","thread","messages","agent","agentStatus","isAgentTyping","settings","isKeyboard","userMessage","setUserMessage","focusVisibleWithin","setFocusVisibleWithin","messageRef","scroll","length","chatBody","querySelector","scrollTop","scrollHeight","label","remove","add","onChange","value","agentName","nickname","firstName","connectionHeadlineText","sendMessage","sendTextMessage","trim","err","console","log","handleKeyPress","shiftKey","handleSubmit","saveChat","transcript","saveChatLink","setAttribute","tabIndex","map","msg","index","message","previousMessage","width","height","x","y","viewBox","stroke","cx","cy","r","fill","noValidate","onSubmit","htmlFor","rows","name","onFocus","onBlur","type","download","ErrorSummary","errors","errs","Object","keys","goToInput","getAttribute","focus","outbound","direction","messageOwnerSameAsPrevious","assignee","text","children","isMobile","onClose","lastMessageSeen","BackButtonComponent","focusable","d","CloseButtonComponent","MinimiseButtonComponent","isMobileAndHasHistory","history","state","isMobileAndNoHistory","RightButtonComponent","useCallback","createPortal","PreChat","RequestChat","Unavailable","EndChat","Settings","Feedback","useChatSdk","useFocusedElements","sdk","instigatorId","setThread","setThreadId","setMessages","fetchThread","fetchMessages","screen","setScreen","onEscapeKey","getElementById","getElementsByTagName","recover","fetchedThread","fetchedMessages","handleScreenChange","newScreen","goToPreChatScreen","goToRequestChatScreen","goToChatScreen","goToEndChatScreen","goToFeedbackScreen","goToSettingsScreen","ScreenComponent","onContinue","onPreChatScreen","onChatScreen","onEndChatConfirm","onCancel","Component","setCustomerId","confirmEndChat","endChat","setTimeout","feedbackCancel","rel","uuid","QUESTION_MAX_LENGTH","fetchCustomerId","setErrors","questionLength","setQuestionLength","isButtonDisabled","setButtonDisabled","nameRef","questionRef","isQuestionLengthValid","questionLengthRemaining","questionLengthExceeded","questionHint","onQuestionChange","buttonLabel","onRequestChat","question","v4","customerId","getCustomer","setName","startChat","setCustomField","style","color","disabled","setSettings","optionAudio","setOptionAudio","audio","optionScroll","setOptionScroll","onSave","defaultChecked","targetContainer","location","hash","ariaHidden","dataWcInert","setAriaHidden","isInert","node","hasAttribute","removeAttribute","getFocusableElements","selectors","elements","querySelectorAll","join","Array","from","filter","closest","panelElements","setPanelElements","webchatPanelElement","activeElement","panelElement","textAreaRef","checkAvailability","endpoint","response","fetch","data","json","classes","classname","url","split","pushState","back","replaceState","messageNotification","audioUrl","buffer","context","AudioContext","webkitAudioContext","events","unlock","_e","forEach","resume","then","arrayBuffer","decodeAudioData","decodedData","catch","error","source","createBufferSource","connect","destination","start","DateTime","transformMessage","messageContent","createdAt","Date","user","authorEndUserIdentity","fullName","authorUser","transformMessages","now","local","setZone","string","toFormat","author","date","fromJSDate","replace","encodeURIComponent","createContext","useReducer","useMemo","ChatEvent","initialState","reducer","CUSTOMER_ID_STORAGE_KEY","THREAD_ID_STORAGE_KEY","SETTINGS_STORAGE_KEY","AppContext","AppProvider","options","dispatch","playSound","onLiveChatRecovered","payload","detail","inboxAssignee","contact","status","customerStatistics","unseenMessagesCount","onAssignedAgentChanged","case","onAgentTypingStarted","onAgentTypingEnded","onMessageCreated","isAudioOn","JSON","parse","localStorage","getItem","onContactStatusChanged","onMatchMedia","matches","onKeydown","onPointerdown","onChatEvent","LIVECHAT_RECOVERED","MESSAGE_CREATED","AGENT_TYPING_STARTED","AGENT_TYPING_ENDED","ASSIGNED_AGENT_CHANGED","CONTACT_STATUS_CHANGED","matchMedia","onBrowserNavigation","store","Provider","setItem","stringify","removeItem","setAvailability","setMessage","reverse","setAgent","setAgentIsTyping","setAgentStatus","toggleIsMobile","toggleIsKeyboard","actionsMap","SET_CHAT_VISIBILITY","SET_AVAILABILITY","SET_SETTINGS","SET_CUSTOMER_ID","SET_THREAD_ID","SET_THREAD","SET_MESSAGE","SET_MESSAGES","SET_AGENT","SET_AGENT_TYPING","SET_AGENT_STATUS","SET_UNSEEN_COUNT","SET_INSTIGATOR_ID","TOGGLE_IS_MOBILE","TOGGLE_IS_KEYBOARD","action","fn","actionFunction","bind","useContext","authorize","consumerIdentity","idOnExternalPlatform","getThread","recovered","allMessages","push","loadMoreMessages","createRoot","ChatSdk","init","container","brandId","channelId","environment","root","result","availabilityEndpoint","render"],"sourceRoot":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@defra/flood-webchat",
3
- "version": "0.0.1-beta.32",
3
+ "version": "0.0.1-beta.34",
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'
@@ -8,15 +8,15 @@ import { useApp } from '../../store/useApp'
8
8
  import { historyPushState, historyReplaceState } from '../../lib/history.js'
9
9
 
10
10
  export function Availability () {
11
- const { availability, isChatOpen, setChatVisibility, unseenCount, threadId, setUnseenCount } = useApp()
11
+ const { availability, isChatOpen, setChatVisibility, unseenCount, threadId, setUnseenCount, setInstigatorId } = useApp()
12
12
 
13
- const [isFixed, setIsFixed] = useState(false)
14
13
  const buttonRef = useRef()
15
14
 
16
15
  const onClick = e => {
17
16
  e.preventDefault()
18
17
  setUnseenCount(0)
19
18
  setChatVisibility(!isChatOpen)
19
+ setInstigatorId(e.target.id)
20
20
 
21
21
  if (!isChatOpen) {
22
22
  historyPushState()
@@ -38,34 +38,33 @@ export function Availability () {
38
38
  }
39
39
  }
40
40
 
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
41
  useEffect(() => {
48
- const observer = new window.IntersectionObserver(intersectionCallback, {
49
- rootMargin: '35px'
50
- })
42
+ const onScroll = () => {
43
+ if (!threadId) {
44
+ return
45
+ }
46
+
47
+ if (availability !== 'AVAILABLE') {
48
+ return
49
+ }
51
50
 
52
- const parentElement = buttonRef.current?.parentElement
51
+ const rect = buttonRef.current.parentElement.getBoundingClientRect()
53
52
 
54
- if (parentElement) {
55
- observer.observe(parentElement)
53
+ const isBelowFold = rect.top + 35 > (window.innerHeight || document.documentElement.clientHeight)
54
+ const isFixed = !isChatOpen && isBelowFold
55
+
56
+ document.documentElement.classList.toggle('wc-u-scroll-padding', isFixed)
57
+ document.body.classList.toggle('wc-u-scroll-padding', isFixed)
58
+ buttonRef.current.classList.toggle('wc-availability--fixed', isFixed)
56
59
  }
57
60
 
61
+ document.addEventListener('scroll', onScroll)
62
+ onScroll()
63
+
58
64
  return () => {
59
- if (parentElement) {
60
- observer.unobserve(parentElement)
61
- }
65
+ document.removeEventListener('scroll', onScroll)
62
66
  }
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])
67
+ }, [threadId, isChatOpen, availability])
69
68
 
70
69
  let TextComponent = (<>Show chat</>)
71
70
 
@@ -78,11 +77,12 @@ export function Availability () {
78
77
  return (
79
78
  <>
80
79
  <div
81
- className={classnames('wc-availability', isFixed && 'wc-availability--fixed', isChatOpen && 'wc-open')}
80
+ className={classnames('wc-availability', isChatOpen && 'wc-open')}
82
81
  ref={buttonRef}
83
82
  >
84
83
  <div className='wc-availability__inner'>
85
84
  <a
85
+ id='webchat-start-chat-link'
86
86
  className='wc-availability__link'
87
87
  href='#webchat'
88
88
  draggable='false'
@@ -96,7 +96,7 @@ export function Chat ({ onEndChatScreen, onSettingsScreen }) {
96
96
 
97
97
  <div className='wc-status'>
98
98
  <p className='wc-status__availability'>{connectionHeadlineText}</p>
99
- <a className='wc-status__link' href='#' data-module='govuk-button' onClick={onEndChatScreen}>End chat</a>
99
+ <a className='wc-status__link' href='#' role='button' data-module='govuk-button' onClick={onEndChatScreen}>End chat</a>
100
100
  </div>
101
101
 
102
102
  <div className='wc-body' tabIndex='0'>
@@ -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, instigatorId, 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)
@@ -30,6 +31,7 @@ export function Panel () {
30
31
  }
31
32
  setChatVisibility(false)
32
33
  historyReplaceState()
34
+ document.getElementById(instigatorId)?.focus()
33
35
  }
34
36
  }, [thread, threadId, setUnseenCount, setChatVisibility])
35
37
 
@@ -99,6 +101,7 @@ export function Panel () {
99
101
  const goToEndChatScreen = handleScreenChange(3)
100
102
  const goToFeedbackScreen = handleScreenChange(4)
101
103
  const goToSettingsScreen = handleScreenChange(5)
104
+
102
105
  let ScreenComponent
103
106
 
104
107
  switch (screen) {
@@ -129,7 +132,7 @@ export function Panel () {
129
132
  }
130
133
 
131
134
  const Component = (
132
- <div id='wc-panel' role='dialog' className='wc-panel' tabIndex='-1' aria-modal='true' aria-labelledby='wc-header-title'>
135
+ <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
136
  <div className='wc-panel__inner'>
134
137
  {ScreenComponent}
135
138
  </div>
@@ -1,9 +1,9 @@
1
- import React from 'react'
1
+ import React, { useEffect } from 'react'
2
2
  import { PanelHeader } from '../panel/panel-header.jsx'
3
3
  import { useApp } from '../../store/useApp.js'
4
4
 
5
5
  export function EndChat ({ onChatScreen, onEndChatConfirm }) {
6
- const { setCustomerId, setThreadId, setMessages, agentStatus, thread, setUnseenCount } = useApp()
6
+ const { setCustomerId, setThreadId, setMessages, agentStatus, thread, setUnseenCount, isKeyboard } = useApp()
7
7
 
8
8
  const confirmEndChat = async e => {
9
9
  e.preventDefault()
@@ -22,6 +22,14 @@ export function EndChat ({ onChatScreen, onEndChatConfirm }) {
22
22
  onEndChatConfirm(e)
23
23
  }
24
24
 
25
+ useEffect(() => {
26
+ if (isKeyboard) {
27
+ setTimeout(() => {
28
+ document.querySelector('#confirmEndChat').focus()
29
+ }, 10)
30
+ }
31
+ }, [])
32
+
25
33
  return (
26
34
  <>
27
35
  <PanelHeader />
@@ -30,7 +38,7 @@ export function EndChat ({ onChatScreen, onEndChatConfirm }) {
30
38
  <h3 className='wc-heading' aria-live='polite'>Are you sure you want to end the chat?</h3>
31
39
  <div className='govuk-button-group'>
32
40
  <a href='#endChat' role='button' className='wc-button govuk-button' data-module='govuk-button' id='confirmEndChat' onClick={confirmEndChat}>Yes, end chat</a>
33
- <a href='#resumeChat' role='button' className='wc-link govuk-link' onClick={onChatScreen}>No, resume chat</a>
41
+ <a href='#resumeChat' role='button' className='wc-link govuk-link' data-module='govuk-button' onClick={onChatScreen}>No, resume chat</a>
34
42
  </div>
35
43
  </div>
36
44
  </div>
@@ -14,7 +14,7 @@ export function Feedback ({ onCancel }) {
14
14
  <div className='wc-content'>
15
15
  <h3 id='wc-subtitle' className='wc-heading'>Give Feedback on Floodline webchat</h3>
16
16
  <p>Please note we’re unable to respond to feedback.</p>
17
- <p><a className='govuk-link' href='#' target='_blank' rel='noreferrer'>Feedback Link</a></p>
17
+ <p><a className='govuk-link' href='#' target='_blank' rel='noreferrer' role='button' data-module='govuk-button'>Feedback Link</a></p>
18
18
  <p><a id='feedback-cancel' className='wc-link govuk-link' href='#' data-module='govuk-button' role='button' onClick={feedbackCancel}>Close</a></p>
19
19
  </div>
20
20
  </div>
@@ -59,7 +59,7 @@ export function Settings ({ onCancel }) {
59
59
  </fieldset>
60
60
 
61
61
  <div className='govuk-button-group'>
62
- <a id='settings-save' href='#' className='wc-button govuk-button' data-module='govuk-button' onClick={onSave}>Save</a>
62
+ <a id='settings-save' href='#' className='wc-button govuk-button' data-module='govuk-button' role='button' onClick={onSave}>Save</a>
63
63
  <a id='settings-cancel' href='#' className='wc-link govuk-link' data-module='govuk-button' role='button' onClick={onCancel}>Cancel</a>
64
64
  </div>
65
65
  </div>
@@ -3,7 +3,7 @@ import { createPortal } from 'react-dom'
3
3
  import { useApp } from '../store/useApp'
4
4
 
5
5
  export const SkipLink = () => {
6
- const { thread } = useApp()
6
+ const { thread, setInstigatorId } = useApp()
7
7
 
8
8
  if (!thread) {
9
9
  return null
@@ -15,13 +15,21 @@ export const SkipLink = () => {
15
15
  return null
16
16
  }
17
17
 
18
+ const onClick = e => {
19
+ e.preventDefault()
20
+ setInstigatorId(e.target.id)
21
+ window.location.hash = '#webchat'
22
+ }
23
+
18
24
  return (
19
25
  <>
20
26
  {createPortal(
21
27
  <a
28
+ id='webchat-skip-link'
22
29
  href='#webchat'
23
30
  className='govuk-skip-link'
24
31
  data-module='govuk-skip-link'
32
+ onClick={onClick}
25
33
  data-wc-skiplink
26
34
  data-wc-open-btn
27
35
  >
@@ -72,7 +72,6 @@ const useFocusedElements = screen => {
72
72
 
73
73
  return () => {
74
74
  setAriaHidden()
75
- document.body.querySelector('.wc-availability__link')?.focus()
76
75
  document.removeEventListener('keydown', onKeyDown)
77
76
  }
78
77
  }, [panelElements])
@@ -145,6 +145,10 @@ export const AppProvider = ({ sdk, availability, options, children }) => {
145
145
  dispatch({ type: 'SET_UNSEEN_COUNT', payload: unseenCount })
146
146
  }
147
147
 
148
+ const setInstigatorId = id => {
149
+ dispatch({ type: 'SET_INSTIGATOR_ID', payload: id })
150
+ }
151
+
148
152
  /**
149
153
  * Application-wide state and state functions
150
154
  */
@@ -158,6 +162,7 @@ export const AppProvider = ({ sdk, availability, options, children }) => {
158
162
  setMessages,
159
163
  setUnseenCount,
160
164
  setChatVisibility,
165
+ setInstigatorId,
161
166
  onLiveChatRecovered,
162
167
  onAssignedAgentChanged,
163
168
  onAgentTypingStarted,
@@ -103,6 +103,13 @@ const setUnseenCount = (state, payload) => {
103
103
  }
104
104
  }
105
105
 
106
+ const setInstigatorId = (state, payload) => {
107
+ return {
108
+ ...state,
109
+ instigatorId: payload
110
+ }
111
+ }
112
+
106
113
  const toggleIsMobile = (state, payload) => {
107
114
  return {
108
115
  ...state,
@@ -130,6 +137,7 @@ export const actionsMap = {
130
137
  SET_AGENT_TYPING: setAgentIsTyping,
131
138
  SET_AGENT_STATUS: setAgentStatus,
132
139
  SET_UNSEEN_COUNT: setUnseenCount,
140
+ SET_INSTIGATOR_ID: setInstigatorId,
133
141
  TOGGLE_IS_MOBILE: toggleIsMobile,
134
142
  TOGGLE_IS_KEYBOARD: toggleIsKeyboard
135
143
  }
@@ -7,6 +7,7 @@ export const initialState = {
7
7
  thread: null,
8
8
  messages: [],
9
9
  unseenCount: 0,
10
+ instigatorId: null,
10
11
  agent: null,
11
12
  agentStatus: null,
12
13
  isAgentTyping: false,