@defra/flood-webchat 0.0.1-beta.21 → 0.0.1-beta.23

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) {
@@ -175,7 +175,6 @@ function Chat({
175
175
  connectionHeadlineText = 'Webchat is not currently available';
176
176
  }
177
177
  const sendMessage = e => {
178
- e.preventDefault();
179
178
  if (messageRef.current.value.length === 0) {
180
179
  return;
181
180
  }
@@ -186,11 +185,20 @@ function Chat({
186
185
  }
187
186
  setUserMessage('');
188
187
  };
188
+ const handleKeyPress = e => {
189
+ if (e.key === 'Enter' && !e.shiftKey) {
190
+ e.preventDefault();
191
+ sendMessage();
192
+ }
193
+ };
194
+ const handleSubmit = e => {
195
+ e.preventDefault();
196
+ sendMessage();
197
+ };
189
198
  const saveChat = () => {
190
199
  const transcript = (0,_lib_transform_messages_js__WEBPACK_IMPORTED_MODULE_6__.formatTranscript)(messages);
191
200
  const saveChatLink = document.querySelector('#transcript-download');
192
201
  saveChatLink.setAttribute('href', `data:text/plain;charset=utf-8,${transcript}`);
193
- saveChatLink.click();
194
202
  };
195
203
  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", {
196
204
  className: "wc-status"
@@ -245,7 +253,8 @@ function Chat({
245
253
  className: "wc-footer__input"
246
254
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("form", {
247
255
  className: "wc-form",
248
- noValidate: true
256
+ noValidate: true,
257
+ onSubmit: handleSubmit
249
258
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
250
259
  className: "govuk-label wc-form__label govuk-!-font-size-16",
251
260
  htmlFor: "wc-form-textarea"
@@ -259,13 +268,13 @@ function Chat({
259
268
  id: "wc-form-textarea",
260
269
  name: "message",
261
270
  onChange: onChange,
271
+ onKeyPress: handleKeyPress,
262
272
  value: userMessage
263
273
  }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
264
274
  type: "submit",
265
275
  className: "wc-form__button govuk-button govuk-!-font-size-16",
266
276
  value: "Send",
267
- "data-prevent-double-click": "true",
268
- onClick: sendMessage
277
+ "data-prevent-double-click": "true"
269
278
  }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
270
279
  className: "wc-footer__settings"
271
280
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
@@ -416,8 +425,10 @@ function PanelHeader() {
416
425
  const onClose = e => {
417
426
  e.preventDefault();
418
427
  setChatVisibility(false);
419
- thread.lastMessageSeen();
420
- setUnseenCount(0);
428
+ if (thread) {
429
+ thread.lastMessageSeen();
430
+ setUnseenCount(0);
431
+ }
421
432
  };
422
433
  let ButtonComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", {
423
434
  className: "wc-header__close",
@@ -479,9 +490,13 @@ __webpack_require__.r(__webpack_exports__);
479
490
  /* harmony import */ var _screens_unavailable_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../screens/unavailable.jsx */ "./src/client/components/screens/unavailable.jsx");
480
491
  /* 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
492
  /* 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");
493
+ /* harmony import */ var _screens_feedback_jsx__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../screens/feedback.jsx */ "./src/client/components/screens/feedback.jsx");
494
+ /* harmony import */ var _store_useApp_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../store/useApp.js */ "./src/client/store/useApp.js");
495
+ /* harmony import */ var _store_useChatSdk_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../store/useChatSdk.js */ "./src/client/store/useChatSdk.js");
496
+ /* harmony import */ var _hooks_useFocusedElements_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../hooks/useFocusedElements.js */ "./src/client/hooks/useFocusedElements.js");
497
+ /* harmony import */ var _screens_end_feedback_jsx__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../screens/end-feedback.jsx */ "./src/client/components/screens/end-feedback.jsx");
498
+
499
+
485
500
 
486
501
 
487
502
 
@@ -504,13 +519,13 @@ function Panel() {
504
519
  setChatVisibility,
505
520
  setMessages,
506
521
  setUnseenCount
507
- } = (0,_store_useApp_js__WEBPACK_IMPORTED_MODULE_8__.useApp)();
522
+ } = (0,_store_useApp_js__WEBPACK_IMPORTED_MODULE_9__.useApp)();
508
523
  const {
509
524
  fetchThread,
510
525
  fetchMessages
511
- } = (0,_store_useChatSdk_js__WEBPACK_IMPORTED_MODULE_9__.useChatSdk)(sdk);
526
+ } = (0,_store_useChatSdk_js__WEBPACK_IMPORTED_MODULE_10__.useChatSdk)(sdk);
512
527
  const [screen, setScreen] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(threadId ? 2 : 0);
513
- (0,_hooks_useFocusedElements_js__WEBPACK_IMPORTED_MODULE_10__.useFocusedElements)(screen);
528
+ (0,_hooks_useFocusedElements_js__WEBPACK_IMPORTED_MODULE_11__.useFocusedElements)(screen);
514
529
 
515
530
  /**
516
531
  * Initializes the eventListener for pressing the escape key
@@ -551,6 +566,10 @@ function Panel() {
551
566
  }, [thread, threadId]);
552
567
  const onEscapeKey = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(e => {
553
568
  if (e.key === 'Escape' || e.key === 'Esc') {
569
+ if (thread) {
570
+ thread.lastMessageSeen();
571
+ setUnseenCount(0);
572
+ }
554
573
  setChatVisibility(false);
555
574
  }
556
575
  }, []);
@@ -562,7 +581,9 @@ function Panel() {
562
581
  const goToRequestChatScreen = handleScreenChange(1);
563
582
  const goToChatScreen = handleScreenChange(2);
564
583
  const goToEndChatScreen = handleScreenChange(3);
584
+ const goToFeedbackScreen = handleScreenChange(4);
565
585
  const goToSettingsScreen = handleScreenChange(5);
586
+ const goToEndFeedbackScreen = handleScreenChange(6);
566
587
  let ScreenComponent;
567
588
  switch (screen) {
568
589
  case 0:
@@ -583,7 +604,14 @@ function Panel() {
583
604
  break;
584
605
  case 3:
585
606
  ScreenComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_screens_end_chat_jsx__WEBPACK_IMPORTED_MODULE_6__.EndChat, {
586
- onChatScreen: goToChatScreen
607
+ onChatScreen: goToChatScreen,
608
+ onEndChatConfirm: goToFeedbackScreen
609
+ });
610
+ break;
611
+ case 4:
612
+ ScreenComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_screens_feedback_jsx__WEBPACK_IMPORTED_MODULE_8__.Feedback, {
613
+ onCancel: () => setChatVisibility(false),
614
+ onConfirmSubmit: goToEndFeedbackScreen
587
615
  });
588
616
  break;
589
617
  case 5:
@@ -591,6 +619,11 @@ function Panel() {
591
619
  onCancel: goToChatScreen
592
620
  });
593
621
  break;
622
+ case 6:
623
+ ScreenComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_screens_end_feedback_jsx__WEBPACK_IMPORTED_MODULE_12__.EndFeedback, {
624
+ onClose: () => setChatVisibility(false)
625
+ });
626
+ break;
594
627
  default:
595
628
  ScreenComponent = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_screens_pre_chat_jsx__WEBPACK_IMPORTED_MODULE_2__.PreChat, {
596
629
  onContinue: goToRequestChatScreen
@@ -625,11 +658,36 @@ __webpack_require__.r(__webpack_exports__);
625
658
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
626
659
  /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
627
660
  /* harmony import */ var _panel_panel_header_jsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../panel/panel-header.jsx */ "./src/client/components/panel/panel-header.jsx");
661
+ /* harmony import */ var _store_useApp_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../store/useApp.js */ "./src/client/store/useApp.js");
662
+
628
663
 
629
664
 
630
665
  function EndChat({
631
- onChatScreen
666
+ onChatScreen,
667
+ onEndChatConfirm
632
668
  }) {
669
+ const {
670
+ setCustomerId,
671
+ setThreadId,
672
+ setMessages,
673
+ agentStatus,
674
+ thread,
675
+ setUnseenCount
676
+ } = (0,_store_useApp_js__WEBPACK_IMPORTED_MODULE_2__.useApp)();
677
+ const confirmEndChat = async e => {
678
+ e.preventDefault();
679
+ setThreadId();
680
+ setMessages([]);
681
+ setCustomerId();
682
+ thread.lastMessageSeen();
683
+ setUnseenCount(0);
684
+
685
+ // End chat if still open
686
+ if (agentStatus !== 'closed') {
687
+ thread.endChat();
688
+ }
689
+ onEndChatConfirm(e);
690
+ };
633
691
  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
692
  className: "wc-body"
635
693
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("h3", {
@@ -640,7 +698,9 @@ function EndChat({
640
698
  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
641
699
  href: "#",
642
700
  className: "govuk-button govuk-!-font-size-16",
643
- "data-module": "govuk-button"
701
+ "data-module": "govuk-button",
702
+ id: "confirmEndChat",
703
+ onClick: confirmEndChat
644
704
  }, "Yes, end chat"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
645
705
  href: "#",
646
706
  className: "govuk-link govuk-!-font-size-16",
@@ -650,6 +710,218 @@ function EndChat({
650
710
 
651
711
  /***/ }),
652
712
 
713
+ /***/ "./src/client/components/screens/end-feedback.jsx":
714
+ /*!********************************************************!*\
715
+ !*** ./src/client/components/screens/end-feedback.jsx ***!
716
+ \********************************************************/
717
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
718
+
719
+ __webpack_require__.r(__webpack_exports__);
720
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
721
+ /* harmony export */ EndFeedback: () => (/* binding */ EndFeedback)
722
+ /* harmony export */ });
723
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
724
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
725
+ /* harmony import */ var _panel_panel_header_jsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../panel/panel-header.jsx */ "./src/client/components/panel/panel-header.jsx");
726
+
727
+
728
+ function EndFeedback({
729
+ onClose
730
+ }) {
731
+ 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", {
732
+ className: "wc-body"
733
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("h3", {
734
+ id: "wc-subtitle",
735
+ class: "govuk-heading-m"
736
+ }, "Thank you for your feedback"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
737
+ href: "#",
738
+ role: "button",
739
+ draggable: "false",
740
+ "data-module": "govuk-button",
741
+ "data-wc-focus-visible": true,
742
+ "data-wc-close-btn": true,
743
+ onClick: onClose
744
+ }, "Close window"))));
745
+ }
746
+
747
+ /***/ }),
748
+
749
+ /***/ "./src/client/components/screens/feedback.jsx":
750
+ /*!****************************************************!*\
751
+ !*** ./src/client/components/screens/feedback.jsx ***!
752
+ \****************************************************/
753
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
754
+
755
+ __webpack_require__.r(__webpack_exports__);
756
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
757
+ /* harmony export */ Feedback: () => (/* binding */ Feedback)
758
+ /* harmony export */ });
759
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
760
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
761
+ /* harmony import */ var _panel_panel_header_jsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../panel/panel-header.jsx */ "./src/client/components/panel/panel-header.jsx");
762
+
763
+
764
+ function Feedback({
765
+ onConfirmSubmit,
766
+ onCancel
767
+ }) {
768
+ const feedbackSubmit = async e => {
769
+ e.preventDefault();
770
+ onConfirmSubmit(e);
771
+ onCancel(e);
772
+ };
773
+ 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", {
774
+ className: "wc-body"
775
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("h3", {
776
+ id: "wc-subtitle",
777
+ className: "govuk-heading-s"
778
+ }, "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", {
779
+ className: "govuk-form-group"
780
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("fieldset", {
781
+ className: "govuk-fieldset govuk-!-margin-bottom-4"
782
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("legend", {
783
+ className: "govuk-fieldset-heading govuk-fieldset__legend"
784
+ }, "Overall, how did you feel about webchat?"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
785
+ className: "govuk-radios govuk-radios--small",
786
+ "data-module": "govuk-radios"
787
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
788
+ className: "govuk-radios__item"
789
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
790
+ id: "very-satisfied",
791
+ name: "satisfaction",
792
+ type: "radio",
793
+ className: "govuk-radios__input",
794
+ value: "Very satisfied"
795
+ }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
796
+ className: "govuk-label govuk-radios__label",
797
+ for: "very-satisfied"
798
+ }, "Very satisfied")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
799
+ className: "govuk-radios__item"
800
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
801
+ id: "satisfied",
802
+ name: "satisfaction",
803
+ type: "radio",
804
+ className: "govuk-radios__input",
805
+ value: "Satisfied"
806
+ }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
807
+ className: "govuk-label govuk-radios__label",
808
+ for: "satisfied"
809
+ }, "Satisfied")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
810
+ className: "govuk-radios__item"
811
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
812
+ id: "no-opinion",
813
+ name: "satisfaction",
814
+ type: "radio",
815
+ className: "govuk-radios__input",
816
+ value: "No opinion"
817
+ }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
818
+ className: "govuk-label govuk-radios__label",
819
+ for: "no-opinion"
820
+ }, "No Opinion")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
821
+ className: "govuk-radios__item"
822
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
823
+ id: "dissatisfied",
824
+ name: "satisfaction",
825
+ type: "radio",
826
+ className: "govuk-radios__input",
827
+ value: "Dissatisfied"
828
+ }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
829
+ className: "govuk-label govuk-radios__label",
830
+ for: "dissatisfied"
831
+ }, "Dissatisfied")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
832
+ className: "govuk-radios__item"
833
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
834
+ id: "very-dissatisfied",
835
+ name: "satisfaction",
836
+ type: "radio",
837
+ className: "govuk-radios__input",
838
+ value: "Very dissatisfied"
839
+ }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
840
+ className: "govuk-label govuk-radios__label",
841
+ for: "very-dissatisfied"
842
+ }, "Very dissatisfied")))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("fieldset", {
843
+ className: "govuk-fieldset govuk-!-margin-bottom-4"
844
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("legend", {
845
+ className: "govuk-fieldset__legend"
846
+ }, "Did the adviser answer your question?"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
847
+ className: "govuk-radios govuk-radios--small",
848
+ "data-module": "govuk-radios"
849
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
850
+ className: "govuk-radios__item"
851
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
852
+ id: "answer-yes",
853
+ name: "answer",
854
+ type: "radio",
855
+ className: "govuk-radios__input",
856
+ value: "Yes"
857
+ }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
858
+ className: "govuk-label govuk-radios__label",
859
+ for: "answer-yes"
860
+ }, "Yes")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
861
+ className: "govuk-radios__item"
862
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
863
+ id: "answer-no",
864
+ name: "answer",
865
+ type: "radio",
866
+ className: "govuk-radios__input",
867
+ value: "No"
868
+ }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
869
+ className: "govuk-label govuk-radios__label",
870
+ for: "answer-no"
871
+ }, "No")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
872
+ className: "govuk-radios__item"
873
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
874
+ id: "answer-partly",
875
+ name: "answer",
876
+ type: "radio",
877
+ className: "govuk-radios__input",
878
+ value: "Partly"
879
+ }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
880
+ className: "govuk-label govuk-radios__label",
881
+ for: "answer-partly"
882
+ }, "Partly"))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
883
+ className: "govuk-form-group"
884
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
885
+ className: "govuk-label",
886
+ for: "improvements"
887
+ }, "How can we improve webchat? (optional)"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("textarea", {
888
+ className: "govuk-textarea govuk-!-margin-bottom-4",
889
+ id: "improvements",
890
+ name: "improvements",
891
+ rows: "5"
892
+ })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
893
+ className: "govuk-form-group"
894
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("label", {
895
+ className: "wc-fieldset-heading govuk-label",
896
+ for: "research"
897
+ }, "Tell us your email address if you want to take part in user research (optional)"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
898
+ id: "research-hint",
899
+ class: "wc-hint govuk-hint"
900
+ }, "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", {
901
+ className: "govuk-input govuk-!-margin-bottom-4",
902
+ id: "research",
903
+ name: "research",
904
+ "aria-describedby": "research-hint",
905
+ type: "text"
906
+ })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
907
+ className: "govuk-button-group"
908
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
909
+ id: "feedback-save",
910
+ href: "#",
911
+ className: "govuk-button govuk-!-font-size-16",
912
+ "data-module": "govuk-button",
913
+ onClick: feedbackSubmit
914
+ }, "Submit"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
915
+ id: "feedback-cancel",
916
+ href: "#",
917
+ className: "govuk-link govuk-!-font-size-16",
918
+ "data-module": "govuk-button",
919
+ onClick: onCancel
920
+ }, "Cancel"))));
921
+ }
922
+
923
+ /***/ }),
924
+
653
925
  /***/ "./src/client/components/screens/pre-chat.jsx":
654
926
  /*!****************************************************!*\
655
927
  !*** ./src/client/components/screens/pre-chat.jsx ***!
@@ -760,6 +1032,7 @@ function RequestChat({
760
1032
  } = (0,_store_useChatSdk_js__WEBPACK_IMPORTED_MODULE_5__.useChatSdk)(sdk);
761
1033
  const [errors, setErrors] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({});
762
1034
  const [questionLength, setQuestionLength] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(0);
1035
+ const [isButtonDisabled, setButtonDisabled] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
763
1036
  const nameRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)();
764
1037
  const questionRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)();
765
1038
  (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
@@ -784,6 +1057,7 @@ function RequestChat({
784
1057
  }
785
1058
  if (Object.keys(errs).length === 0) {
786
1059
  try {
1060
+ setButtonDisabled(true);
787
1061
  const threadId = uuid__WEBPACK_IMPORTED_MODULE_1__.v4();
788
1062
  const customerId = await fetchCustomerId();
789
1063
  const thread = await fetchThread(threadId);
@@ -792,6 +1066,7 @@ function RequestChat({
792
1066
  setCustomerId(customerId);
793
1067
  setThreadId(threadId);
794
1068
  setThread(thread);
1069
+ thread.setCustomField('threadid', threadId);
795
1070
  } catch (err) {
796
1071
  console.log('[Request Chat Error]', err);
797
1072
  }
@@ -867,8 +1142,9 @@ function RequestChat({
867
1142
  }, questionHint))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", {
868
1143
  className: "govuk-button govuk-!-margin-top-1 govuk-!-font-size-16",
869
1144
  "data-module": "govuk-button",
870
- onClick: onRequestChat
871
- }, "Request chat"))));
1145
+ onClick: onRequestChat,
1146
+ disabled: isButtonDisabled
1147
+ }, isButtonDisabled ? 'Requesting...' : 'Request Chat'))));
872
1148
  }
873
1149
 
874
1150
  /***/ }),
@@ -1311,6 +1587,9 @@ const AppProvider = ({
1311
1587
  });
1312
1588
  };
1313
1589
  (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
1590
+ sdk.onChatEvent('SetConsumerContactCustomFields', () => {
1591
+ console.log('Custom field set');
1592
+ });
1314
1593
  sdk.onChatEvent(_nice_devone_nice_cxone_chat_web_sdk__WEBPACK_IMPORTED_MODULE_1__.ChatEvent.LIVECHAT_RECOVERED, onLiveChatRecovered);
1315
1594
  sdk.onChatEvent(_nice_devone_nice_cxone_chat_web_sdk__WEBPACK_IMPORTED_MODULE_1__.ChatEvent.MESSAGE_CREATED, onMessageCreated);
1316
1595
  sdk.onChatEvent(_nice_devone_nice_cxone_chat_web_sdk__WEBPACK_IMPORTED_MODULE_1__.ChatEvent.AGENT_TYPING_STARTED, onAgentTypingStarted);