amazon-connect-reference-dialer 1.0.0 → 1.4.2

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.

Potentially problematic release.


This version of amazon-connect-reference-dialer might be problematic. Click here for more details.

Files changed (239) hide show
  1. package/.babelrc +10 -0
  2. package/.eslintrc +24 -0
  3. package/Dockerfile +12 -0
  4. package/LICENSE +21 -0
  5. package/README.md +8 -0
  6. package/README.salesforce.md +50 -0
  7. package/config/appconfig.json +10 -0
  8. package/config/config.js +46 -0
  9. package/docker-compose.yml +16 -0
  10. package/index.js +46 -0
  11. package/nodemon.json +3 -0
  12. package/package.json +5 -4
  13. package/src/client/App.js +20 -0
  14. package/src/client/api/acManager.js +79 -0
  15. package/src/client/api/agentHandler.js +46 -0
  16. package/src/client/api/audioFrequencyMonitor.js +62 -0
  17. package/src/client/api/csioHandler.js +204 -0
  18. package/src/client/api/databaseManager.js +59 -0
  19. package/src/client/api/eventhandler.js +278 -0
  20. package/src/client/api/feedbackHandler.js +21 -0
  21. package/src/client/api/manager/agent.js +203 -0
  22. package/src/client/api/manager/connection.js +181 -0
  23. package/src/client/api/manager/contact.js +114 -0
  24. package/src/client/api/mediaManager.js +138 -0
  25. package/src/client/api/networkStrengthMonitor.js +64 -0
  26. package/src/client/api/precalltest.js +37 -0
  27. package/src/client/api/sessionManager.js +312 -0
  28. package/src/client/configs/consts.js +158 -0
  29. package/src/client/container/agentduration/duration.js +63 -0
  30. package/src/client/container/agentduration/index.js +3 -0
  31. package/src/client/container/agentview/conferenceconnection/agentview.css +100 -0
  32. package/src/client/container/agentview/conferenceconnection/components/bothhold.js +20 -0
  33. package/src/client/container/agentview/conferenceconnection/components/bothjoined.js +25 -0
  34. package/src/client/container/agentview/conferenceconnection/components/dialnumber.js +21 -0
  35. package/src/client/container/agentview/conferenceconnection/components/holdall.js +20 -0
  36. package/src/client/container/agentview/conferenceconnection/components/join.js +21 -0
  37. package/src/client/container/agentview/conferenceconnection/components/oneHoldOtherConnected.js +37 -0
  38. package/src/client/container/agentview/conferenceconnection/components/resumeall.js +21 -0
  39. package/src/client/container/agentview/conferenceconnection/components/swap.js +21 -0
  40. package/src/client/container/agentview/conferenceconnection/components/togglemute.js +23 -0
  41. package/src/client/container/agentview/conferenceconnection/index.js +3 -0
  42. package/src/client/container/agentview/conferenceconnection/lowerBody.js +154 -0
  43. package/src/client/container/agentview/conferenceconnection/main.js +22 -0
  44. package/src/client/container/agentview/conferenceconnection/primaryconnection.js +109 -0
  45. package/src/client/container/agentview/conferenceconnection/quickFeedback.js +118 -0
  46. package/src/client/container/agentview/conferenceconnection/thirdpartyconnection.js +107 -0
  47. package/src/client/container/agentview/conferenceconnection/upperBody.js +36 -0
  48. package/src/client/container/agentview/footer.js +190 -0
  49. package/src/client/container/agentview/index.js +3 -0
  50. package/src/client/container/agentview/main.js +39 -0
  51. package/src/client/container/agentview/primaryconnection/agentMutedLabel.js +23 -0
  52. package/src/client/container/agentview/primaryconnection/agentStatusAndAudioLabel.js +28 -0
  53. package/src/client/container/agentview/primaryconnection/agentview.css +73 -0
  54. package/src/client/container/agentview/primaryconnection/index.js +3 -0
  55. package/src/client/container/agentview/primaryconnection/lowerBody.js +159 -0
  56. package/src/client/container/agentview/primaryconnection/main.js +22 -0
  57. package/src/client/container/agentview/primaryconnection/peerAndAgentDuration.js +48 -0
  58. package/src/client/container/agentview/primaryconnection/quickFeedback.js +123 -0
  59. package/src/client/container/agentview/primaryconnection/upperBody.js +59 -0
  60. package/src/client/container/agentview/thirdparyconnection/agentMutedLabel.js +23 -0
  61. package/src/client/container/agentview/thirdparyconnection/agentStatusAndAudioLabel.js +28 -0
  62. package/src/client/container/agentview/thirdparyconnection/agentview.css +73 -0
  63. package/src/client/container/agentview/thirdparyconnection/index.js +3 -0
  64. package/src/client/container/agentview/thirdparyconnection/lowerBody.js +139 -0
  65. package/src/client/container/agentview/thirdparyconnection/main.js +22 -0
  66. package/src/client/container/agentview/thirdparyconnection/peerAndAgentDuration.js +49 -0
  67. package/src/client/container/agentview/thirdparyconnection/quickFeedback.js +118 -0
  68. package/src/client/container/agentview/thirdparyconnection/upperBody.js +59 -0
  69. package/src/client/container/audiolabelview/controller.js +104 -0
  70. package/src/client/container/audiolabelview/localaudiolevel.js +157 -0
  71. package/src/client/container/audiolabelview/noaudio.js +86 -0
  72. package/src/client/container/audiolabelview/remoteaudiolevel.js +110 -0
  73. package/src/client/container/audiolabelview/settingpageaudiolevel.js +154 -0
  74. package/src/client/container/common/contactField.js +30 -0
  75. package/src/client/container/common/each.contact.js +41 -0
  76. package/src/client/container/common/findContact.js +31 -0
  77. package/src/client/container/connectivitycheckview/body.js +113 -0
  78. package/src/client/container/connectivitycheckview/components/fractionalLoss.js +57 -0
  79. package/src/client/container/connectivitycheckview/components/mediaConnectivity.js +41 -0
  80. package/src/client/container/connectivitycheckview/components/roundTripTime.js +57 -0
  81. package/src/client/container/connectivitycheckview/components/rttgraph/rttgraph.js +176 -0
  82. package/src/client/container/connectivitycheckview/components/rttgraph/utils.js +96 -0
  83. package/src/client/container/connectivitycheckview/components/throughput.js +53 -0
  84. package/src/client/container/connectivitycheckview/components/throughputMessage.js +36 -0
  85. package/src/client/container/connectivitycheckview/connectivitycheck.css +44 -0
  86. package/src/client/container/connectivitycheckview/footer.js +43 -0
  87. package/src/client/container/connectivitycheckview/index.js +3 -0
  88. package/src/client/container/connectivitycheckview/loading/loading.css +73 -0
  89. package/src/client/container/connectivitycheckview/loading/loading.js +15 -0
  90. package/src/client/container/connectivitycheckview/main.js +19 -0
  91. package/src/client/container/dialerview/body.js +135 -0
  92. package/src/client/container/dialerview/dialpad.css +104 -0
  93. package/src/client/container/dialerview/dialpad.js +29 -0
  94. package/src/client/container/dialerview/index.js +3 -0
  95. package/src/client/container/dialerview/main.js +19 -0
  96. package/src/client/container/errors/error.css +30 -0
  97. package/src/client/container/errors/error.js +58 -0
  98. package/src/client/container/errors/index.js +3 -0
  99. package/src/client/container/footer/components/acceptOrReject.js +26 -0
  100. package/src/client/container/footer/components/availableOrEnd.js +28 -0
  101. package/src/client/container/footer/components/connectivitycheck.js +21 -0
  102. package/src/client/container/footer/components/downloadlogs.js +23 -0
  103. package/src/client/container/footer/components/info.js +22 -0
  104. package/src/client/container/footer/components/language.js +22 -0
  105. package/src/client/container/footer/components/reportcall.js +35 -0
  106. package/src/client/container/footer/components/version.js +22 -0
  107. package/src/client/container/header/header.css +46 -0
  108. package/src/client/container/header/header.js +135 -0
  109. package/src/client/container/header/index.js +3 -0
  110. package/src/client/container/home.js +129 -0
  111. package/src/client/container/login/body.js +67 -0
  112. package/src/client/container/login/ccpinputbox.js +23 -0
  113. package/src/client/container/login/footer.js +19 -0
  114. package/src/client/container/login/index.js +2 -0
  115. package/src/client/container/login/login.css +134 -0
  116. package/src/client/container/login/main.js +23 -0
  117. package/src/client/container/networkstrengthview/index.js +3 -0
  118. package/src/client/container/networkstrengthview/loading/loading.css +74 -0
  119. package/src/client/container/networkstrengthview/loading/loading.js +15 -0
  120. package/src/client/container/networkstrengthview/networkstrength.js +102 -0
  121. package/src/client/container/popups/confirmreport/confirmreport.css +47 -0
  122. package/src/client/container/popups/confirmreport/confirmreport.js +55 -0
  123. package/src/client/container/popups/quality/quality.css +32 -0
  124. package/src/client/container/popups/quality/quality.js +44 -0
  125. package/src/client/container/quickconnects/body.js +141 -0
  126. package/src/client/container/quickconnects/close.js +23 -0
  127. package/src/client/container/quickconnects/index.js +3 -0
  128. package/src/client/container/quickconnects/main.js +18 -0
  129. package/src/client/container/quickconnects/quickconnects.css +95 -0
  130. package/src/client/container/reportissueview/body.js +73 -0
  131. package/src/client/container/reportissueview/feedbackRatings.js +37 -0
  132. package/src/client/container/reportissueview/footer.js +20 -0
  133. package/src/client/container/reportissueview/index.js +3 -0
  134. package/src/client/container/reportissueview/issueNotes.js +22 -0
  135. package/src/client/container/reportissueview/issues.js +44 -0
  136. package/src/client/container/reportissueview/main.js +105 -0
  137. package/src/client/container/reportissueview/predefinedIssues.js +38 -0
  138. package/src/client/container/reportissueview/reportissue.css +102 -0
  139. package/src/client/container/settingsview/body.js +156 -0
  140. package/src/client/container/settingsview/components/audiooutputdevice.js +25 -0
  141. package/src/client/container/settingsview/components/deskphone.js +29 -0
  142. package/src/client/container/settingsview/components/desktopsettings.js +38 -0
  143. package/src/client/container/settingsview/components/dropdown-options.js +44 -0
  144. package/src/client/container/settingsview/components/phonetype.js +14 -0
  145. package/src/client/container/settingsview/components/settings.js +23 -0
  146. package/src/client/container/settingsview/components/softphone.js +30 -0
  147. package/src/client/container/settingsview/components/softphonesettings.js +35 -0
  148. package/src/client/container/settingsview/footer.js +96 -0
  149. package/src/client/container/settingsview/index.js +3 -0
  150. package/src/client/container/settingsview/main.js +20 -0
  151. package/src/client/container/settingsview/settings.css +126 -0
  152. package/src/client/container/statechangeview/body.js +61 -0
  153. package/src/client/container/statechangeview/footer.js +43 -0
  154. package/src/client/container/statechangeview/index.js +3 -0
  155. package/src/client/container/statechangeview/main.js +21 -0
  156. package/src/client/container/statechangeview/statuschange.css +47 -0
  157. package/src/client/container/transfercall/body.js +139 -0
  158. package/src/client/container/transfercall/close.js +23 -0
  159. package/src/client/container/transfercall/index.js +3 -0
  160. package/src/client/container/transfercall/main.js +18 -0
  161. package/src/client/container/transfercall/transfercall.css +99 -0
  162. package/src/client/index.js +13 -0
  163. package/src/client/reducers/acReducer.js +277 -0
  164. package/src/client/reducers/reducer.js +8 -0
  165. package/src/client/reducers.js +2 -0
  166. package/src/client/res/images/agent-voice-freq-icon.svg +61 -0
  167. package/src/client/res/images/change-status-icon.svg +16 -0
  168. package/src/client/res/images/csio-logo.png +0 -0
  169. package/src/client/res/images/csioLogo.png +0 -0
  170. package/src/client/res/images/dialer-setting-icon.svg +15 -0
  171. package/src/client/res/images/fa-circle-mark.svg +3 -0
  172. package/src/client/res/images/fa-circle-unmark.svg +3 -0
  173. package/src/client/res/images/fa-close-or-dismiss.svg +17 -0
  174. package/src/client/res/images/fa-danger.svg +3 -0
  175. package/src/client/res/images/fa-dial-button.svg +13 -0
  176. package/src/client/res/images/fa-dial-number.svg +15 -0
  177. package/src/client/res/images/fa-download.svg +3 -0
  178. package/src/client/res/images/fa-hold.svg +13 -0
  179. package/src/client/res/images/fa-ico-join.svg +27 -0
  180. package/src/client/res/images/fa-ico-swap.svg +27 -0
  181. package/src/client/res/images/fa-info.svg +3 -0
  182. package/src/client/res/images/fa-input-sound.svg +5 -0
  183. package/src/client/res/images/fa-language.svg +3 -0
  184. package/src/client/res/images/fa-mark-false.svg +3 -0
  185. package/src/client/res/images/fa-mark-true.svg +3 -0
  186. package/src/client/res/images/fa-mic-freq-temporary.gif +0 -0
  187. package/src/client/res/images/fa-mic.svg +3 -0
  188. package/src/client/res/images/fa-mini-endcall.svg +48 -0
  189. package/src/client/res/images/fa-mini-hold.svg +47 -0
  190. package/src/client/res/images/fa-mini-resume.svg +45 -0
  191. package/src/client/res/images/fa-mute.svg +13 -0
  192. package/src/client/res/images/fa-network-strength-1.svg +5 -0
  193. package/src/client/res/images/fa-network-strength-2.svg +6 -0
  194. package/src/client/res/images/fa-network-strength-3.svg +6 -0
  195. package/src/client/res/images/fa-network-strength-4.svg +6 -0
  196. package/src/client/res/images/fa-network-strength-5.svg +5 -0
  197. package/src/client/res/images/fa-network-strength-unknown-2.svg +9 -0
  198. package/src/client/res/images/fa-network-strength-unknown.svg +6 -0
  199. package/src/client/res/images/fa-quick-connect.svg +15 -0
  200. package/src/client/res/images/fa-refresh.svg +3 -0
  201. package/src/client/res/images/fa-resume.svg +3 -0
  202. package/src/client/res/images/fa-return.svg +3 -0
  203. package/src/client/res/images/fa-three-dots.svg +32 -0
  204. package/src/client/res/images/fa-tick-green.svg +3 -0
  205. package/src/client/res/images/fa-tick-mark.svg +3 -0
  206. package/src/client/res/images/fa-transfer.svg +3 -0
  207. package/src/client/res/images/fa-version.svg +4 -0
  208. package/src/client/res/images/fa-voice-no-freq.svg +5 -0
  209. package/src/client/res/images/favicon.ico +0 -0
  210. package/src/client/res/images/muted-icon.svg +13 -0
  211. package/src/client/res/images/network-strength-icon.svg +13 -0
  212. package/src/client/res/images/peer-voice-freq-icon.svg +26 -0
  213. package/src/client/res/images/star-white.svg +6 -0
  214. package/src/client/res/images/star-yellow.svg +6 -0
  215. package/src/client/res/scss/global.css +14 -0
  216. package/src/client/router.js +17 -0
  217. package/src/client/store.js +11 -0
  218. package/src/client/utils/acutils.js +114 -0
  219. package/src/client/utils/agetStateMap.js +36 -0
  220. package/src/client/utils/feedback.js +3 -0
  221. package/src/client/utils/initialStateManager.js +14 -0
  222. package/src/server/index.js +53 -0
  223. package/src/server/logger.js +93 -0
  224. package/src/server/public/fonts/AmazonEmber_Lt.ttf +0 -0
  225. package/src/server/public/fonts/AmazonEmber_Rg.ttf +0 -0
  226. package/src/server/public/img/favicon.ico +0 -0
  227. package/src/server/public/js/amazon-connect-pre-shim.js +2 -0
  228. package/src/server/router/compare.js +36 -0
  229. package/src/server/router/index.js +36 -0
  230. package/src/server/router/stock.js +33 -0
  231. package/src/server/views/_heap_prod.ejs +8 -0
  232. package/src/server/views/_hotjar_prod.ejs +14 -0
  233. package/src/server/views/_hotjar_test.ejs +12 -0
  234. package/src/server/views/compare.ejs +69 -0
  235. package/src/server/views/index.ejs +69 -0
  236. package/src/server/views/stock.ejs +101 -0
  237. package/webpack.common.config.js +48 -0
  238. package/webpack.dev.config.js +21 -0
  239. package/webpack.prod.config.js +10 -0
@@ -0,0 +1,18 @@
1
+ import React from 'react';
2
+ import Header from './../header/index';
3
+ import Body from './body';
4
+
5
+ import styles from './quickconnects.css';
6
+
7
+ const QuickConnectsView = ({}) => (
8
+ <div className={`row h-100`}>
9
+ <div className={`col-12 ${styles.zeroPadding}`}>
10
+ <div className={`card h-100 ${styles.cardBodyMain}`}>
11
+ <Header/>
12
+ <Body/>
13
+ </div>
14
+ </div>
15
+ </div>
16
+ );
17
+
18
+ export default QuickConnectsView;
@@ -0,0 +1,95 @@
1
+ .zeroPadding {
2
+ padding: 0 !important;
3
+ }
4
+
5
+ .cardBodyMain {
6
+ background: #f2f2f2;
7
+ }
8
+
9
+ .cardBody {
10
+ background-color: #ffffff;
11
+ }
12
+
13
+ .quickConnectText {
14
+ color: #000000;
15
+ font-size: 18px;
16
+ font-family: AmazonEmber;
17
+ }
18
+
19
+ .quickConnectSearch {
20
+ font-family: AmazonEmber;
21
+ color: #000000;
22
+ border: 1px solid #000000;
23
+ border-top: 0 !important;
24
+ border-left: 0 !important;
25
+ border-right: 0 !important;
26
+ border-radius: 0;
27
+ box-shadow: none;
28
+ }
29
+
30
+ .quickConnectSearch:focus {
31
+ border: 1px solid #000000;
32
+ border-top: 0 !important;
33
+ border-left: 0 !important;
34
+ border-right: 0 !important;
35
+ border-radius: 0;
36
+ box-shadow: inset 0 0 1px 0 rgba(0, 0, 0, 0.29);
37
+ }
38
+
39
+ .callPhoneDialButton{
40
+ background-color: #46596e;
41
+ font-family: AmazonEmber;
42
+ color: #ffffff !important;
43
+ cursor: pointer;
44
+ border-radius: 0 !important;
45
+ }
46
+
47
+ .contactListBox {
48
+ margin-top: 14px;
49
+ background: #FFFFFF;
50
+ border: 1px solid #CCCCCC;
51
+ border-radius: 2px;
52
+ height: 250px;
53
+ overflow-y: auto;
54
+ /*box-shadow: inset 0 1px 3px 0 rgba(0, 0, 0, 0.29);*/
55
+ box-shadow: none;
56
+ }
57
+
58
+ .contactItem {
59
+ /*background: #3388DD;*/
60
+ /*color: #FFFFFF;*/
61
+ }
62
+
63
+ .contactItem:hover {
64
+ background: #d8d8d8;
65
+ color: #000000;
66
+ }
67
+
68
+ .contactItem:hover .dialButton {
69
+ visibility: visible;
70
+ color: #FFFFFF !important;
71
+ }
72
+
73
+ .contactItem:hover .contactName {
74
+ color: #000000 !important;
75
+ }
76
+
77
+ .contactName {
78
+ font-family: AmazonEmber;
79
+ color: #000000 !important;
80
+ text-align: left;
81
+ }
82
+
83
+ .dialButton {
84
+ visibility: hidden;
85
+ background-color: #46596e;
86
+ font-family: AmazonEmber;
87
+ color: #ffffff !important;
88
+ cursor: pointer;
89
+ border-radius: 0 !important;
90
+ }
91
+
92
+ .cursor {
93
+ cursor: pointer;
94
+ }
95
+
@@ -0,0 +1,73 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+
4
+ import closeOrDismissIcon from '../../res/images/fa-close-or-dismiss.svg';
5
+
6
+ import IssueNotes from './issueNotes';
7
+ import FeedbackRatings from './feedbackRatings';
8
+ import PredefinedIssues from './predefinedIssues';
9
+ import styles from './reportissue.css';
10
+
11
+ const selectedIssueCount = (issueList) => {
12
+ let totalCount = 0;
13
+ for (let i = 0; i < issueList.length; i += 1) {
14
+ let currentIssue = issueList[i].items;
15
+ for (let j = 0; j < currentIssue.length; j += 1) {
16
+ let currentItem = currentIssue[j];
17
+ if (currentItem.marked) {
18
+ totalCount += 1;
19
+ }
20
+ }
21
+ }
22
+ return totalCount;
23
+ };
24
+
25
+ const BodyHeader = ({ closeReportCallIssue }) => (
26
+ <div className="row ">
27
+ <div className="col-10">
28
+ <span className={styles.cardBodyHeader}>Report a call issue</span>
29
+ </div>
30
+ <div className="col-2"
31
+ id='dialer_report_issue_close'
32
+ onClick={closeReportCallIssue}>
33
+ <img src={closeOrDismissIcon} className={styles.cursor}/></div>
34
+ </div>
35
+ );
36
+ BodyHeader.propTypes = {
37
+ closeReportCallIssue: PropTypes.func.isRequired
38
+ };
39
+
40
+ const Body = ({ closeReportCallIssue, onFeedbackTextChange, onFeedbackRatingChange, onIssueListSelectionChange, feedbackRatings, feedbackText, issueList }) => (
41
+ <div className={`card-body ${styles.cardBodyMain}`}>
42
+
43
+ <BodyHeader closeReportCallIssue={closeReportCallIssue}/>
44
+
45
+ <FeedbackRatings onFeedbackRatingChange={onFeedbackRatingChange}
46
+ feedbackRating={feedbackRatings}/>
47
+
48
+ <IssueNotes onFeedbackTextChange={onFeedbackTextChange}
49
+ feedbackText={feedbackText}/>
50
+
51
+ <div className="row">
52
+ <div className={`col-7 text-left ${styles.bodySelectAReason}`}>Select a reason
53
+ </div>
54
+ <div className={`col-5 text-right ${styles.bodyIssueSelect}`}>{selectedIssueCount(issueList)} selected
55
+ </div>
56
+ </div>
57
+ <div className={`row`}>
58
+ <PredefinedIssues onIssueListSelectionChange={onIssueListSelectionChange}
59
+ issueList={issueList}/>
60
+ </div>
61
+ </div>
62
+ );
63
+
64
+ Body.propTypes = {
65
+ closeReportCallIssue: PropTypes.func.isRequired,
66
+ onFeedbackTextChange: PropTypes.func.isRequired,
67
+ onFeedbackRatingChange: PropTypes.func.isRequired,
68
+ onIssueListSelectionChange: PropTypes.func.isRequired,
69
+ feedbackRatings: PropTypes.number.isRequired,
70
+ feedbackText: PropTypes.string.isRequired,
71
+ issueList: PropTypes.array.isRequired
72
+ };
73
+ export default Body;
@@ -0,0 +1,37 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import lo from 'lodash';
4
+
5
+ import starYellowIcon from '../../res/images/star-yellow.svg';
6
+ import starWhiteIcon from '../../res/images/star-white.svg';
7
+
8
+ import { feedbackRatings, feedbackRatingsText } from '../../utils/feedback';
9
+ import styles from './reportissue.css';
10
+
11
+ const FeedbackRatings = ({ onFeedbackRatingChange, feedbackRating }) => (
12
+ <div className="row mt-0">
13
+ <div className="col-12">
14
+ <a className={`text-left ${styles.callQualityText} `}>How was the call
15
+ quality? </a></div>
16
+ <div className="col-12">
17
+ {
18
+ feedbackRatings.map((currentFeedback) => (
19
+ <a key={`feedback-rating-${currentFeedback}`} className={styles.cursor}
20
+ onClick={() => onFeedbackRatingChange(currentFeedback)}>
21
+ <img src={currentFeedback <= feedbackRating ? starYellowIcon : starWhiteIcon}/>
22
+ </a>
23
+ ))
24
+ }
25
+ </div>
26
+ <div className={`col-12 ${styles.feedbackRatingText}`}>
27
+ &nbsp;{lo.get(feedbackRatingsText, feedbackRating - 1)}
28
+ </div>
29
+ </div>
30
+ );
31
+
32
+ FeedbackRatings.propTypes = {
33
+ onFeedbackRatingChange: PropTypes.func.isRequired,
34
+ feedbackRating: PropTypes.number.isRequired
35
+ };
36
+
37
+ export default FeedbackRatings;
@@ -0,0 +1,20 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+
4
+ import styles from './reportissue.css';
5
+
6
+ const Footer = ({ submitIssue }) => (
7
+ <div className={`card-footer m-0 p-0 ${styles.footerMain}`}>
8
+ <div className="row">
9
+ <div className="col-12">
10
+ <a id='dialer_report_issue_submit'
11
+ className={`btn w-100 ${styles.footerSubmit}`}
12
+ onClick={submitIssue}> Submit</a>
13
+ </div>
14
+ </div>
15
+ </div>
16
+ );
17
+ Footer.propTypes = {
18
+ submitIssue: PropTypes.func.isRequired
19
+ };
20
+ export default Footer;
@@ -0,0 +1,3 @@
1
+ import ReportCallIssueView from './main';
2
+
3
+ export default ReportCallIssueView;
@@ -0,0 +1,22 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+
4
+ import styles from './reportissue.css';
5
+
6
+ const IssueNotes = ({ onFeedbackTextChange, feedbackText }) => (
7
+ <div className="row mt-1">
8
+ <div className="col-12">
9
+ <textarea placeholder="Enter your notes about the issue here" rows={3}
10
+ value={feedbackText}
11
+ onChange={onFeedbackTextChange}
12
+ className={`col-12 ${styles.textArea}`}/>
13
+ </div>
14
+ </div>
15
+ );
16
+
17
+ IssueNotes.propTypes = {
18
+ onFeedbackTextChange: PropTypes.func.isRequired,
19
+ feedbackText: PropTypes.string
20
+ };
21
+
22
+ export default IssueNotes;
@@ -0,0 +1,44 @@
1
+ // list of constant issues
2
+ // which might come from some API call later on
3
+
4
+ import lo from 'lodash';
5
+
6
+ const issueList = [
7
+ {
8
+ name: '',
9
+ items: [
10
+ { text: 'I need help, contact me', marked: false, id: 'dialer_report_issue_need_help' }
11
+ ]
12
+ },
13
+ {
14
+ name: 'Audio related problems',
15
+ items: [
16
+ { text: 'Unable to hear customer', marked: false },
17
+ { text: 'Customer can’t hear agent', marked: false },
18
+ { text: 'Customer is too quiet', marked: false },
19
+ { text: 'Audio dropped mid call', marked: false }
20
+ ]
21
+ },
22
+ {
23
+ name: 'Call handling problems',
24
+ items: [
25
+ { text: 'Unable to transfer the customer', marked: false },
26
+ { text: 'Unable to put the customer on hold', marked: false },
27
+ { text: 'Call dropped while talking', marked: false },
28
+ { text: 'Call dropped while hold', marked: false }
29
+ ]
30
+ },
31
+ {
32
+ name: 'Static/ Gaps',
33
+ items: [
34
+ { text: 'Static on line', marked: false },
35
+ { text: 'Intolerable static on line, not able to complete call', marked: false },
36
+ { text: 'Gaps in audio', marked: false }
37
+ ]
38
+ }
39
+ ];
40
+
41
+ export const getIssueList = () => {
42
+ let issueObject = lo.cloneDeep(issueList);
43
+ return [...issueObject];
44
+ };
@@ -0,0 +1,105 @@
1
+ import React, { Component } from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { connect } from 'react-redux';
4
+ import Header from '../header/index';
5
+ import Body from './body';
6
+ import Footer from './footer';
7
+ import { getIssueList } from './issues';
8
+ import { onRequestReportCallIssue } from '../../reducers/acReducer';
9
+
10
+ import sessionManager from './../../api/sessionManager';
11
+ import feedbackHandler from './../../api/feedbackHandler';
12
+
13
+ import styles from './reportissue.css';
14
+ import csioHandler from '../../api/csioHandler';
15
+
16
+ class ReportCallIssueView extends Component {
17
+ constructor (props) {
18
+ super(props);
19
+
20
+ this.state = {
21
+ feedbackRatings: feedbackHandler.getFeedbackRatings(),
22
+ feedbackText: '',
23
+ issueList: getIssueList()
24
+ };
25
+ this.onFeedbackTextChange = this.onFeedbackTextChange.bind(this);
26
+ this.onFeedbackRatingChange = this.onFeedbackRatingChange.bind(this);
27
+ this.onIssueListSelectionChange = this.onIssueListSelectionChange.bind(this);
28
+ this.closeReportCallIssue = this.closeReportCallIssue.bind(this);
29
+ this.submitIssue = this.submitIssue.bind(this);
30
+ }
31
+
32
+ onFeedbackTextChange (event) {
33
+ this.setState({
34
+ feedbackText: event.target.value
35
+ });
36
+ }
37
+
38
+ onFeedbackRatingChange (currentFeedback) {
39
+ const feedback = feedbackHandler.updateFeedback(currentFeedback);
40
+ this.setState({
41
+ feedbackRatings: feedback
42
+ });
43
+ }
44
+
45
+ onIssueListSelectionChange (issueIndex, itemIndex) {
46
+ let issueList = [...this.state.issueList];
47
+ let currentItem = issueList[issueIndex].items[itemIndex];
48
+ currentItem.marked = !currentItem.marked;
49
+
50
+ this.setState({
51
+ issueList: issueList
52
+ });
53
+ }
54
+
55
+ submitIssue () {
56
+ let { feedbackRatings, feedbackText, issueList: currentIssue } = this.state;
57
+ csioHandler.sendFeedback({ feedbackRatings, feedbackText, issueList: currentIssue });
58
+
59
+ sessionManager.setAgentAvailable();
60
+ feedbackHandler.updateFeedback(0);
61
+ this.closeReportCallIssue();
62
+ }
63
+
64
+ closeReportCallIssue () {
65
+ this.props.closeReportCallIssue();
66
+ }
67
+
68
+ render () {
69
+ return (
70
+ <div className={`row h-100`}>
71
+ <div className={`col-12 ${styles.zeroPadding}`}>
72
+ <div className={`card h-100 ${styles.cardBody}`}>
73
+ <Header/>
74
+ <Body
75
+ feedbackRatings={this.state.feedbackRatings}
76
+ feedbackText={this.state.feedbackText}
77
+ issueList={this.state.issueList}
78
+ onFeedbackTextChange={this.onFeedbackTextChange}
79
+ onFeedbackRatingChange={this.onFeedbackRatingChange}
80
+ onIssueListSelectionChange={this.onIssueListSelectionChange}
81
+ closeReportCallIssue={this.closeReportCallIssue}
82
+ />
83
+ <Footer submitIssue={this.submitIssue}/>
84
+ </div>
85
+ </div>
86
+ </div>
87
+
88
+ );
89
+ }
90
+ }
91
+
92
+ ReportCallIssueView.propTypes = {
93
+ closeReportCallIssue: PropTypes.func.isRequired
94
+ };
95
+ const mapStateToProps = state => ({});
96
+ const mapDispatchToProps = dispatch => ({
97
+ closeReportCallIssue: () => {
98
+ dispatch(onRequestReportCallIssue('close'));
99
+ }
100
+ });
101
+
102
+ export default connect(
103
+ mapStateToProps,
104
+ mapDispatchToProps
105
+ )(ReportCallIssueView);
@@ -0,0 +1,38 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+
4
+ import markFalseIcon from '../../res/images/fa-mark-false.svg';
5
+ import markTrueIcon from '../../res/images/fa-mark-true.svg';
6
+ import styles from './reportissue.css';
7
+
8
+ const PredefinedIssues = ({ onIssueListSelectionChange, issueList }) => (
9
+ <div className="col-12" style={{}}>
10
+ {
11
+ issueList.map((issue, issueIndex) => (
12
+ <div className={`row mt-${issue.name === '' ? 0 : 1}`} key={`issue-${issue.name}`}>
13
+ <div className="col-12">
14
+ <a className={styles.predefinedIssueName}> {issue.name} </a>
15
+ </div>
16
+ {
17
+ issue.items.map((item, itemIndex) => (
18
+ <div className="col-12" key={`issue-link-${item.text}`}>
19
+ <a className={styles.predefinedIssueList}>
20
+ <img style={{ cursor: 'pointer' }}
21
+ id={item.id || ''}
22
+ onClick={() => onIssueListSelectionChange(issueIndex, itemIndex)}
23
+ src={item.marked ? markTrueIcon : markFalseIcon}/> {item.text} </a>
24
+ </div>
25
+ ))
26
+ }
27
+ </div>
28
+ ))
29
+ }
30
+ </div>
31
+ );
32
+
33
+ PredefinedIssues.propTypes = {
34
+ onIssueListSelectionChange: PropTypes.func.isRequired,
35
+ issueList: PropTypes.array.isRequired
36
+ };
37
+
38
+ export default PredefinedIssues;
@@ -0,0 +1,102 @@
1
+ .footerMain {
2
+ background-color: rgb(255, 255, 255);
3
+ border-top: 0;
4
+ }
5
+
6
+ .footerSubmit {
7
+ cursor: pointer;
8
+ height: 36px;
9
+ box-shadow: rgba(0, 0, 0, 0.2) 0 2px 4px 0;
10
+ background-color: rgb(56, 133, 222);
11
+ color: rgb(255, 255, 255) !important;
12
+ font-family: AmazonEmber;
13
+ font-size: 14px;
14
+ border-radius: 0 !important;
15
+ }
16
+
17
+ .textArea {
18
+ outline: none !important;
19
+ max-height: 55px;
20
+ min-height: 10px;
21
+ background-color: #f7f7f7;
22
+ resize: none;
23
+ font-family: AmazonEmber;
24
+ font-size: 14px;
25
+ color: #000000;
26
+ }
27
+
28
+ .feedbackRatingText {
29
+ font-family: AmazonEmber;
30
+ font-size: 12px;
31
+ letter-spacing: normal;
32
+ color: #000000;
33
+ }
34
+
35
+ .callQualityText {
36
+ font-family: AmazonEmber;
37
+ font-size: 12px;
38
+ color: #000000;
39
+ }
40
+
41
+ .cursor {
42
+ cursor: pointer;
43
+ }
44
+
45
+ .zeroPadding {
46
+ padding: 0;
47
+ }
48
+
49
+ .cardBody {
50
+ background-color: #f2f2f2;
51
+ }
52
+
53
+ .predefinedIssueDivMain {
54
+ /*max-height: 117px;*/
55
+ /*min-height: 20%;*/
56
+ /*border: solid 1px #cfcfcf;*/
57
+ /*background-color: #f7f7f7;*/
58
+ /*overflow-y: scroll;*/
59
+ }
60
+
61
+ .predefinedIssueName {
62
+ opacity: 0.6;
63
+ font-family: AmazonEmber;
64
+ font-size: 12px;
65
+ letter-spacing: normal;
66
+ color: #000000;
67
+ }
68
+
69
+ .predefinedIssueList {
70
+ font-family: AmazonEmber;
71
+ font-size: 14px;
72
+ color: #000000;
73
+ }
74
+
75
+ .bodySelectAReason {
76
+ opacity: 0.6;
77
+ font-family: AmazonEmber;
78
+ font-size: 12px;
79
+ letter-spacing: normal;
80
+ color: #000000;
81
+ }
82
+
83
+ .bodyIssueSelect {
84
+ opacity: 0.6;
85
+ font-family: AmazonEmber;
86
+ font-size: 12px;
87
+ letter-spacing: normal;
88
+ color: #000000;
89
+ }
90
+
91
+ .cardBodyMain {
92
+ background-color: #ffffff;
93
+ /*background-color: #f7f7f7;*/
94
+ overflow-y: scroll;
95
+ height: 0em;
96
+ }
97
+
98
+ .cardBodyHeader {
99
+ color: #000000;
100
+ font-size: 18px;
101
+ font-family: AmazonEmber;
102
+ }