@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 +92 -52
- package/dist/client.js.map +1 -1
- package/package.json +1 -1
- package/src/client/components/availability/availability.jsx +25 -25
- package/src/client/components/chat/chat.jsx +1 -1
- package/src/client/components/panel/panel.jsx +5 -2
- package/src/client/components/screens/end-chat.jsx +11 -3
- package/src/client/components/screens/feedback.jsx +1 -1
- package/src/client/components/screens/settings.jsx +1 -1
- package/src/client/components/skip-link.jsx +9 -1
- package/src/client/hooks/useFocusedElements.js +0 -1
- package/src/client/store/AppProvider.jsx +5 -0
- package/src/client/store/actions-map.js +8 -0
- package/src/client/store/reducer.js +1 -0
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
|
|
67
|
-
|
|
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
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
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',
|
|
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
|
|
540
|
-
/* harmony import */ var
|
|
541
|
-
/* harmony import */ var
|
|
542
|
-
/* harmony import */ var
|
|
543
|
-
/* harmony import */ var
|
|
544
|
-
/* harmony import */ var
|
|
545
|
-
/* harmony import */ var
|
|
546
|
-
/* harmony import */ var
|
|
547
|
-
/* harmony import */ var
|
|
548
|
-
/* harmony import */ var
|
|
549
|
-
/* harmony import */ var
|
|
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
|
-
|
|
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,
|
|
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,
|
|
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,
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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:
|
|
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,
|
package/dist/client.js.map
CHANGED
|
@@ -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 \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 and \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 \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 \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 \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 and \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 \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 \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,4 +1,4 @@
|
|
|
1
|
-
import React, { useEffect, useRef
|
|
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
|
|
49
|
-
|
|
50
|
-
|
|
42
|
+
const onScroll = () => {
|
|
43
|
+
if (!threadId) {
|
|
44
|
+
return
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
if (availability !== 'AVAILABLE') {
|
|
48
|
+
return
|
|
49
|
+
}
|
|
51
50
|
|
|
52
|
-
|
|
51
|
+
const rect = buttonRef.current.parentElement.getBoundingClientRect()
|
|
53
52
|
|
|
54
|
-
|
|
55
|
-
|
|
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
|
-
|
|
60
|
-
observer.unobserve(parentElement)
|
|
61
|
-
}
|
|
65
|
+
document.removeEventListener('scroll', onScroll)
|
|
62
66
|
}
|
|
63
|
-
}, [
|
|
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',
|
|
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
|
>
|
|
@@ -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
|
}
|