@defra/flood-webchat 0.0.1-beta.27 → 0.0.1-beta.29
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 +114 -29
- package/dist/client.js.map +1 -1
- package/package.json +1 -1
- package/src/client/components/availability/availability.jsx +16 -5
- package/src/client/components/panel/panel-header.jsx +39 -10
- package/src/client/components/panel/panel.jsx +4 -2
- package/src/client/components/panel/panel.scss +11 -1
- package/src/client/components/screens/settings.jsx +1 -1
- package/src/client/lib/history.js +13 -0
- package/src/client/store/AppProvider.jsx +17 -4
package/dist/client.js
CHANGED
|
@@ -17,6 +17,8 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
17
17
|
/* harmony import */ var _lib_classnames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../lib/classnames */ "./src/client/lib/classnames.js");
|
|
18
18
|
/* harmony import */ var _panel_panel_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../panel/panel.jsx */ "./src/client/components/panel/panel.jsx");
|
|
19
19
|
/* harmony import */ var _store_useApp__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../store/useApp */ "./src/client/store/useApp.js");
|
|
20
|
+
/* harmony import */ var _lib_history_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../lib/history.js */ "./src/client/lib/history.js");
|
|
21
|
+
|
|
20
22
|
|
|
21
23
|
|
|
22
24
|
|
|
@@ -27,12 +29,20 @@ function Availability() {
|
|
|
27
29
|
isChatOpen,
|
|
28
30
|
setChatVisibility,
|
|
29
31
|
unseenCount,
|
|
30
|
-
threadId
|
|
32
|
+
threadId,
|
|
33
|
+
setUnseenCount
|
|
31
34
|
} = (0,_store_useApp__WEBPACK_IMPORTED_MODULE_3__.useApp)();
|
|
32
35
|
const [isFixed, setIsFixed] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
|
|
33
36
|
const buttonRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)();
|
|
34
|
-
const onClick =
|
|
37
|
+
const onClick = e => {
|
|
38
|
+
e.preventDefault();
|
|
39
|
+
setUnseenCount(0);
|
|
35
40
|
setChatVisibility(!isChatOpen);
|
|
41
|
+
if (!isChatOpen) {
|
|
42
|
+
(0,_lib_history_js__WEBPACK_IMPORTED_MODULE_4__.historyPushState)();
|
|
43
|
+
} else {
|
|
44
|
+
(0,_lib_history_js__WEBPACK_IMPORTED_MODULE_4__.historyReplaceState)();
|
|
45
|
+
}
|
|
36
46
|
};
|
|
37
47
|
const onKeyDown = event => {
|
|
38
48
|
if (event.key === ' ') {
|
|
@@ -41,6 +51,7 @@ function Availability() {
|
|
|
41
51
|
};
|
|
42
52
|
const onKeyUp = event => {
|
|
43
53
|
if (event.key === ' ') {
|
|
54
|
+
setUnseenCount(0);
|
|
44
55
|
setChatVisibility(!isChatOpen);
|
|
45
56
|
}
|
|
46
57
|
};
|
|
@@ -67,9 +78,9 @@ function Availability() {
|
|
|
67
78
|
document.documentElement.classList.toggle('wc-u-scroll-padding', isFixed);
|
|
68
79
|
document.body.classList.toggle('wc-u-scroll-padding', isFixed);
|
|
69
80
|
}, [isFixed]);
|
|
70
|
-
let TextComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, "Show
|
|
81
|
+
let TextComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, "Show chat");
|
|
71
82
|
if (!threadId) {
|
|
72
|
-
TextComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, "Start
|
|
83
|
+
TextComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, "Start chat");
|
|
73
84
|
}
|
|
74
85
|
switch (availability) {
|
|
75
86
|
case 'AVAILABLE':
|
|
@@ -80,12 +91,13 @@ function Availability() {
|
|
|
80
91
|
className: "wc-availability__inner"
|
|
81
92
|
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
|
|
82
93
|
className: "wc-availability__link",
|
|
83
|
-
role: "button",
|
|
84
94
|
href: "#webchat",
|
|
85
95
|
draggable: "false",
|
|
86
96
|
onClick: onClick,
|
|
87
97
|
onKeyUp: onKeyUp,
|
|
88
|
-
onKeyDown: onKeyDown
|
|
98
|
+
onKeyDown: onKeyDown,
|
|
99
|
+
role: "button",
|
|
100
|
+
"data-module": "govuk-button"
|
|
89
101
|
}, TextComponent, unseenCount > 0 && !isChatOpen ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", {
|
|
90
102
|
className: "wc-availability__unseen"
|
|
91
103
|
}, unseenCount) : null))), isChatOpen && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_panel_panel_jsx__WEBPACK_IMPORTED_MODULE_2__.Panel, null));
|
|
@@ -420,24 +432,42 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
420
432
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
|
|
421
433
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
422
434
|
/* harmony import */ var _store_useApp_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../store/useApp.js */ "./src/client/store/useApp.js");
|
|
435
|
+
/* harmony import */ var _lib_history_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../lib/history.js */ "./src/client/lib/history.js");
|
|
436
|
+
|
|
423
437
|
|
|
424
438
|
|
|
425
439
|
function PanelHeader() {
|
|
426
440
|
const {
|
|
427
441
|
thread,
|
|
442
|
+
threadId,
|
|
428
443
|
setChatVisibility,
|
|
429
444
|
setUnseenCount,
|
|
430
|
-
|
|
445
|
+
isMobile
|
|
431
446
|
} = (0,_store_useApp_js__WEBPACK_IMPORTED_MODULE_1__.useApp)();
|
|
432
447
|
const onClose = e => {
|
|
433
448
|
e.preventDefault();
|
|
434
449
|
setChatVisibility(false);
|
|
450
|
+
(0,_lib_history_js__WEBPACK_IMPORTED_MODULE_2__.historyReplaceState)();
|
|
435
451
|
if (threadId) {
|
|
436
452
|
thread?.lastMessageSeen();
|
|
437
453
|
setUnseenCount(0);
|
|
438
454
|
}
|
|
439
455
|
};
|
|
440
|
-
|
|
456
|
+
const BackButtonComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", {
|
|
457
|
+
className: "wc-header__back",
|
|
458
|
+
"aria-label": "Close the webchat",
|
|
459
|
+
onClick: onClose
|
|
460
|
+
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("svg", {
|
|
461
|
+
"aria-hidden": "true",
|
|
462
|
+
focusable: "false",
|
|
463
|
+
width: "20",
|
|
464
|
+
height: "20",
|
|
465
|
+
viewBox: "0 0 20 20"
|
|
466
|
+
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("path", {
|
|
467
|
+
d: "M4.828,11L12.314,18.485L10.899,19.899L1,10L10.899,0.101L12.314,1.515L4.828,9L19,9L19,11L4.828,11Z",
|
|
468
|
+
fill: "currentColor"
|
|
469
|
+
})));
|
|
470
|
+
const CloseButtonComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", {
|
|
441
471
|
className: "wc-header__close",
|
|
442
472
|
"aria-label": "Close the webchat",
|
|
443
473
|
onClick: onClose
|
|
@@ -451,28 +481,39 @@ function PanelHeader() {
|
|
|
451
481
|
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",
|
|
452
482
|
fill: "currentColor"
|
|
453
483
|
})));
|
|
484
|
+
const MinimiseButtonComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", {
|
|
485
|
+
className: "wc-header__hide",
|
|
486
|
+
"aria-label": "Minimise the webchat",
|
|
487
|
+
onClick: onClose
|
|
488
|
+
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("svg", {
|
|
489
|
+
"aria-hidden": "true",
|
|
490
|
+
focusable: "false",
|
|
491
|
+
width: "20",
|
|
492
|
+
height: "20",
|
|
493
|
+
viewBox: "0 0 20 20"
|
|
494
|
+
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("path", {
|
|
495
|
+
d: "M10 14.4l-7-7L4.4 6l5.6 5.6L15.6 6 17 7.4l-7 7z",
|
|
496
|
+
fill: "currentColor"
|
|
497
|
+
})));
|
|
498
|
+
let RightButtonComponent = CloseButtonComponent;
|
|
454
499
|
if (thread) {
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("path", {
|
|
466
|
-
d: "M10 14.4l-7-7L4.4 6l5.6 5.6L15.6 6 17 7.4l-7 7z",
|
|
467
|
-
fill: "currentColor"
|
|
468
|
-
})));
|
|
500
|
+
RightButtonComponent = MinimiseButtonComponent;
|
|
501
|
+
if (isMobile && !window.history.state) {
|
|
502
|
+
RightButtonComponent = MinimiseButtonComponent;
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
if (!thread && isMobile && !window.history.state) {
|
|
506
|
+
RightButtonComponent = CloseButtonComponent;
|
|
507
|
+
}
|
|
508
|
+
if (isMobile && window.history.state) {
|
|
509
|
+
RightButtonComponent = null;
|
|
469
510
|
}
|
|
470
511
|
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
|
|
471
512
|
className: "wc-header"
|
|
472
|
-
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("h2", {
|
|
513
|
+
}, window.history.state ? BackButtonComponent : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("h2", {
|
|
473
514
|
id: "wc-header-title",
|
|
474
515
|
className: "wc-header__title"
|
|
475
|
-
}, "Floodline Webchat"),
|
|
516
|
+
}, "Floodline Webchat"), RightButtonComponent);
|
|
476
517
|
}
|
|
477
518
|
|
|
478
519
|
/***/ }),
|
|
@@ -501,6 +542,8 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
501
542
|
/* harmony import */ var _store_useApp_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../store/useApp.js */ "./src/client/store/useApp.js");
|
|
502
543
|
/* harmony import */ var _store_useChatSdk_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../store/useChatSdk.js */ "./src/client/store/useChatSdk.js");
|
|
503
544
|
/* harmony import */ var _hooks_useFocusedElements_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../hooks/useFocusedElements.js */ "./src/client/hooks/useFocusedElements.js");
|
|
545
|
+
/* harmony import */ var _lib_history_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../lib/history.js */ "./src/client/lib/history.js");
|
|
546
|
+
|
|
504
547
|
|
|
505
548
|
|
|
506
549
|
|
|
@@ -539,6 +582,7 @@ function Panel() {
|
|
|
539
582
|
setUnseenCount(0);
|
|
540
583
|
}
|
|
541
584
|
setChatVisibility(false);
|
|
585
|
+
(0,_lib_history_js__WEBPACK_IMPORTED_MODULE_12__.historyReplaceState)();
|
|
542
586
|
}
|
|
543
587
|
}, [thread, threadId, setUnseenCount, setChatVisibility]);
|
|
544
588
|
|
|
@@ -559,9 +603,9 @@ function Panel() {
|
|
|
559
603
|
* Initializes the eventListener for pressing the escape key
|
|
560
604
|
*/
|
|
561
605
|
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
|
|
562
|
-
|
|
606
|
+
document.addEventListener('keydown', onEscapeKey);
|
|
563
607
|
return () => {
|
|
564
|
-
document.removeEventListener('keydown',
|
|
608
|
+
document.removeEventListener('keydown', onEscapeKey);
|
|
565
609
|
};
|
|
566
610
|
}, [onEscapeKey, setChatVisibility]);
|
|
567
611
|
|
|
@@ -1087,6 +1131,7 @@ function Settings({
|
|
|
1087
1131
|
href: "#",
|
|
1088
1132
|
className: "wc-link govuk-link",
|
|
1089
1133
|
"data-module": "govuk-button",
|
|
1134
|
+
role: "button",
|
|
1090
1135
|
onClick: onCancel
|
|
1091
1136
|
}, "Cancel")))));
|
|
1092
1137
|
}
|
|
@@ -1263,6 +1308,33 @@ const classnames = (...classes) => classes.filter(classname => classname && type
|
|
|
1263
1308
|
|
|
1264
1309
|
/***/ }),
|
|
1265
1310
|
|
|
1311
|
+
/***/ "./src/client/lib/history.js":
|
|
1312
|
+
/*!***********************************!*\
|
|
1313
|
+
!*** ./src/client/lib/history.js ***!
|
|
1314
|
+
\***********************************/
|
|
1315
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
1316
|
+
|
|
1317
|
+
__webpack_require__.r(__webpack_exports__);
|
|
1318
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
1319
|
+
/* harmony export */ historyPushState: () => (/* binding */ historyPushState),
|
|
1320
|
+
/* harmony export */ historyReplaceState: () => (/* binding */ historyReplaceState)
|
|
1321
|
+
/* harmony export */ });
|
|
1322
|
+
const historyPushState = () => {
|
|
1323
|
+
const url = window.location.href.split('#')[0];
|
|
1324
|
+
window.history.pushState({
|
|
1325
|
+
history: true
|
|
1326
|
+
}, null, `${url}#webchat`);
|
|
1327
|
+
};
|
|
1328
|
+
const historyReplaceState = () => {
|
|
1329
|
+
if (window.history.state?.history) {
|
|
1330
|
+
window.history.back();
|
|
1331
|
+
}
|
|
1332
|
+
const url = window.location.href.split('#')[0];
|
|
1333
|
+
window.history.replaceState(null, null, url);
|
|
1334
|
+
};
|
|
1335
|
+
|
|
1336
|
+
/***/ }),
|
|
1337
|
+
|
|
1266
1338
|
/***/ "./src/client/lib/message-notification.js":
|
|
1267
1339
|
/*!************************************************!*\
|
|
1268
1340
|
!*** ./src/client/lib/message-notification.js ***!
|
|
@@ -1493,18 +1565,31 @@ const AppProvider = ({
|
|
|
1493
1565
|
setCustomerId(window.localStorage.getItem(_constants_js__WEBPACK_IMPORTED_MODULE_4__.CUSTOMER_ID_STORAGE_KEY));
|
|
1494
1566
|
setThreadId(window.localStorage.getItem(_constants_js__WEBPACK_IMPORTED_MODULE_4__.THREAD_ID_STORAGE_KEY));
|
|
1495
1567
|
setSettings(JSON.parse(window.localStorage.getItem(_constants_js__WEBPACK_IMPORTED_MODULE_4__.SETTINGS_STORAGE_KEY)) || state.settings);
|
|
1568
|
+
}, []);
|
|
1569
|
+
|
|
1570
|
+
/**
|
|
1571
|
+
* Set browser history on start chat click
|
|
1572
|
+
*/
|
|
1573
|
+
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
|
|
1496
1574
|
if (window.location.hash === '#webchat') {
|
|
1497
1575
|
setChatVisibility(true);
|
|
1498
1576
|
}
|
|
1577
|
+
const onBrowserNavigation = window.addEventListener('popstate', () => {
|
|
1578
|
+
if (window.location.hash === '#webchat') {
|
|
1579
|
+
setChatVisibility(true);
|
|
1580
|
+
} else {
|
|
1581
|
+
setChatVisibility(false);
|
|
1582
|
+
}
|
|
1583
|
+
});
|
|
1584
|
+
return () => {
|
|
1585
|
+
window.removeEventListener('popstate', onBrowserNavigation);
|
|
1586
|
+
};
|
|
1499
1587
|
}, []);
|
|
1500
1588
|
|
|
1501
1589
|
/**
|
|
1502
1590
|
* State update functions
|
|
1503
1591
|
*/
|
|
1504
1592
|
const setChatVisibility = payload => {
|
|
1505
|
-
if (!payload) {
|
|
1506
|
-
window.location.hash = '';
|
|
1507
|
-
}
|
|
1508
1593
|
dispatch({
|
|
1509
1594
|
type: 'SET_CHAT_VISIBILITY',
|
|
1510
1595
|
payload
|
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/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/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 { useApp } from '../../store/useApp'\n\nexport function Availability () {\n const { availability, isChatOpen, setChatVisibility, unseenCount, threadId } = useApp()\n\n const [isFixed, setIsFixed] = useState(false)\n const buttonRef = useRef()\n\n const onClick = () => {\n setChatVisibility(!isChatOpen)\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 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 role='button'\n href='#webchat'\n draggable='false'\n onClick={onClick}\n onKeyUp={onKeyUp}\n onKeyDown={onKeyDown}\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 </>\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'\n\nexport function PanelHeader () {\n const { thread, setChatVisibility, setUnseenCount, threadId } = useApp()\n\n const onClose = e => {\n e.preventDefault()\n setChatVisibility(false)\n if (threadId) {\n thread?.lastMessageSeen()\n setUnseenCount(0)\n }\n }\n\n let ButtonComponent = (\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 if (thread) {\n ButtonComponent = (\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\n return (\n <div className='wc-header'>\n <h2 id='wc-header-title' className='wc-header__title'>\n Floodline Webchat\n </h2>\n\n {ButtonComponent}\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'\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 }\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 const escapeKeyEvent = document.addEventListener('keydown', onEscapeKey)\n\n return () => {\n document.removeEventListener('keydown', escapeKeyEvent)\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' 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 { 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 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 if (window.location.hash === '#webchat') {\n setChatVisibility(true)\n }\n }, [])\n\n /**\n * State update functions\n */\n const setChatVisibility = payload => {\n if (!payload) {\n window.location.hash = ''\n }\n\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","useApp","Availability","availability","isChatOpen","setChatVisibility","unseenCount","threadId","isFixed","setIsFixed","buttonRef","onClick","onKeyDown","event","key","preventDefault","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","role","href","draggable","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","e","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","setUnseenCount","onClose","lastMessageSeen","ButtonComponent","focusable","d","useCallback","createPortal","PreChat","RequestChat","Unavailable","EndChat","Settings","Feedback","useChatSdk","useFocusedElements","sdk","setThread","setThreadId","setMessages","isMobile","fetchThread","fetchMessages","screen","setScreen","onEscapeKey","getElementsByTagName","escapeKeyEvent","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","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","messageNotification","audioUrl","buffer","context","AudioContext","webkitAudioContext","state","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","location","hash","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/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 { 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 </>\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 let RightButtonComponent = CloseButtonComponent\n\n if (thread) {\n RightButtonComponent = MinimiseButtonComponent\n\n if (isMobile && !window.history.state) {\n RightButtonComponent = MinimiseButtonComponent\n }\n }\n\n if (!thread && isMobile && !window.history.state) {\n RightButtonComponent = CloseButtonComponent\n }\n\n if (isMobile && window.history.state) {\n RightButtonComponent = null\n }\n\n return (\n <div className='wc-header'>\n {window.history.state ? 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 { useState, useEffect, useCallback } from 'react'\n\nconst ariaHidden = 'aria-hidden'\nconst dataWcInert = 'data-wc-inert'\n\nconst setAriaHidden = isInert => {\n for (const node of document.body.children) {\n if (node.id !== 'wc-panel') {\n // We only want to toggle elements that aren't already inert\n if (isInert && !node.getAttribute(ariaHidden)) {\n node.setAttribute(ariaHidden, 'true')\n node.setAttribute(dataWcInert, '')\n } else if (node.hasAttribute(dataWcInert)) {\n node.removeAttribute(ariaHidden)\n node.removeAttribute(dataWcInert)\n }\n }\n }\n}\n\nexport const getFocusableElements = () => {\n const selectors = [\n '#wc-panel a:not([disabled])',\n '#wc-panel button:not([disabled])',\n '#wc-panel select:not([disabled])',\n '#wc-panel input:not([disabled])',\n '#wc-panel textarea:not([disabled])',\n '#wc-panel *[tabindex=\"0\"]:not([disabled])'\n ]\n\n const elements = document.body.querySelectorAll(selectors.join(','))\n return Array.from(elements).filter(e => !e.closest('[hidden]') && !e.closest('[aria-hidden=\"true\"]'))\n}\n\nconst useFocusedElements = screen => {\n const [panelElements, setPanelElements] = useState([])\n\n const onKeyDown = useCallback(e => {\n const webchatPanelElement = document.querySelector('#wc-panel')\n\n if (e.key === 'Tab') {\n if (webchatPanelElement && !document.activeElement.closest('#wc-panel')) {\n webchatPanelElement.focus()\n }\n\n if (e.shiftKey) {\n if (document.activeElement === panelElements[0]) {\n panelElements[panelElements.length - 1].focus()\n e.preventDefault()\n } else if (document.activeElement === document.querySelector('#wc-panel')) {\n panelElements[panelElements.length - 1]?.focus()\n e.preventDefault()\n }\n } else if (document.activeElement === panelElements[panelElements.length - 1]) {\n panelElements[0].focus()\n e.preventDefault()\n }\n }\n }, [panelElements])\n\n useEffect(() => {\n setPanelElements(getFocusableElements())\n }, [screen])\n\n useEffect(() => {\n setAriaHidden(true)\n\n const panelElement = document.querySelector('#wc-panel')\n panelElement.focus()\n\n document.addEventListener('keydown', onKeyDown)\n\n return () => {\n setAriaHidden()\n document.body.querySelector('.wc-availability__link')?.focus()\n document.removeEventListener('keydown', onKeyDown)\n }\n }, [panelElements])\n}\n\nexport { useFocusedElements }\n","import { useEffect } from 'react'\n\nexport const useTextareaAutosize = (textAreaRef, value) => {\n useEffect(() => {\n if (textAreaRef) {\n textAreaRef.style.height = '0px'\n\n const scrollHeight = textAreaRef.scrollHeight\n\n textAreaRef.style.height = `${scrollHeight}px`\n }\n }, [textAreaRef, value])\n}\n","export async function checkAvailability (endpoint) {\n const response = await fetch(endpoint)\n const data = await response.json()\n\n return {\n availability: data.availability || 'UNAVAILABLE'\n }\n}\n","export const classnames = (...classes) => classes.filter(classname => classname && typeof classname === 'string').join(' ')\n","export const historyPushState = () => {\n const url = window.location.href.split('#')[0]\n window.history.pushState({ history: true }, null, `${url}#webchat`)\n}\n\nexport const historyReplaceState = () => {\n if (window.history.state?.history) {\n window.history.back()\n }\n\n const url = window.location.href.split('#')[0]\n window.history.replaceState(null, null, url)\n}\n","export const messageNotification = audioUrl => {\n let buffer\n\n const context = new (window.AudioContext || window.webkitAudioContext)()\n\n if (context.state === 'suspended') {\n const events = ['touchstart', 'touchend', 'mousedown', 'wheel', 'keydown', 'click']\n\n const unlock = _e => {\n events.forEach(event => {\n document.body.removeEventListener(event, unlock)\n })\n\n context.resume()\n }\n\n events.forEach(event => {\n document.body.addEventListener(event, unlock, false)\n })\n }\n\n fetch(audioUrl)\n .then(response => response.arrayBuffer())\n .then(data => context.decodeAudioData(data))\n .then(decodedData => {\n buffer = decodedData\n })\n .catch(console.error)\n\n return () => {\n const source = context.createBufferSource()\n source.buffer = buffer\n source.connect(context.destination)\n source.start()\n }\n}\n","import { DateTime } from 'luxon'\n\nexport const transformMessage = message => {\n return {\n id: message.id,\n text: message.messageContent?.text,\n createdAt: new Date(message.createdAt),\n user: message.authorEndUserIdentity?.fullName?.trim() || null,\n assignee: message.authorUser?.firstName || null,\n direction: message.direction\n }\n}\n\nexport const transformMessages = messages => messages.map(message => transformMessage(message))\n\nexport const formatTranscript = messages => {\n const now = DateTime.local()\n now.setZone('Europe/London')\n\n let string = `Floodline webchat transcript, ${now.toFormat('HH:mm:ss a, dd LLLL yyyy')}\\n\\n`\n\n for (const message of messages) {\n const { text, direction, user, assignee, createdAt } = message\n\n const author = direction === 'inbound' ? user : `${assignee} (Floodline adviser)`\n const date = DateTime.fromJSDate(new Date(createdAt)).setZone('Europe/London').toFormat('HH:mm:ss a, dd LLLL yyyy')\n\n string += `[${date}] ${author}: \\n${text}\\n\\n`\n }\n\n string = string.replace(/<a\\b[^>]*>/i, '').replace(/<\\/a>/i, '')\n\n return encodeURIComponent(string)\n}\n","import React, { createContext, useEffect, useReducer, useMemo } from 'react'\nimport { ChatEvent } from '@nice-devone/nice-cxone-chat-web-sdk'\n\nimport { messageNotification } from '../lib/message-notification.js'\n\nimport { initialState, reducer } from './reducer.js'\nimport { CUSTOMER_ID_STORAGE_KEY, THREAD_ID_STORAGE_KEY, SETTINGS_STORAGE_KEY } from './constants.js'\n\nexport const AppContext = createContext(initialState)\n\nexport const AppProvider = ({ sdk, availability, options, children }) => {\n const [state, dispatch] = useReducer(reducer, initialState)\n\n const playSound = messageNotification(options.audioUrl)\n\n /**\n * SDK event handlers\n */\n const onLiveChatRecovered = e => {\n dispatch({ type: 'SET_AGENT', payload: e.detail.data.inboxAssignee })\n dispatch({ type: 'SET_AGENT_STATUS', payload: e.detail.data.contact.status })\n dispatch({ type: 'SET_UNSEEN_COUNT', payload: e.detail.data.contact.customerStatistics.unseenMessagesCount })\n }\n\n const onAssignedAgentChanged = e => {\n dispatch({ type: 'SET_AGENT', payload: e.detail.data.inboxAssignee })\n dispatch({ type: 'SET_AGENT_STATUS', payload: e.detail.data.case.status })\n }\n\n const onAgentTypingStarted = () => {\n dispatch({ type: 'SET_AGENT_TYPING', payload: true })\n }\n\n const onAgentTypingEnded = () => {\n dispatch({ type: 'SET_AGENT_TYPING', payload: false })\n }\n\n const onMessageCreated = e => {\n dispatch({ type: 'SET_MESSAGE', payload: e.detail.data.message })\n dispatch({ type: 'SET_AGENT_STATUS', payload: e.detail.data.case.status })\n dispatch({ type: 'SET_UNSEEN_COUNT', payload: e.detail.data.case.customerStatistics.unseenMessagesCount })\n\n const isAudioOn = JSON.parse(window.localStorage.getItem(SETTINGS_STORAGE_KEY)).audio\n\n if (isAudioOn && e.detail.data.message.direction === 'outbound') {\n playSound()\n }\n }\n\n const onContactStatusChanged = e => {\n dispatch({ type: 'SET_AGENT_STATUS', payload: e.detail.data.case.status })\n }\n\n const onMatchMedia = e => {\n dispatch({ type: 'TOGGLE_IS_MOBILE', payload: e.matches })\n }\n\n const onKeydown = () => {\n dispatch({ type: 'TOGGLE_IS_KEYBOARD', payload: true })\n }\n\n const onPointerdown = () => {\n dispatch({ type: 'TOGGLE_IS_KEYBOARD', payload: false })\n }\n\n useEffect(() => {\n sdk.onChatEvent(ChatEvent.LIVECHAT_RECOVERED, onLiveChatRecovered)\n sdk.onChatEvent(ChatEvent.MESSAGE_CREATED, onMessageCreated)\n sdk.onChatEvent(ChatEvent.AGENT_TYPING_STARTED, onAgentTypingStarted)\n sdk.onChatEvent(ChatEvent.AGENT_TYPING_ENDED, onAgentTypingEnded)\n sdk.onChatEvent(ChatEvent.ASSIGNED_AGENT_CHANGED, onAssignedAgentChanged)\n sdk.onChatEvent(ChatEvent.CONTACT_STATUS_CHANGED, onContactStatusChanged)\n // We need to know if it is a mobile and if it is a keyboard interaction\n window.matchMedia('(max-width: 640px)').addEventListener('change', onMatchMedia)\n window.addEventListener('keydown', onKeydown)\n window.addEventListener('pointerdown', onPointerdown)\n // Tidying up\n return () => {\n window.removeEventListener('change', onMatchMedia)\n window.removeEventListener('keydown', onKeydown)\n window.removeEventListener('pointerdown', onPointerdown)\n }\n }, [sdk])\n\n /**\n * Initialize customerId, threadId and whether the webchat should be open\n */\n useEffect(() => {\n dispatch({ type: 'SET_AVAILABILITY', payload: availability })\n\n setCustomerId(window.localStorage.getItem(CUSTOMER_ID_STORAGE_KEY))\n setThreadId(window.localStorage.getItem(THREAD_ID_STORAGE_KEY))\n setSettings(JSON.parse(window.localStorage.getItem(SETTINGS_STORAGE_KEY)) || state.settings)\n }, [])\n\n /**\n * Set browser history on start chat click\n */\n useEffect(() => {\n if (window.location.hash === '#webchat') {\n setChatVisibility(true)\n }\n\n const onBrowserNavigation = window.addEventListener('popstate', () => {\n if (window.location.hash === '#webchat') {\n setChatVisibility(true)\n } else {\n setChatVisibility(false)\n }\n })\n\n return () => {\n window.removeEventListener('popstate', onBrowserNavigation)\n }\n }, [])\n\n /**\n * State update functions\n */\n const setChatVisibility = payload => {\n dispatch({ type: 'SET_CHAT_VISIBILITY', payload })\n }\n\n const setCustomerId = customerId => {\n dispatch({ type: 'SET_CUSTOMER_ID', payload: customerId })\n }\n\n const setThreadId = threadId => {\n dispatch({ type: 'SET_THREAD_ID', payload: threadId })\n }\n\n const setThread = thread => {\n dispatch({ type: 'SET_THREAD', payload: thread })\n }\n\n const setMessages = messages => {\n dispatch({ type: 'SET_MESSAGES', payload: messages })\n }\n\n const setSettings = data => {\n dispatch({ type: 'SET_SETTINGS', payload: data })\n }\n\n const setUnseenCount = unseenCount => {\n dispatch({ type: 'SET_UNSEEN_COUNT', payload: unseenCount })\n }\n\n /**\n * Application-wide state and state functions\n */\n const store = useMemo(() => ({\n ...state,\n sdk,\n setSettings,\n setCustomerId,\n setThreadId,\n setThread,\n setMessages,\n setUnseenCount,\n setChatVisibility,\n onLiveChatRecovered,\n onAssignedAgentChanged,\n onAgentTypingStarted,\n onAgentTypingEnded,\n onMessageCreated,\n onContactStatusChanged\n }))\n\n return (\n <AppContext.Provider value={store}>\n {children}\n </AppContext.Provider>\n )\n}\n","import { transformMessages, transformMessage } from '../lib/transform-messages'\nimport { CUSTOMER_ID_STORAGE_KEY, THREAD_ID_STORAGE_KEY, SETTINGS_STORAGE_KEY } from './constants'\n\nconst setSettings = (state, payload) => {\n if (payload) {\n window.localStorage.setItem(SETTINGS_STORAGE_KEY, JSON.stringify(payload))\n } else {\n window.localStorage.removeItem(SETTINGS_STORAGE_KEY)\n }\n\n return {\n ...state,\n settings: payload\n }\n}\n\nconst setCustomerId = (state, payload) => {\n if (payload) {\n window.localStorage.setItem(CUSTOMER_ID_STORAGE_KEY, payload)\n } else {\n window.localStorage.removeItem(CUSTOMER_ID_STORAGE_KEY)\n }\n\n return {\n ...state,\n customerId: payload\n }\n}\n\nconst setThreadId = (state, payload) => {\n if (payload) {\n window.localStorage.setItem(THREAD_ID_STORAGE_KEY, payload)\n } else {\n window.localStorage.removeItem(THREAD_ID_STORAGE_KEY)\n }\n\n return {\n ...state,\n threadId: payload\n }\n}\n\nconst setChatVisibility = (state, payload) => {\n return {\n ...state,\n isChatOpen: payload\n }\n}\n\nconst setAvailability = (state, payload) => {\n return {\n ...state,\n availability: payload\n }\n}\n\nconst setThread = (state, payload) => {\n return {\n ...state,\n thread: payload\n }\n}\n\nconst setMessage = (state, payload) => {\n return {\n ...state,\n messages: [...state.messages, transformMessage(payload)]\n }\n}\n\nconst setMessages = (state, payload) => {\n return {\n ...state,\n messages: transformMessages(payload).reverse()\n }\n}\n\nconst setAgent = (state, payload) => {\n return {\n ...state,\n agent: payload\n }\n}\n\nconst setAgentIsTyping = (state, payload) => {\n return {\n ...state,\n isAgentTyping: payload\n }\n}\n\nconst setAgentStatus = (state, payload) => {\n return {\n ...state,\n agentStatus: payload\n }\n}\n\nconst setUnseenCount = (state, payload) => {\n return {\n ...state,\n unseenCount: payload\n }\n}\n\nconst toggleIsMobile = (state, payload) => {\n return {\n ...state,\n isMobile: payload\n }\n}\n\nconst toggleIsKeyboard = (state, payload) => {\n return {\n ...state,\n isKeyboard: payload\n }\n}\n\nexport const actionsMap = {\n SET_CHAT_VISIBILITY: setChatVisibility,\n SET_AVAILABILITY: setAvailability,\n SET_SETTINGS: setSettings,\n SET_CUSTOMER_ID: setCustomerId,\n SET_THREAD_ID: setThreadId,\n SET_THREAD: setThread,\n SET_MESSAGE: setMessage,\n SET_MESSAGES: setMessages,\n SET_AGENT: setAgent,\n SET_AGENT_TYPING: setAgentIsTyping,\n SET_AGENT_STATUS: setAgentStatus,\n SET_UNSEEN_COUNT: setUnseenCount,\n TOGGLE_IS_MOBILE: toggleIsMobile,\n TOGGLE_IS_KEYBOARD: toggleIsKeyboard\n}\n","export const SETTINGS_STORAGE_KEY = 'webchat_settings'\nexport const CUSTOMER_ID_STORAGE_KEY = 'webchat_customer_id'\nexport const THREAD_ID_STORAGE_KEY = 'webchat_thread_id'\n","import { actionsMap } from './actions-map'\n\nexport const initialState = {\n availability: null,\n customerId: null,\n threadId: null,\n thread: null,\n messages: [],\n unseenCount: 0,\n agent: null,\n agentStatus: null,\n isAgentTyping: false,\n isChatOpen: false,\n isMobile: window.matchMedia('(max-width: 640px)').matches,\n isKeyboard: false,\n settings: { audio: true, scroll: true }\n}\n\nexport const reducer = (state, action) => {\n const { type, payload } = action\n\n const fn = actionsMap[type]\n\n if (fn) {\n const actionFunction = fn.bind(this, state, payload)\n return actionFunction()\n }\n\n return state\n}\n","import { useContext } from 'react'\n\nimport { AppContext } from './AppProvider.jsx'\n\nexport const useApp = () => useContext(AppContext)\n","export const useChatSdk = sdk => {\n const connect = async () => sdk.authorize()\n\n const fetchCustomerId = async () => {\n const response = await connect()\n return response?.consumerIdentity.idOnExternalPlatform\n }\n\n const fetchThread = async threadId => {\n await connect()\n return sdk.getThread(threadId)\n }\n\n const fetchMessages = async (thread, threadId) => {\n await connect()\n\n const recovered = await thread.recover(threadId)\n\n const allMessages = []\n let fetchedMessages = recovered.messages\n\n while (fetchedMessages.length) {\n fetchedMessages.map(msg => allMessages.push(msg))\n\n try {\n const response = await thread.loadMoreMessages()\n fetchedMessages = response.data.messages\n } catch (err) {\n fetchedMessages = []\n }\n }\n\n return allMessages\n }\n\n return { connect, fetchCustomerId, fetchThread, fetchMessages }\n}\n","module.exports = require(\"@nice-devone/nice-cxone-chat-web-sdk\");","module.exports = require(\"luxon\");","module.exports = require(\"react\");","module.exports = require(\"react-dom\");","module.exports = require(\"react-dom/client\");","module.exports = require(\"uuid\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import React from 'react'\nimport { createRoot } from 'react-dom/client'\nimport { ChatSdk } from '@nice-devone/nice-cxone-chat-web-sdk'\nimport { Availability } from './components/availability/availability.jsx'\nimport { checkAvailability } from './lib/check-availability'\nimport { AppProvider } from './store/AppProvider.jsx'\nimport { CUSTOMER_ID_STORAGE_KEY } from './store/constants.js'\n\nexport async function init (container, options) {\n const sdk = new ChatSdk({\n brandId: options.brandId,\n channelId: options.channelId,\n customerId: window.localStorage.getItem(CUSTOMER_ID_STORAGE_KEY) || '',\n environment: options.environment\n })\n\n const root = createRoot(container)\n let availability\n try {\n const result = await checkAvailability(options.availabilityEndpoint)\n availability = result.availability\n } catch (e) {\n availability = 'UNAVAILABLE'\n }\n root.render(\n <AppProvider sdk={sdk} availability={availability} options={options}>\n <Availability />\n </AppProvider>\n )\n}\n"],"names":["React","useEffect","useRef","useState","classnames","Panel","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","RightButtonComponent","history","state","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","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":""}
|
package/package.json
CHANGED
|
@@ -3,15 +3,24 @@ import React, { useEffect, useRef, useState } from 'react'
|
|
|
3
3
|
import { classnames } from '../../lib/classnames'
|
|
4
4
|
import { Panel } from '../panel/panel.jsx'
|
|
5
5
|
import { useApp } from '../../store/useApp'
|
|
6
|
+
import { historyPushState, historyReplaceState } from '../../lib/history.js'
|
|
6
7
|
|
|
7
8
|
export function Availability () {
|
|
8
|
-
const { availability, isChatOpen, setChatVisibility, unseenCount, threadId } = useApp()
|
|
9
|
+
const { availability, isChatOpen, setChatVisibility, unseenCount, threadId, setUnseenCount } = useApp()
|
|
9
10
|
|
|
10
11
|
const [isFixed, setIsFixed] = useState(false)
|
|
11
12
|
const buttonRef = useRef()
|
|
12
13
|
|
|
13
|
-
const onClick =
|
|
14
|
+
const onClick = e => {
|
|
15
|
+
e.preventDefault()
|
|
16
|
+
setUnseenCount(0)
|
|
14
17
|
setChatVisibility(!isChatOpen)
|
|
18
|
+
|
|
19
|
+
if (!isChatOpen) {
|
|
20
|
+
historyPushState()
|
|
21
|
+
} else {
|
|
22
|
+
historyReplaceState()
|
|
23
|
+
}
|
|
15
24
|
}
|
|
16
25
|
|
|
17
26
|
const onKeyDown = event => {
|
|
@@ -22,6 +31,7 @@ export function Availability () {
|
|
|
22
31
|
|
|
23
32
|
const onKeyUp = event => {
|
|
24
33
|
if (event.key === ' ') {
|
|
34
|
+
setUnseenCount(0)
|
|
25
35
|
setChatVisibility(!isChatOpen)
|
|
26
36
|
}
|
|
27
37
|
}
|
|
@@ -55,10 +65,10 @@ export function Availability () {
|
|
|
55
65
|
document.body.classList.toggle('wc-u-scroll-padding', isFixed)
|
|
56
66
|
}, [isFixed])
|
|
57
67
|
|
|
58
|
-
let TextComponent = (<>Show
|
|
68
|
+
let TextComponent = (<>Show chat</>)
|
|
59
69
|
|
|
60
70
|
if (!threadId) {
|
|
61
|
-
TextComponent = (<>Start
|
|
71
|
+
TextComponent = (<>Start chat</>)
|
|
62
72
|
}
|
|
63
73
|
|
|
64
74
|
switch (availability) {
|
|
@@ -72,12 +82,13 @@ export function Availability () {
|
|
|
72
82
|
<div className='wc-availability__inner'>
|
|
73
83
|
<a
|
|
74
84
|
className='wc-availability__link'
|
|
75
|
-
role='button'
|
|
76
85
|
href='#webchat'
|
|
77
86
|
draggable='false'
|
|
78
87
|
onClick={onClick}
|
|
79
88
|
onKeyUp={onKeyUp}
|
|
80
89
|
onKeyDown={onKeyDown}
|
|
90
|
+
role='button'
|
|
91
|
+
data-module='govuk-button'
|
|
81
92
|
>
|
|
82
93
|
{TextComponent}
|
|
83
94
|
{unseenCount > 0 && !isChatOpen ? <span className='wc-availability__unseen'>{unseenCount}</span> : null}
|
|
@@ -1,19 +1,30 @@
|
|
|
1
1
|
import React from 'react'
|
|
2
2
|
import { useApp } from '../../store/useApp.js'
|
|
3
|
+
import { historyReplaceState } from '../../lib/history.js'
|
|
3
4
|
|
|
4
5
|
export function PanelHeader () {
|
|
5
|
-
const { thread, setChatVisibility, setUnseenCount,
|
|
6
|
+
const { thread, threadId, setChatVisibility, setUnseenCount, isMobile } = useApp()
|
|
6
7
|
|
|
7
8
|
const onClose = e => {
|
|
8
9
|
e.preventDefault()
|
|
9
10
|
setChatVisibility(false)
|
|
11
|
+
historyReplaceState()
|
|
12
|
+
|
|
10
13
|
if (threadId) {
|
|
11
14
|
thread?.lastMessageSeen()
|
|
12
15
|
setUnseenCount(0)
|
|
13
16
|
}
|
|
14
17
|
}
|
|
15
18
|
|
|
16
|
-
|
|
19
|
+
const BackButtonComponent = (
|
|
20
|
+
<button className='wc-header__back' aria-label='Close the webchat' onClick={onClose}>
|
|
21
|
+
<svg aria-hidden='true' focusable='false' width='20' height='20' viewBox='0 0 20 20'>
|
|
22
|
+
<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' />
|
|
23
|
+
</svg>
|
|
24
|
+
</button>
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
const CloseButtonComponent = (
|
|
17
28
|
<button className='wc-header__close' aria-label='Close the webchat' onClick={onClose}>
|
|
18
29
|
<svg aria-hidden='true' focusable='false' width='20' height='20' viewBox='0 0 20 20'>
|
|
19
30
|
<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' />
|
|
@@ -21,23 +32,41 @@ export function PanelHeader () {
|
|
|
21
32
|
</button>
|
|
22
33
|
)
|
|
23
34
|
|
|
35
|
+
const MinimiseButtonComponent = (
|
|
36
|
+
<button className='wc-header__hide' aria-label='Minimise the webchat' onClick={onClose}>
|
|
37
|
+
<svg aria-hidden='true' focusable='false' width='20' height='20' viewBox='0 0 20 20'>
|
|
38
|
+
<path d='M10 14.4l-7-7L4.4 6l5.6 5.6L15.6 6 17 7.4l-7 7z' fill='currentColor' />
|
|
39
|
+
</svg>
|
|
40
|
+
</button>
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
let RightButtonComponent = CloseButtonComponent
|
|
44
|
+
|
|
24
45
|
if (thread) {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
46
|
+
RightButtonComponent = MinimiseButtonComponent
|
|
47
|
+
|
|
48
|
+
if (isMobile && !window.history.state) {
|
|
49
|
+
RightButtonComponent = MinimiseButtonComponent
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
if (!thread && isMobile && !window.history.state) {
|
|
54
|
+
RightButtonComponent = CloseButtonComponent
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
if (isMobile && window.history.state) {
|
|
58
|
+
RightButtonComponent = null
|
|
32
59
|
}
|
|
33
60
|
|
|
34
61
|
return (
|
|
35
62
|
<div className='wc-header'>
|
|
63
|
+
{window.history.state ? BackButtonComponent : null}
|
|
64
|
+
|
|
36
65
|
<h2 id='wc-header-title' className='wc-header__title'>
|
|
37
66
|
Floodline Webchat
|
|
38
67
|
</h2>
|
|
39
68
|
|
|
40
|
-
{
|
|
69
|
+
{RightButtonComponent}
|
|
41
70
|
</div>
|
|
42
71
|
)
|
|
43
72
|
}
|
|
@@ -12,6 +12,7 @@ import { Feedback } from '../screens/feedback.jsx'
|
|
|
12
12
|
import { useApp } from '../../store/useApp.js'
|
|
13
13
|
import { useChatSdk } from '../../store/useChatSdk.js'
|
|
14
14
|
import { useFocusedElements } from '../../hooks/useFocusedElements.js'
|
|
15
|
+
import { historyReplaceState } from '../../lib/history.js'
|
|
15
16
|
|
|
16
17
|
export function Panel () {
|
|
17
18
|
const { sdk, availability, thread, threadId, setThread, setThreadId, setChatVisibility, setMessages, setUnseenCount, isMobile } = useApp()
|
|
@@ -28,6 +29,7 @@ export function Panel () {
|
|
|
28
29
|
setUnseenCount(0)
|
|
29
30
|
}
|
|
30
31
|
setChatVisibility(false)
|
|
32
|
+
historyReplaceState()
|
|
31
33
|
}
|
|
32
34
|
}, [thread, threadId, setUnseenCount, setChatVisibility])
|
|
33
35
|
|
|
@@ -48,10 +50,10 @@ export function Panel () {
|
|
|
48
50
|
* Initializes the eventListener for pressing the escape key
|
|
49
51
|
*/
|
|
50
52
|
useEffect(() => {
|
|
51
|
-
|
|
53
|
+
document.addEventListener('keydown', onEscapeKey)
|
|
52
54
|
|
|
53
55
|
return () => {
|
|
54
|
-
document.removeEventListener('keydown',
|
|
56
|
+
document.removeEventListener('keydown', onEscapeKey)
|
|
55
57
|
}
|
|
56
58
|
}, [onEscapeKey, setChatVisibility])
|
|
57
59
|
|
|
@@ -73,7 +73,8 @@
|
|
|
73
73
|
}
|
|
74
74
|
|
|
75
75
|
&__close,
|
|
76
|
-
&__hide
|
|
76
|
+
&__hide,
|
|
77
|
+
&__back {
|
|
77
78
|
display: flex;
|
|
78
79
|
justify-content: center;
|
|
79
80
|
color: govuk-colour('white');
|
|
@@ -87,6 +88,15 @@
|
|
|
87
88
|
outline: 3px solid $govuk-focus-colour;
|
|
88
89
|
}
|
|
89
90
|
}
|
|
91
|
+
|
|
92
|
+
&__back {
|
|
93
|
+
margin: 0;
|
|
94
|
+
display: flex;
|
|
95
|
+
|
|
96
|
+
@include mq ($from: 'tablet') {
|
|
97
|
+
display: none
|
|
98
|
+
}
|
|
99
|
+
}
|
|
90
100
|
}
|
|
91
101
|
|
|
92
102
|
.wc-body {
|
|
@@ -60,7 +60,7 @@ export function Settings ({ onCancel }) {
|
|
|
60
60
|
|
|
61
61
|
<div className='govuk-button-group'>
|
|
62
62
|
<a id='settings-save' href='#' className='wc-button govuk-button' data-module='govuk-button' onClick={onSave}>Save</a>
|
|
63
|
-
<a id='settings-cancel' href='#' className='wc-link govuk-link' data-module='govuk-button' onClick={onCancel}>Cancel</a>
|
|
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>
|
|
66
66
|
</div>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export const historyPushState = () => {
|
|
2
|
+
const url = window.location.href.split('#')[0]
|
|
3
|
+
window.history.pushState({ history: true }, null, `${url}#webchat`)
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
export const historyReplaceState = () => {
|
|
7
|
+
if (window.history.state?.history) {
|
|
8
|
+
window.history.back()
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
const url = window.location.href.split('#')[0]
|
|
12
|
+
window.history.replaceState(null, null, url)
|
|
13
|
+
}
|
|
@@ -91,20 +91,33 @@ export const AppProvider = ({ sdk, availability, options, children }) => {
|
|
|
91
91
|
setCustomerId(window.localStorage.getItem(CUSTOMER_ID_STORAGE_KEY))
|
|
92
92
|
setThreadId(window.localStorage.getItem(THREAD_ID_STORAGE_KEY))
|
|
93
93
|
setSettings(JSON.parse(window.localStorage.getItem(SETTINGS_STORAGE_KEY)) || state.settings)
|
|
94
|
+
}, [])
|
|
94
95
|
|
|
96
|
+
/**
|
|
97
|
+
* Set browser history on start chat click
|
|
98
|
+
*/
|
|
99
|
+
useEffect(() => {
|
|
95
100
|
if (window.location.hash === '#webchat') {
|
|
96
101
|
setChatVisibility(true)
|
|
97
102
|
}
|
|
103
|
+
|
|
104
|
+
const onBrowserNavigation = window.addEventListener('popstate', () => {
|
|
105
|
+
if (window.location.hash === '#webchat') {
|
|
106
|
+
setChatVisibility(true)
|
|
107
|
+
} else {
|
|
108
|
+
setChatVisibility(false)
|
|
109
|
+
}
|
|
110
|
+
})
|
|
111
|
+
|
|
112
|
+
return () => {
|
|
113
|
+
window.removeEventListener('popstate', onBrowserNavigation)
|
|
114
|
+
}
|
|
98
115
|
}, [])
|
|
99
116
|
|
|
100
117
|
/**
|
|
101
118
|
* State update functions
|
|
102
119
|
*/
|
|
103
120
|
const setChatVisibility = payload => {
|
|
104
|
-
if (!payload) {
|
|
105
|
-
window.location.hash = ''
|
|
106
|
-
}
|
|
107
|
-
|
|
108
121
|
dispatch({ type: 'SET_CHAT_VISIBILITY', payload })
|
|
109
122
|
}
|
|
110
123
|
|