@defra/flood-webchat 0.0.1-beta.19 → 0.0.1-beta.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/client.js CHANGED
@@ -24,10 +24,10 @@ __webpack_require__.r(__webpack_exports__);
24
24
  function Availability() {
25
25
  const {
26
26
  availability,
27
- messages,
28
27
  isChatOpen,
29
28
  setChatVisibility,
30
- unseenCount
29
+ unseenCount,
30
+ threadId
31
31
  } = (0,_store_useApp__WEBPACK_IMPORTED_MODULE_3__.useApp)();
32
32
  const [isFixed, setIsFixed] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
33
33
  const buttonRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)();
@@ -47,7 +47,7 @@ function Availability() {
47
47
  const intersectionCallback = entries => {
48
48
  const [entry] = entries;
49
49
  const isBelowFold = !entry.isIntersecting && entry.boundingClientRect.top > 0;
50
- setIsFixed(!isChatOpen && isBelowFold);
50
+ setIsFixed(!isChatOpen && isBelowFold && threadId);
51
51
  };
52
52
  (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
53
53
  const observer = new window.IntersectionObserver(intersectionCallback, {
@@ -68,7 +68,7 @@ function Availability() {
68
68
  document.body.classList.toggle('wc-scroll-padding', isFixed);
69
69
  }, [isFixed]);
70
70
  let TextComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, "Show Chat");
71
- if (!messages.length) {
71
+ if (!threadId) {
72
72
  TextComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, "Start Chat");
73
73
  }
74
74
  switch (availability) {
@@ -416,8 +416,10 @@ function PanelHeader() {
416
416
  const onClose = e => {
417
417
  e.preventDefault();
418
418
  setChatVisibility(false);
419
- thread.lastMessageSeen();
420
- setUnseenCount(0);
419
+ if (thread) {
420
+ thread.lastMessageSeen();
421
+ setUnseenCount(0);
422
+ }
421
423
  };
422
424
  let ButtonComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", {
423
425
  className: "wc-header__close",
@@ -479,9 +481,13 @@ __webpack_require__.r(__webpack_exports__);
479
481
  /* harmony import */ var _screens_unavailable_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../screens/unavailable.jsx */ "./src/client/components/screens/unavailable.jsx");
480
482
  /* harmony import */ var _screens_end_chat_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../screens/end-chat.jsx */ "./src/client/components/screens/end-chat.jsx");
481
483
  /* harmony import */ var _screens_settings_jsx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../screens/settings.jsx */ "./src/client/components/screens/settings.jsx");
482
- /* harmony import */ var _store_useApp_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../store/useApp.js */ "./src/client/store/useApp.js");
483
- /* harmony import */ var _store_useChatSdk_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../store/useChatSdk.js */ "./src/client/store/useChatSdk.js");
484
- /* harmony import */ var _hooks_useFocusedElements_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../hooks/useFocusedElements.js */ "./src/client/hooks/useFocusedElements.js");
484
+ /* harmony import */ var _screens_feedback_jsx__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../screens/feedback.jsx */ "./src/client/components/screens/feedback.jsx");
485
+ /* harmony import */ var _store_useApp_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../store/useApp.js */ "./src/client/store/useApp.js");
486
+ /* harmony import */ var _store_useChatSdk_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../store/useChatSdk.js */ "./src/client/store/useChatSdk.js");
487
+ /* harmony import */ var _hooks_useFocusedElements_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../hooks/useFocusedElements.js */ "./src/client/hooks/useFocusedElements.js");
488
+ /* harmony import */ var _screens_end_feedback_jsx__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../screens/end-feedback.jsx */ "./src/client/components/screens/end-feedback.jsx");
489
+
490
+
485
491
 
486
492
 
487
493
 
@@ -504,13 +510,13 @@ function Panel() {
504
510
  setChatVisibility,
505
511
  setMessages,
506
512
  setUnseenCount
507
- } = (0,_store_useApp_js__WEBPACK_IMPORTED_MODULE_8__.useApp)();
513
+ } = (0,_store_useApp_js__WEBPACK_IMPORTED_MODULE_9__.useApp)();
508
514
  const {
509
515
  fetchThread,
510
516
  fetchMessages
511
- } = (0,_store_useChatSdk_js__WEBPACK_IMPORTED_MODULE_9__.useChatSdk)(sdk);
517
+ } = (0,_store_useChatSdk_js__WEBPACK_IMPORTED_MODULE_10__.useChatSdk)(sdk);
512
518
  const [screen, setScreen] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(threadId ? 2 : 0);
513
- (0,_hooks_useFocusedElements_js__WEBPACK_IMPORTED_MODULE_10__.useFocusedElements)(screen);
519
+ (0,_hooks_useFocusedElements_js__WEBPACK_IMPORTED_MODULE_11__.useFocusedElements)(screen);
514
520
 
515
521
  /**
516
522
  * Initializes the eventListener for pressing the escape key
@@ -551,6 +557,10 @@ function Panel() {
551
557
  }, [thread, threadId]);
552
558
  const onEscapeKey = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(e => {
553
559
  if (e.key === 'Escape' || e.key === 'Esc') {
560
+ if (thread) {
561
+ thread.lastMessageSeen();
562
+ setUnseenCount(0);
563
+ }
554
564
  setChatVisibility(false);
555
565
  }
556
566
  }, []);
@@ -562,7 +572,9 @@ function Panel() {
562
572
  const goToRequestChatScreen = handleScreenChange(1);
563
573
  const goToChatScreen = handleScreenChange(2);
564
574
  const goToEndChatScreen = handleScreenChange(3);
575
+ const goToFeedbackScreen = handleScreenChange(4);
565
576
  const goToSettingsScreen = handleScreenChange(5);
577
+ const goToEndFeedbackScreen = handleScreenChange(6);
566
578
  let ScreenComponent;
567
579
  switch (screen) {
568
580
  case 0:
@@ -583,7 +595,14 @@ function Panel() {
583
595
  break;
584
596
  case 3:
585
597
  ScreenComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_screens_end_chat_jsx__WEBPACK_IMPORTED_MODULE_6__.EndChat, {
586
- onChatScreen: goToChatScreen
598
+ onChatScreen: goToChatScreen,
599
+ onEndChatConfirm: goToFeedbackScreen
600
+ });
601
+ break;
602
+ case 4:
603
+ ScreenComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_screens_feedback_jsx__WEBPACK_IMPORTED_MODULE_8__.Feedback, {
604
+ onCancel: () => setChatVisibility(false),
605
+ onConfirmSubmit: goToEndFeedbackScreen
587
606
  });
588
607
  break;
589
608
  case 5:
@@ -591,6 +610,11 @@ function Panel() {
591
610
  onCancel: goToChatScreen
592
611
  });
593
612
  break;
613
+ case 6:
614
+ ScreenComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_screens_end_feedback_jsx__WEBPACK_IMPORTED_MODULE_12__.EndFeedback, {
615
+ onClose: () => setChatVisibility(false)
616
+ });
617
+ break;
594
618
  default:
595
619
  ScreenComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_screens_pre_chat_jsx__WEBPACK_IMPORTED_MODULE_2__.PreChat, {
596
620
  onContinue: goToRequestChatScreen
@@ -625,11 +649,33 @@ __webpack_require__.r(__webpack_exports__);
625
649
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
626
650
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
627
651
  /* harmony import */ var _panel_panel_header_jsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../panel/panel-header.jsx */ "./src/client/components/panel/panel-header.jsx");
652
+ /* harmony import */ var _store_useApp_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../store/useApp.js */ "./src/client/store/useApp.js");
653
+
628
654
 
629
655
 
630
656
  function EndChat({
631
- onChatScreen
657
+ onChatScreen,
658
+ onEndChatConfirm
632
659
  }) {
660
+ const {
661
+ setCustomerId,
662
+ setThreadId,
663
+ setMessages,
664
+ agentStatus,
665
+ thread
666
+ } = (0,_store_useApp_js__WEBPACK_IMPORTED_MODULE_2__.useApp)();
667
+ const confirmEndChat = async e => {
668
+ e.preventDefault();
669
+ setThreadId();
670
+ setMessages([]);
671
+ setCustomerId();
672
+
673
+ // End chat if still open
674
+ if (agentStatus !== 'closed') {
675
+ thread.endChat();
676
+ }
677
+ onEndChatConfirm(e);
678
+ };
633
679
  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_panel_panel_header_jsx__WEBPACK_IMPORTED_MODULE_1__.PanelHeader, null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
634
680
  className: "wc-body"
635
681
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("h3", {
@@ -640,7 +686,9 @@ function EndChat({
640
686
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
641
687
  href: "#",
642
688
  className: "govuk-button govuk-!-font-size-16",
643
- "data-module": "govuk-button"
689
+ "data-module": "govuk-button",
690
+ id: "confirmEndChat",
691
+ onClick: confirmEndChat
644
692
  }, "Yes, end chat"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
645
693
  href: "#",
646
694
  className: "govuk-link govuk-!-font-size-16",
@@ -650,6 +698,218 @@ function EndChat({
650
698
 
651
699
  /***/ }),
652
700
 
701
+ /***/ "./src/client/components/screens/end-feedback.jsx":
702
+ /*!********************************************************!*\
703
+ !*** ./src/client/components/screens/end-feedback.jsx ***!
704
+ \********************************************************/
705
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
706
+
707
+ __webpack_require__.r(__webpack_exports__);
708
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
709
+ /* harmony export */ EndFeedback: () => (/* binding */ EndFeedback)
710
+ /* harmony export */ });
711
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
712
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
713
+ /* harmony import */ var _panel_panel_header_jsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../panel/panel-header.jsx */ "./src/client/components/panel/panel-header.jsx");
714
+
715
+
716
+ function EndFeedback({
717
+ onClose
718
+ }) {
719
+ return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_panel_panel_header_jsx__WEBPACK_IMPORTED_MODULE_1__.PanelHeader, null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
720
+ className: "wc-body"
721
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("h3", {
722
+ id: "wc-subtitle",
723
+ class: "govuk-heading-m"
724
+ }, "Thank you for your feedback"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
725
+ href: "#",
726
+ role: "button",
727
+ draggable: "false",
728
+ "data-module": "govuk-button",
729
+ "data-wc-focus-visible": true,
730
+ "data-wc-close-btn": true,
731
+ onClick: onClose
732
+ }, "Close window"))));
733
+ }
734
+
735
+ /***/ }),
736
+
737
+ /***/ "./src/client/components/screens/feedback.jsx":
738
+ /*!****************************************************!*\
739
+ !*** ./src/client/components/screens/feedback.jsx ***!
740
+ \****************************************************/
741
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
742
+
743
+ __webpack_require__.r(__webpack_exports__);
744
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
745
+ /* harmony export */ Feedback: () => (/* binding */ Feedback)
746
+ /* harmony export */ });
747
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
748
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
749
+ /* harmony import */ var _panel_panel_header_jsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../panel/panel-header.jsx */ "./src/client/components/panel/panel-header.jsx");
750
+
751
+
752
+ function Feedback({
753
+ onCancel,
754
+ onConfirmSubmit
755
+ }) {
756
+ const feedbackSubmit = async e => {
757
+ e.preventDefault();
758
+ console.log('feedback submitted');
759
+ onConfirmSubmit(e);
760
+ };
761
+ return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_panel_panel_header_jsx__WEBPACK_IMPORTED_MODULE_1__.PanelHeader, null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
762
+ className: "wc-body"
763
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("h3", {
764
+ id: "wc-subtitle",
765
+ className: "govuk-heading-s"
766
+ }, "Give Feedback on Floodline webchat"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", null, "Please note we\u2019re unable to respond to feedback."), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
767
+ className: "govuk-form-group"
768
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("fieldset", {
769
+ className: "govuk-fieldset govuk-!-margin-bottom-4"
770
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("legend", {
771
+ className: "govuk-fieldset-heading govuk-fieldset__legend"
772
+ }, "Overall, how did you feel about webchat?"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
773
+ className: "govuk-radios govuk-radios--small",
774
+ "data-module": "govuk-radios"
775
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
776
+ className: "govuk-radios__item"
777
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
778
+ id: "very-satisfied",
779
+ name: "satisfaction",
780
+ type: "radio",
781
+ className: "govuk-radios__input",
782
+ value: "Very satisfied"
783
+ }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
784
+ className: "govuk-label govuk-radios__label",
785
+ for: "very-satisfied"
786
+ }, "Very satisfied")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
787
+ className: "govuk-radios__item"
788
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
789
+ id: "satisfied",
790
+ name: "satisfaction",
791
+ type: "radio",
792
+ className: "govuk-radios__input",
793
+ value: "Satisfied"
794
+ }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
795
+ className: "govuk-label govuk-radios__label",
796
+ for: "satisfied"
797
+ }, "Satisfied")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
798
+ className: "govuk-radios__item"
799
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
800
+ id: "no-opinion",
801
+ name: "satisfaction",
802
+ type: "radio",
803
+ className: "govuk-radios__input",
804
+ value: "No opinion"
805
+ }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
806
+ className: "govuk-label govuk-radios__label",
807
+ for: "no-opinion"
808
+ }, "No Opinion")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
809
+ className: "govuk-radios__item"
810
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
811
+ id: "dissatisfied",
812
+ name: "satisfaction",
813
+ type: "radio",
814
+ className: "govuk-radios__input",
815
+ value: "Dissatisfied"
816
+ }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
817
+ className: "govuk-label govuk-radios__label",
818
+ for: "dissatisfied"
819
+ }, "Dissatisfied")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
820
+ className: "govuk-radios__item"
821
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
822
+ id: "very-dissatisfied",
823
+ name: "satisfaction",
824
+ type: "radio",
825
+ className: "govuk-radios__input",
826
+ value: "Very dissatisfied"
827
+ }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
828
+ className: "govuk-label govuk-radios__label",
829
+ for: "very-dissatisfied"
830
+ }, "Very dissatisfied")))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("fieldset", {
831
+ className: "govuk-fieldset govuk-!-margin-bottom-4"
832
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("legend", {
833
+ className: "govuk-fieldset__legend"
834
+ }, "Did the adviser answer your question?"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
835
+ className: "govuk-radios govuk-radios--small",
836
+ "data-module": "govuk-radios"
837
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
838
+ className: "govuk-radios__item"
839
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
840
+ id: "answer-yes",
841
+ name: "answer",
842
+ type: "radio",
843
+ className: "govuk-radios__input",
844
+ value: "Yes"
845
+ }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
846
+ className: "govuk-label govuk-radios__label",
847
+ for: "answer-yes"
848
+ }, "Yes")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
849
+ className: "govuk-radios__item"
850
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
851
+ id: "answer-no",
852
+ name: "answer",
853
+ type: "radio",
854
+ className: "govuk-radios__input",
855
+ value: "No"
856
+ }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
857
+ className: "govuk-label govuk-radios__label",
858
+ for: "answer-no"
859
+ }, "No")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
860
+ className: "govuk-radios__item"
861
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
862
+ id: "answer-partly",
863
+ name: "answer",
864
+ type: "radio",
865
+ className: "govuk-radios__input",
866
+ value: "Partly"
867
+ }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
868
+ className: "govuk-label govuk-radios__label",
869
+ for: "answer-partly"
870
+ }, "Partly"))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
871
+ className: "govuk-form-group"
872
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
873
+ className: "govuk-label",
874
+ for: "improvements"
875
+ }, "How can we improve webchat? (optional)"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("textarea", {
876
+ className: "govuk-textarea govuk-!-margin-bottom-4",
877
+ id: "improvements",
878
+ name: "improvements",
879
+ rows: "5"
880
+ })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
881
+ className: "govuk-form-group"
882
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
883
+ className: "wc-fieldset-heading govuk-label",
884
+ for: "research"
885
+ }, "Tell us your email address if you want to take part in user research (optional)"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
886
+ id: "research-hint",
887
+ class: "wc-hint govuk-hint"
888
+ }, "We will not share your email address or use it for anything else. We\u2019ll delete it after 2 years."), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
889
+ className: "govuk-input govuk-!-margin-bottom-4",
890
+ id: "research",
891
+ name: "research",
892
+ "aria-describedby": "research-hint",
893
+ type: "text"
894
+ })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
895
+ className: "govuk-button-group"
896
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
897
+ id: "feedback-save",
898
+ href: "#",
899
+ className: "govuk-button govuk-!-font-size-16",
900
+ "data-module": "govuk-button",
901
+ onClick: feedbackSubmit
902
+ }, "Submit"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
903
+ id: "feedback-cancel",
904
+ href: "#",
905
+ className: "govuk-link govuk-!-font-size-16",
906
+ "data-module": "govuk-button",
907
+ onClick: onCancel
908
+ }, "Cancel"))));
909
+ }
910
+
911
+ /***/ }),
912
+
653
913
  /***/ "./src/client/components/screens/pre-chat.jsx":
654
914
  /*!****************************************************!*\
655
915
  !*** ./src/client/components/screens/pre-chat.jsx ***!
@@ -792,6 +1052,7 @@ function RequestChat({
792
1052
  setCustomerId(customerId);
793
1053
  setThreadId(threadId);
794
1054
  setThread(thread);
1055
+ thread.setCustomField('threadid', threadId);
795
1056
  } catch (err) {
796
1057
  console.log('[Request Chat Error]', err);
797
1058
  }
@@ -1311,6 +1572,9 @@ const AppProvider = ({
1311
1572
  });
1312
1573
  };
1313
1574
  (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
1575
+ sdk.onChatEvent('SetConsumerContactCustomFields', () => {
1576
+ console.log('Custom field set');
1577
+ });
1314
1578
  sdk.onChatEvent(_nice_devone_nice_cxone_chat_web_sdk__WEBPACK_IMPORTED_MODULE_1__.ChatEvent.LIVECHAT_RECOVERED, onLiveChatRecovered);
1315
1579
  sdk.onChatEvent(_nice_devone_nice_cxone_chat_web_sdk__WEBPACK_IMPORTED_MODULE_1__.ChatEvent.MESSAGE_CREATED, onMessageCreated);
1316
1580
  sdk.onChatEvent(_nice_devone_nice_cxone_chat_web_sdk__WEBPACK_IMPORTED_MODULE_1__.ChatEvent.AGENT_TYPING_STARTED, onAgentTypingStarted);
@@ -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/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, messages, isChatOpen, setChatVisibility, unseenCount } = 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)\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-scroll-padding', isFixed)\n document.body.classList.toggle('wc-scroll-padding', isFixed)\n }, [isFixed])\n\n let TextComponent = (<>Show Chat</>)\n\n if (!messages.length) {\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 >\n {TextComponent}\n {unseenCount > 0 && !isChatOpen ? <span className='wc-open-btn__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 } = useApp()\n\n const [userMessage, setUserMessage] = useState('')\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 = e => {\n e.preventDefault()\n\n if (messageRef.current.value.length === 0) {\n return\n }\n\n try {\n thread.sendTextMessage(messageRef.current.value.trim())\n } catch (err) {\n console.log('[Chat Error] sendMessage', err)\n }\n\n setUserMessage('')\n }\n\n const 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 saveChatLink.click()\n }\n\n return (\n <>\n <PanelHeader />\n\n <div className='wc-status'>\n <p className='wc-status__availability govuk-body-s'>{connectionHeadlineText}</p>\n <a className='wc-status__link govuk-!-font-size-16' href='#' data-module='govuk-button' onClick={onEndChatScreen}>End chat</a>\n </div>\n\n <div className='wc-body'>\n <div className='wc-chat__body'>\n <ul className='wc-chat__messages'>\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 govuk-body outbound'>\n <div className='wc-chat__from govuk-!-font-size-14'>{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 </div>\n\n <PanelFooter>\n <div className='wc-footer__input'>\n <form className='wc-form' noValidate>\n <label className='govuk-label wc-form__label govuk-!-font-size-16' 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 govuk-textarea govuk-!-font-size-16'\n id='wc-form-textarea'\n name='message'\n onChange={onChange}\n value={userMessage}\n />\n\n <input\n type='submit'\n className='wc-form__button govuk-button govuk-!-font-size-16'\n value='Send'\n data-prevent-double-click='true'\n onClick={sendMessage}\n />\n </form>\n </div>\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='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'>\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 govuk-body', outbound ? 'outbound' : 'inbound')}>\n <div className='wc-chat__from govuk-!-font-size-14'>\n {messageOwnerSameAsPrevious ? null : <span>{outbound ? message.assignee : 'You'}</span>}\n <span className='govuk-visually-hidden'>:</span>\n </div>\n <p className={classnames('wc-chat__text', 'govuk-body-s', outbound ? 'outbound' : 'inbound')}>\n {message.text}\n </p>\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 } = useApp()\n\n const onClose = e => {\n e.preventDefault()\n setChatVisibility(false)\n thread.lastMessageSeen()\n setUnseenCount(0)\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 govuk-heading-s'>\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'\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 } = useApp()\n const { fetchThread, fetchMessages } = useChatSdk(sdk)\n\n const [screen, setScreen] = useState(threadId ? 2 : 0)\n\n useFocusedElements(screen)\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 }, [])\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 onEscapeKey = useCallback(e => {\n if (e.key === 'Escape' || e.key === 'Esc') {\n setChatVisibility(false)\n }\n }, [])\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 goToSettingsScreen = handleScreenChange(5)\n\n let ScreenComponent\n\n switch (screen) {\n case 0:\n ScreenComponent = <PreChat onContinue={goToRequestChatScreen} />\n break\n case 1:\n ScreenComponent = <RequestChat onPreChatScreen={goToPreChatScreen} />\n break\n case 2:\n ScreenComponent = <Chat onSettingsScreen={goToSettingsScreen} onEndChatScreen={goToEndChatScreen} />\n break\n case 3:\n ScreenComponent = <EndChat onChatScreen={goToChatScreen} />\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 {ScreenComponent}\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'\n\nexport function EndChat ({ onChatScreen }) {\n return (\n <>\n <PanelHeader />\n <div className='wc-body'>\n <h3 className='govuk-heading-s' aria-live='polite'>Are you sure you want to end the chat?</h3>\n <div className='govuk-button-group'>\n <a href='#' className='govuk-button govuk-!-font-size-16' data-module='govuk-button'>Yes, end chat</a>\n <a href='#' className='govuk-link govuk-!-font-size-16' onClick={onChatScreen}>No, resume chat</a>\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 <h3 className='govuk-heading-s' aria-live='polite'>What you can use webchat for</h3>\n <p className='govuk-body-s'>Webchat lets you talk directly to a Floodline adviser.</p>\n\n <p className='govuk-body-s'>You can use webchat to get:</p>\n <ul className='govuk-list govuk-list--bullet govuk-body-s'>\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\n <p className='govuk-body-s'>\n {\n 'There are other ways to '\n }\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 {\n ' and '\n }\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 className='govuk-body-s'>\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 govuk-!-font-size-16' data-module='govuk-button' onClick={onContinue}>Continue</button>\n\n <h3 className='govuk-heading-s'>Other flood information</h3>\n\n <p className='govuk-body-s'>Call Floodline for all other flood and flood warning information.</p>\n <p className='govuk-body-s'>\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 </>\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\n const [errors, setErrors] = useState({})\n const [questionLength, setQuestionLength] = useState(0)\n\n const nameRef = useRef()\n const questionRef = useRef()\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 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 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 } catch (err) {\n console.log('[Request Chat Error]', err)\n }\n }\n\n setErrors(errs)\n }\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 return (\n <>\n <PanelHeader />\n\n <div className='wc-body'>\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='govuk-heading-s' aria-live='polite'>\n Your name and question\n </h3>\n\n <form>\n <div className={classnames('govuk-form-group', errors.name && 'govuk-form-group--error')}>\n <label className='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('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='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='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('govuk-textarea', 'govuk-js-character-count', !isQuestionLengthValid || errors.question ? 'govuk-textarea--error' : '')}\n data-testid='request-chat-user-question'\n />\n <div id='wc-question-info' className='govuk-hint govuk-character-count__message' style={{ color: `${!isQuestionLengthValid ? '#d4351c' : ''}` }} aria-hidden='true'>\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 <button\n className='govuk-button govuk-!-margin-top-1 govuk-!-font-size-16'\n data-module='govuk-button'\n onClick={onRequestChat}\n >\n Request chat\n </button>\n </form>\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 <fieldset className='govuk-fieldset govuk-!-margin-bottom-4'>\n <legend className='govuk-fieldset__legend govuk-fieldset__legend'>\n <h3 id='wc-subtitle' className='govuk-heading-s'>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='govuk-label govuk-checkboxes__label govuk-!-font-size-16' 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='govuk-label govuk-checkboxes__label govuk-!-font-size-16' 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='govuk-button govuk-!-font-size-16' data-module='govuk-button' onClick={onSave}>Save</a>\n <a id='settings-cancel' href='#' className='govuk-link govuk-!-font-size-16' data-module='govuk-button' onClick={onCancel}>Cancel</a>\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 setAriaHidden = bool => {\n for (const node of document.body.children) {\n if (node.id !== 'wc-panel') {\n (bool) ? node.setAttribute('aria-hidden', 'true') : node.removeAttribute('aria-hidden')\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 * as uuid from 'uuid'\nimport { 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')}, (ID: ${uuid.v4().split('-')[0]})\\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 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 }, [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\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}\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 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","messages","isChatOpen","setChatVisibility","unseenCount","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","length","className","ref","href","draggable","PanelHeader","PanelFooter","Message","useTextareaAutosize","formatTranscript","Chat","onEndChatScreen","onSettingsScreen","thread","agent","agentStatus","isAgentTyping","settings","userMessage","setUserMessage","messageRef","scroll","chatBody","querySelector","scrollTop","scrollHeight","label","remove","add","onChange","e","target","value","agentName","nickname","firstName","connectionHeadlineText","sendMessage","sendTextMessage","trim","err","console","log","saveChat","transcript","saveChatLink","setAttribute","click","map","msg","index","id","message","previousMessage","width","height","x","y","viewBox","stroke","cx","cy","r","fill","noValidate","htmlFor","rows","name","type","download","ErrorSummary","errors","errs","Object","keys","goToInput","getAttribute","focus","tabIndex","role","outbound","direction","messageOwnerSameAsPrevious","assignee","text","children","setUnseenCount","onClose","lastMessageSeen","ButtonComponent","focusable","d","useCallback","createPortal","PreChat","RequestChat","Unavailable","EndChat","Settings","useChatSdk","useFocusedElements","sdk","threadId","setThread","setThreadId","setMessages","fetchThread","fetchMessages","screen","setScreen","escapeKeyEvent","addEventListener","onEscapeKey","removeEventListener","recover","fetchedThread","fetchedMessages","handleScreenChange","newScreen","goToPreChatScreen","goToRequestChatScreen","goToChatScreen","goToEndChatScreen","goToSettingsScreen","ScreenComponent","onContinue","onPreChatScreen","onChatScreen","onCancel","Component","rel","uuid","QUESTION_MAX_LENGTH","setCustomerId","fetchCustomerId","setErrors","questionLength","setQuestionLength","nameRef","questionRef","onQuestionChange","onRequestChat","question","v4","customerId","getCustomer","setName","startChat","isQuestionLengthValid","questionLengthRemaining","questionLengthExceeded","questionHint","style","color","setSettings","optionAudio","setOptionAudio","audio","optionScroll","setOptionScroll","onSave","defaultChecked","setAriaHidden","bool","node","removeAttribute","getFocusableElements","selectors","elements","querySelectorAll","join","Array","from","filter","closest","panelElements","setPanelElements","webchatPanelElement","activeElement","shiftKey","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","split","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","onChatEvent","LIVECHAT_RECOVERED","MESSAGE_CREATED","AGENT_TYPING_STARTED","AGENT_TYPING_ENDED","ASSIGNED_AGENT_CHANGED","CONTACT_STATUS_CHANGED","location","hash","store","Provider","setItem","stringify","removeItem","setAvailability","setMessage","reverse","setAgent","setAgentIsTyping","setAgentStatus","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","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/end-feedback.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-scroll-padding', isFixed)\n document.body.classList.toggle('wc-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 >\n {TextComponent}\n {unseenCount > 0 && !isChatOpen ? <span className='wc-open-btn__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 } = useApp()\n\n const [userMessage, setUserMessage] = useState('')\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 = e => {\n e.preventDefault()\n\n if (messageRef.current.value.length === 0) {\n return\n }\n\n try {\n thread.sendTextMessage(messageRef.current.value.trim())\n } catch (err) {\n console.log('[Chat Error] sendMessage', err)\n }\n\n setUserMessage('')\n }\n\n const 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 saveChatLink.click()\n }\n\n return (\n <>\n <PanelHeader />\n\n <div className='wc-status'>\n <p className='wc-status__availability govuk-body-s'>{connectionHeadlineText}</p>\n <a className='wc-status__link govuk-!-font-size-16' href='#' data-module='govuk-button' onClick={onEndChatScreen}>End chat</a>\n </div>\n\n <div className='wc-body'>\n <div className='wc-chat__body'>\n <ul className='wc-chat__messages'>\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 govuk-body outbound'>\n <div className='wc-chat__from govuk-!-font-size-14'>{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 </div>\n\n <PanelFooter>\n <div className='wc-footer__input'>\n <form className='wc-form' noValidate>\n <label className='govuk-label wc-form__label govuk-!-font-size-16' 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 govuk-textarea govuk-!-font-size-16'\n id='wc-form-textarea'\n name='message'\n onChange={onChange}\n value={userMessage}\n />\n\n <input\n type='submit'\n className='wc-form__button govuk-button govuk-!-font-size-16'\n value='Send'\n data-prevent-double-click='true'\n onClick={sendMessage}\n />\n </form>\n </div>\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='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'>\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 govuk-body', outbound ? 'outbound' : 'inbound')}>\n <div className='wc-chat__from govuk-!-font-size-14'>\n {messageOwnerSameAsPrevious ? null : <span>{outbound ? message.assignee : 'You'}</span>}\n <span className='govuk-visually-hidden'>:</span>\n </div>\n <p className={classnames('wc-chat__text', 'govuk-body-s', outbound ? 'outbound' : 'inbound')}>\n {message.text}\n </p>\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 } = useApp()\n\n const onClose = e => {\n e.preventDefault()\n setChatVisibility(false)\n if (thread) {\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 govuk-heading-s'>\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'\nimport { EndFeedback } from '../screens/end-feedback.jsx'\n\nexport function Panel () {\n const { sdk, availability, thread, threadId, setThread, setThreadId, setChatVisibility, setMessages, setUnseenCount } = useApp()\n const { fetchThread, fetchMessages } = useChatSdk(sdk)\n\n const [screen, setScreen] = useState(threadId ? 2 : 0)\n\n useFocusedElements(screen)\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 }, [])\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 onEscapeKey = useCallback(e => {\n if (e.key === 'Escape' || e.key === 'Esc') {\n if (thread) {\n thread.lastMessageSeen()\n setUnseenCount(0)\n }\n setChatVisibility(false)\n }\n }, [])\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 const goToEndFeedbackScreen = handleScreenChange(6)\n\n let ScreenComponent\n\n switch (screen) {\n case 0:\n ScreenComponent = <PreChat onContinue={goToRequestChatScreen} />\n break\n case 1:\n ScreenComponent = <RequestChat onPreChatScreen={goToPreChatScreen} />\n break\n case 2:\n ScreenComponent = <Chat onSettingsScreen={goToSettingsScreen} onEndChatScreen={goToEndChatScreen} />\n break\n case 3:\n ScreenComponent = <EndChat onChatScreen={goToChatScreen} onEndChatConfirm={goToFeedbackScreen} />\n break\n case 4:\n ScreenComponent = <Feedback onCancel={() => setChatVisibility(false)} onConfirmSubmit={goToEndFeedbackScreen} />\n break\n case 5:\n ScreenComponent = <Settings onCancel={goToChatScreen} />\n break\n case 6:\n ScreenComponent = <EndFeedback onClose={() => setChatVisibility(false)} />\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 {ScreenComponent}\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 } = useApp()\n\n const confirmEndChat = async e => {\n e.preventDefault()\n\n setThreadId()\n setMessages([])\n setCustomerId()\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 <h3 className='govuk-heading-s' aria-live='polite'>Are you sure you want to end the chat?</h3>\n <div className='govuk-button-group'>\n <a href='#' className='govuk-button govuk-!-font-size-16' data-module='govuk-button' id='confirmEndChat' onClick={confirmEndChat}>Yes, end chat</a>\n <a href='#' className='govuk-link govuk-!-font-size-16' onClick={onChatScreen}>No, resume chat</a>\n </div>\n </div>\n </>\n )\n}\n","import React from 'react'\nimport { PanelHeader } from '../panel/panel-header.jsx'\n\nexport function EndFeedback ({ onClose }) {\n return (\n <>\n <PanelHeader />\n\n <div className='wc-body'>\n <h3 id='wc-subtitle' class='govuk-heading-m'>Thank you for your feedback</h3>\n <div>\n <a href='#' role='button' draggable='false' data-module='govuk-button' data-wc-focus-visible data-wc-close-btn onClick={onClose}>Close window</a>\n </div>\n </div>\n\n </>\n )\n}\n","import React from 'react'\nimport { PanelHeader } from '../panel/panel-header.jsx'\n\nexport function Feedback ({ onCancel, onConfirmSubmit }) {\n const feedbackSubmit = async e => {\n e.preventDefault()\n\n console.log('feedback submitted')\n\n onConfirmSubmit(e)\n }\n return (\n <>\n <PanelHeader />\n\n <div className='wc-body'>\n <h3 id='wc-subtitle' className='govuk-heading-s'>Give Feedback on Floodline webchat</h3>\n <p>Please note we’re unable to respond to feedback.</p>\n <div className='govuk-form-group'>\n <fieldset className='govuk-fieldset govuk-!-margin-bottom-4'>\n <legend className='govuk-fieldset-heading govuk-fieldset__legend'>\n Overall, how did you feel about webchat?\n </legend>\n <div className='govuk-radios govuk-radios--small' data-module='govuk-radios'>\n <div className='govuk-radios__item'>\n <input\n id='very-satisfied'\n name='satisfaction'\n type='radio'\n className='govuk-radios__input'\n value='Very satisfied'\n />\n\n <label className='govuk-label govuk-radios__label' for='very-satisfied'>Very satisfied</label>\n </div>\n <div className='govuk-radios__item'>\n <input\n id='satisfied'\n name='satisfaction'\n type='radio'\n className='govuk-radios__input'\n value='Satisfied'\n />\n\n <label className='govuk-label govuk-radios__label' for='satisfied'>Satisfied</label>\n </div>\n <div className='govuk-radios__item'>\n <input\n id='no-opinion'\n name='satisfaction'\n type='radio'\n className='govuk-radios__input'\n value='No opinion'\n />\n\n <label className='govuk-label govuk-radios__label' for='no-opinion'>No Opinion</label>\n </div>\n <div className='govuk-radios__item'>\n <input\n id='dissatisfied'\n name='satisfaction'\n type='radio'\n className='govuk-radios__input'\n value='Dissatisfied'\n />\n\n <label className='govuk-label govuk-radios__label' for='dissatisfied'>Dissatisfied</label>\n </div>\n <div className='govuk-radios__item'>\n <input\n id='very-dissatisfied'\n name='satisfaction'\n type='radio'\n className='govuk-radios__input'\n value='Very dissatisfied'\n />\n\n <label className='govuk-label govuk-radios__label' for='very-dissatisfied'>Very dissatisfied</label>\n </div>\n </div>\n </fieldset>\n\n <fieldset className='govuk-fieldset govuk-!-margin-bottom-4'>\n <legend className='govuk-fieldset__legend'>\n Did the adviser answer your question?\n </legend>\n <div className='govuk-radios govuk-radios--small' data-module='govuk-radios'>\n <div className='govuk-radios__item'>\n <input\n id='answer-yes'\n name='answer'\n type='radio'\n className='govuk-radios__input'\n value='Yes'\n />\n\n <label className='govuk-label govuk-radios__label' for='answer-yes'>Yes</label>\n </div>\n <div className='govuk-radios__item'>\n <input\n id='answer-no'\n name='answer'\n type='radio'\n className='govuk-radios__input'\n value='No'\n />\n\n <label className='govuk-label govuk-radios__label' for='answer-no'>No</label>\n </div>\n <div className='govuk-radios__item'>\n <input\n id='answer-partly'\n name='answer'\n type='radio'\n className='govuk-radios__input'\n value='Partly'\n />\n\n <label className='govuk-label govuk-radios__label' for='answer-partly'>Partly</label>\n </div>\n </div>\n </fieldset>\n\n </div>\n <div className='govuk-form-group'>\n <label className='govuk-label' for='improvements'>\n How can we improve webchat? (optional)\n </label>\n <textarea className='govuk-textarea govuk-!-margin-bottom-4' id='improvements' name='improvements' rows='5' />\n </div>\n\n <div className='govuk-form-group'>\n <label className='wc-fieldset-heading govuk-label' for='research'>\n Tell us your email address if you want to take part in user research (optional)\n </label>\n <div id='research-hint' class='wc-hint govuk-hint'>\n We will not share your email address or use it for anything else. We’ll delete it after 2 years.\n </div>\n <input className='govuk-input govuk-!-margin-bottom-4' id='research' name='research' aria-describedby='research-hint' type='text' />\n </div>\n\n <div className='govuk-button-group'>\n <a id='feedback-save' href='#' className='govuk-button govuk-!-font-size-16' data-module='govuk-button' onClick={feedbackSubmit}>Submit</a>\n <a id='feedback-cancel' href='#' className='govuk-link govuk-!-font-size-16' data-module='govuk-button' onClick={onCancel}>Cancel</a>\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 <h3 className='govuk-heading-s' aria-live='polite'>What you can use webchat for</h3>\n <p className='govuk-body-s'>Webchat lets you talk directly to a Floodline adviser.</p>\n\n <p className='govuk-body-s'>You can use webchat to get:</p>\n <ul className='govuk-list govuk-list--bullet govuk-body-s'>\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\n <p className='govuk-body-s'>\n {\n 'There are other ways to '\n }\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 {\n ' and '\n }\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 className='govuk-body-s'>\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 govuk-!-font-size-16' data-module='govuk-button' onClick={onContinue}>Continue</button>\n\n <h3 className='govuk-heading-s'>Other flood information</h3>\n\n <p className='govuk-body-s'>Call Floodline for all other flood and flood warning information.</p>\n <p className='govuk-body-s'>\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 </>\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\n const [errors, setErrors] = useState({})\n const [questionLength, setQuestionLength] = useState(0)\n\n const nameRef = useRef()\n const questionRef = useRef()\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 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 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 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 return (\n <>\n <PanelHeader />\n\n <div className='wc-body'>\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='govuk-heading-s' aria-live='polite'>\n Your name and question\n </h3>\n\n <form>\n <div className={classnames('govuk-form-group', errors.name && 'govuk-form-group--error')}>\n <label className='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('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='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='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('govuk-textarea', 'govuk-js-character-count', !isQuestionLengthValid || errors.question ? 'govuk-textarea--error' : '')}\n data-testid='request-chat-user-question'\n />\n <div id='wc-question-info' className='govuk-hint govuk-character-count__message' style={{ color: `${!isQuestionLengthValid ? '#d4351c' : ''}` }} aria-hidden='true'>\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 <button\n className='govuk-button govuk-!-margin-top-1 govuk-!-font-size-16'\n data-module='govuk-button'\n onClick={onRequestChat}\n >\n Request chat\n </button>\n </form>\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 <fieldset className='govuk-fieldset govuk-!-margin-bottom-4'>\n <legend className='govuk-fieldset__legend govuk-fieldset__legend'>\n <h3 id='wc-subtitle' className='govuk-heading-s'>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='govuk-label govuk-checkboxes__label govuk-!-font-size-16' 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='govuk-label govuk-checkboxes__label govuk-!-font-size-16' 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='govuk-button govuk-!-font-size-16' data-module='govuk-button' onClick={onSave}>Save</a>\n <a id='settings-cancel' href='#' className='govuk-link govuk-!-font-size-16' data-module='govuk-button' onClick={onCancel}>Cancel</a>\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 setAriaHidden = bool => {\n for (const node of document.body.children) {\n if (node.id !== 'wc-panel') {\n (bool) ? node.setAttribute('aria-hidden', 'true') : node.removeAttribute('aria-hidden')\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 * as uuid from 'uuid'\nimport { 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')}, (ID: ${uuid.v4().split('-')[0]})\\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 useEffect(() => {\n sdk.onChatEvent('SetConsumerContactCustomFields', () => { console.log('Custom field set') })\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 }, [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\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}\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 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","href","draggable","PanelHeader","PanelFooter","Message","useTextareaAutosize","formatTranscript","Chat","onEndChatScreen","onSettingsScreen","thread","messages","agent","agentStatus","isAgentTyping","settings","userMessage","setUserMessage","messageRef","scroll","length","chatBody","querySelector","scrollTop","scrollHeight","label","remove","add","onChange","e","target","value","agentName","nickname","firstName","connectionHeadlineText","sendMessage","sendTextMessage","trim","err","console","log","saveChat","transcript","saveChatLink","setAttribute","click","map","msg","index","id","message","previousMessage","width","height","x","y","viewBox","stroke","cx","cy","r","fill","noValidate","htmlFor","rows","name","type","download","ErrorSummary","errors","errs","Object","keys","goToInput","getAttribute","focus","tabIndex","role","outbound","direction","messageOwnerSameAsPrevious","assignee","text","children","setUnseenCount","onClose","lastMessageSeen","ButtonComponent","focusable","d","useCallback","createPortal","PreChat","RequestChat","Unavailable","EndChat","Settings","Feedback","useChatSdk","useFocusedElements","EndFeedback","sdk","setThread","setThreadId","setMessages","fetchThread","fetchMessages","screen","setScreen","escapeKeyEvent","addEventListener","onEscapeKey","removeEventListener","recover","fetchedThread","fetchedMessages","handleScreenChange","newScreen","goToPreChatScreen","goToRequestChatScreen","goToChatScreen","goToEndChatScreen","goToFeedbackScreen","goToSettingsScreen","goToEndFeedbackScreen","ScreenComponent","onContinue","onPreChatScreen","onChatScreen","onEndChatConfirm","onCancel","onConfirmSubmit","Component","setCustomerId","confirmEndChat","endChat","class","feedbackSubmit","for","rel","uuid","QUESTION_MAX_LENGTH","fetchCustomerId","setErrors","questionLength","setQuestionLength","nameRef","questionRef","onQuestionChange","onRequestChat","question","v4","customerId","getCustomer","setName","startChat","setCustomField","isQuestionLengthValid","questionLengthRemaining","questionLengthExceeded","questionHint","style","color","setSettings","optionAudio","setOptionAudio","audio","optionScroll","setOptionScroll","onSave","defaultChecked","setAriaHidden","bool","node","removeAttribute","getFocusableElements","selectors","elements","querySelectorAll","join","Array","from","filter","closest","panelElements","setPanelElements","webchatPanelElement","activeElement","shiftKey","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","split","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","onChatEvent","LIVECHAT_RECOVERED","MESSAGE_CREATED","AGENT_TYPING_STARTED","AGENT_TYPING_ENDED","ASSIGNED_AGENT_CHANGED","CONTACT_STATUS_CHANGED","location","hash","store","Provider","setItem","stringify","removeItem","setAvailability","setMessage","reverse","setAgent","setAgentIsTyping","setAgentStatus","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","action","fn","actionFunction","bind","useContext","authorize","consumerIdentity","idOnExternalPlatform","getThread","recovered","allMessages","push","loadMoreMessages","createRoot","ChatSdk","init","container","brandId","channelId","environment","root","result","availabilityEndpoint","render"],"sourceRoot":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@defra/flood-webchat",
3
- "version": "0.0.1-beta.19",
3
+ "version": "0.0.1-beta.20",
4
4
  "description": "",
5
5
  "main": "dist/server.js",
6
6
  "browser": "dist/client.js",
@@ -5,7 +5,7 @@ import { Panel } from '../panel/panel.jsx'
5
5
  import { useApp } from '../../store/useApp'
6
6
 
7
7
  export function Availability () {
8
- const { availability, messages, isChatOpen, setChatVisibility, unseenCount } = useApp()
8
+ const { availability, isChatOpen, setChatVisibility, unseenCount, threadId } = useApp()
9
9
 
10
10
  const [isFixed, setIsFixed] = useState(false)
11
11
  const buttonRef = useRef()
@@ -29,7 +29,7 @@ export function Availability () {
29
29
  const intersectionCallback = entries => {
30
30
  const [entry] = entries
31
31
  const isBelowFold = !entry.isIntersecting && entry.boundingClientRect.top > 0
32
- setIsFixed(!isChatOpen && isBelowFold)
32
+ setIsFixed(!isChatOpen && isBelowFold && threadId)
33
33
  }
34
34
 
35
35
  useEffect(() => {
@@ -57,7 +57,7 @@ export function Availability () {
57
57
 
58
58
  let TextComponent = (<>Show Chat</>)
59
59
 
60
- if (!messages.length) {
60
+ if (!threadId) {
61
61
  TextComponent = (<>Start Chat</>)
62
62
  }
63
63
 
@@ -7,8 +7,10 @@ export function PanelHeader () {
7
7
  const onClose = e => {
8
8
  e.preventDefault()
9
9
  setChatVisibility(false)
10
- thread.lastMessageSeen()
11
- setUnseenCount(0)
10
+ if (thread) {
11
+ thread.lastMessageSeen()
12
+ setUnseenCount(0)
13
+ }
12
14
  }
13
15
 
14
16
  let ButtonComponent = (
@@ -7,10 +7,12 @@ import { Chat } from '../chat/chat.jsx'
7
7
  import { Unavailable } from '../screens/unavailable.jsx'
8
8
  import { EndChat } from '../screens/end-chat.jsx'
9
9
  import { Settings } from '../screens/settings.jsx'
10
+ import { Feedback } from '../screens/feedback.jsx'
10
11
 
11
12
  import { useApp } from '../../store/useApp.js'
12
13
  import { useChatSdk } from '../../store/useChatSdk.js'
13
14
  import { useFocusedElements } from '../../hooks/useFocusedElements.js'
15
+ import { EndFeedback } from '../screens/end-feedback.jsx'
14
16
 
15
17
  export function Panel () {
16
18
  const { sdk, availability, thread, threadId, setThread, setThreadId, setChatVisibility, setMessages, setUnseenCount } = useApp()
@@ -64,6 +66,10 @@ export function Panel () {
64
66
 
65
67
  const onEscapeKey = useCallback(e => {
66
68
  if (e.key === 'Escape' || e.key === 'Esc') {
69
+ if (thread) {
70
+ thread.lastMessageSeen()
71
+ setUnseenCount(0)
72
+ }
67
73
  setChatVisibility(false)
68
74
  }
69
75
  }, [])
@@ -77,7 +83,9 @@ export function Panel () {
77
83
  const goToRequestChatScreen = handleScreenChange(1)
78
84
  const goToChatScreen = handleScreenChange(2)
79
85
  const goToEndChatScreen = handleScreenChange(3)
86
+ const goToFeedbackScreen = handleScreenChange(4)
80
87
  const goToSettingsScreen = handleScreenChange(5)
88
+ const goToEndFeedbackScreen = handleScreenChange(6)
81
89
 
82
90
  let ScreenComponent
83
91
 
@@ -92,11 +100,17 @@ export function Panel () {
92
100
  ScreenComponent = <Chat onSettingsScreen={goToSettingsScreen} onEndChatScreen={goToEndChatScreen} />
93
101
  break
94
102
  case 3:
95
- ScreenComponent = <EndChat onChatScreen={goToChatScreen} />
103
+ ScreenComponent = <EndChat onChatScreen={goToChatScreen} onEndChatConfirm={goToFeedbackScreen} />
104
+ break
105
+ case 4:
106
+ ScreenComponent = <Feedback onCancel={() => setChatVisibility(false)} onConfirmSubmit={goToEndFeedbackScreen} />
96
107
  break
97
108
  case 5:
98
109
  ScreenComponent = <Settings onCancel={goToChatScreen} />
99
110
  break
111
+ case 6:
112
+ ScreenComponent = <EndFeedback onClose={() => setChatVisibility(false)} />
113
+ break
100
114
  default:
101
115
  ScreenComponent = <PreChat onContinue={goToRequestChatScreen} />
102
116
  }
@@ -1,14 +1,32 @@
1
1
  import React from 'react'
2
2
  import { PanelHeader } from '../panel/panel-header.jsx'
3
+ import { useApp } from '../../store/useApp.js'
4
+
5
+ export function EndChat ({ onChatScreen, onEndChatConfirm }) {
6
+ const { setCustomerId, setThreadId, setMessages, agentStatus, thread } = useApp()
7
+
8
+ const confirmEndChat = async e => {
9
+ e.preventDefault()
10
+
11
+ setThreadId()
12
+ setMessages([])
13
+ setCustomerId()
14
+
15
+ // End chat if still open
16
+ if (agentStatus !== 'closed') {
17
+ thread.endChat()
18
+ }
19
+
20
+ onEndChatConfirm(e)
21
+ }
3
22
 
4
- export function EndChat ({ onChatScreen }) {
5
23
  return (
6
24
  <>
7
25
  <PanelHeader />
8
26
  <div className='wc-body'>
9
27
  <h3 className='govuk-heading-s' aria-live='polite'>Are you sure you want to end the chat?</h3>
10
28
  <div className='govuk-button-group'>
11
- <a href='#' className='govuk-button govuk-!-font-size-16' data-module='govuk-button'>Yes, end chat</a>
29
+ <a href='#' className='govuk-button govuk-!-font-size-16' data-module='govuk-button' id='confirmEndChat' onClick={confirmEndChat}>Yes, end chat</a>
12
30
  <a href='#' className='govuk-link govuk-!-font-size-16' onClick={onChatScreen}>No, resume chat</a>
13
31
  </div>
14
32
  </div>
@@ -0,0 +1,18 @@
1
+ import React from 'react'
2
+ import { PanelHeader } from '../panel/panel-header.jsx'
3
+
4
+ export function EndFeedback ({ onClose }) {
5
+ return (
6
+ <>
7
+ <PanelHeader />
8
+
9
+ <div className='wc-body'>
10
+ <h3 id='wc-subtitle' class='govuk-heading-m'>Thank you for your feedback</h3>
11
+ <div>
12
+ <a href='#' role='button' draggable='false' data-module='govuk-button' data-wc-focus-visible data-wc-close-btn onClick={onClose}>Close window</a>
13
+ </div>
14
+ </div>
15
+
16
+ </>
17
+ )
18
+ }
@@ -0,0 +1,149 @@
1
+ import React from 'react'
2
+ import { PanelHeader } from '../panel/panel-header.jsx'
3
+
4
+ export function Feedback ({ onCancel, onConfirmSubmit }) {
5
+ const feedbackSubmit = async e => {
6
+ e.preventDefault()
7
+
8
+ console.log('feedback submitted')
9
+
10
+ onConfirmSubmit(e)
11
+ }
12
+ return (
13
+ <>
14
+ <PanelHeader />
15
+
16
+ <div className='wc-body'>
17
+ <h3 id='wc-subtitle' className='govuk-heading-s'>Give Feedback on Floodline webchat</h3>
18
+ <p>Please note we’re unable to respond to feedback.</p>
19
+ <div className='govuk-form-group'>
20
+ <fieldset className='govuk-fieldset govuk-!-margin-bottom-4'>
21
+ <legend className='govuk-fieldset-heading govuk-fieldset__legend'>
22
+ Overall, how did you feel about webchat?
23
+ </legend>
24
+ <div className='govuk-radios govuk-radios--small' data-module='govuk-radios'>
25
+ <div className='govuk-radios__item'>
26
+ <input
27
+ id='very-satisfied'
28
+ name='satisfaction'
29
+ type='radio'
30
+ className='govuk-radios__input'
31
+ value='Very satisfied'
32
+ />
33
+
34
+ <label className='govuk-label govuk-radios__label' for='very-satisfied'>Very satisfied</label>
35
+ </div>
36
+ <div className='govuk-radios__item'>
37
+ <input
38
+ id='satisfied'
39
+ name='satisfaction'
40
+ type='radio'
41
+ className='govuk-radios__input'
42
+ value='Satisfied'
43
+ />
44
+
45
+ <label className='govuk-label govuk-radios__label' for='satisfied'>Satisfied</label>
46
+ </div>
47
+ <div className='govuk-radios__item'>
48
+ <input
49
+ id='no-opinion'
50
+ name='satisfaction'
51
+ type='radio'
52
+ className='govuk-radios__input'
53
+ value='No opinion'
54
+ />
55
+
56
+ <label className='govuk-label govuk-radios__label' for='no-opinion'>No Opinion</label>
57
+ </div>
58
+ <div className='govuk-radios__item'>
59
+ <input
60
+ id='dissatisfied'
61
+ name='satisfaction'
62
+ type='radio'
63
+ className='govuk-radios__input'
64
+ value='Dissatisfied'
65
+ />
66
+
67
+ <label className='govuk-label govuk-radios__label' for='dissatisfied'>Dissatisfied</label>
68
+ </div>
69
+ <div className='govuk-radios__item'>
70
+ <input
71
+ id='very-dissatisfied'
72
+ name='satisfaction'
73
+ type='radio'
74
+ className='govuk-radios__input'
75
+ value='Very dissatisfied'
76
+ />
77
+
78
+ <label className='govuk-label govuk-radios__label' for='very-dissatisfied'>Very dissatisfied</label>
79
+ </div>
80
+ </div>
81
+ </fieldset>
82
+
83
+ <fieldset className='govuk-fieldset govuk-!-margin-bottom-4'>
84
+ <legend className='govuk-fieldset__legend'>
85
+ Did the adviser answer your question?
86
+ </legend>
87
+ <div className='govuk-radios govuk-radios--small' data-module='govuk-radios'>
88
+ <div className='govuk-radios__item'>
89
+ <input
90
+ id='answer-yes'
91
+ name='answer'
92
+ type='radio'
93
+ className='govuk-radios__input'
94
+ value='Yes'
95
+ />
96
+
97
+ <label className='govuk-label govuk-radios__label' for='answer-yes'>Yes</label>
98
+ </div>
99
+ <div className='govuk-radios__item'>
100
+ <input
101
+ id='answer-no'
102
+ name='answer'
103
+ type='radio'
104
+ className='govuk-radios__input'
105
+ value='No'
106
+ />
107
+
108
+ <label className='govuk-label govuk-radios__label' for='answer-no'>No</label>
109
+ </div>
110
+ <div className='govuk-radios__item'>
111
+ <input
112
+ id='answer-partly'
113
+ name='answer'
114
+ type='radio'
115
+ className='govuk-radios__input'
116
+ value='Partly'
117
+ />
118
+
119
+ <label className='govuk-label govuk-radios__label' for='answer-partly'>Partly</label>
120
+ </div>
121
+ </div>
122
+ </fieldset>
123
+
124
+ </div>
125
+ <div className='govuk-form-group'>
126
+ <label className='govuk-label' for='improvements'>
127
+ How can we improve webchat? (optional)
128
+ </label>
129
+ <textarea className='govuk-textarea govuk-!-margin-bottom-4' id='improvements' name='improvements' rows='5' />
130
+ </div>
131
+
132
+ <div className='govuk-form-group'>
133
+ <label className='wc-fieldset-heading govuk-label' for='research'>
134
+ Tell us your email address if you want to take part in user research (optional)
135
+ </label>
136
+ <div id='research-hint' class='wc-hint govuk-hint'>
137
+ We will not share your email address or use it for anything else. We’ll delete it after 2 years.
138
+ </div>
139
+ <input className='govuk-input govuk-!-margin-bottom-4' id='research' name='research' aria-describedby='research-hint' type='text' />
140
+ </div>
141
+
142
+ <div className='govuk-button-group'>
143
+ <a id='feedback-save' href='#' className='govuk-button govuk-!-font-size-16' data-module='govuk-button' onClick={feedbackSubmit}>Submit</a>
144
+ <a id='feedback-cancel' href='#' className='govuk-link govuk-!-font-size-16' data-module='govuk-button' onClick={onCancel}>Cancel</a>
145
+ </div>
146
+ </div>
147
+ </>
148
+ )
149
+ }
@@ -59,6 +59,7 @@ export function RequestChat ({ onPreChatScreen }) {
59
59
  setCustomerId(customerId)
60
60
  setThreadId(threadId)
61
61
  setThread(thread)
62
+ thread.setCustomField('threadid', threadId)
62
63
  } catch (err) {
63
64
  console.log('[Request Chat Error]', err)
64
65
  }
@@ -52,6 +52,7 @@ export const AppProvider = ({ sdk, availability, options, children }) => {
52
52
  }
53
53
 
54
54
  useEffect(() => {
55
+ sdk.onChatEvent('SetConsumerContactCustomFields', () => { console.log('Custom field set') })
55
56
  sdk.onChatEvent(ChatEvent.LIVECHAT_RECOVERED, onLiveChatRecovered)
56
57
  sdk.onChatEvent(ChatEvent.MESSAGE_CREATED, onMessageCreated)
57
58
  sdk.onChatEvent(ChatEvent.AGENT_TYPING_STARTED, onAgentTypingStarted)