@defra/flood-webchat 0.0.1-beta.2 → 0.0.1-beta.21
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/README.md +83 -1
- package/dist/client.js +1607 -212
- package/dist/client.js.map +1 -1
- package/dist/server.js +181 -240
- package/dist/server.js.map +1 -1
- package/main.scss +4 -3
- package/package.json +6 -2
- package/src/client/components/availability/availability.jsx +44 -46
- package/src/client/components/availability/availability.scss +105 -5
- package/src/client/components/chat/chat.jsx +169 -0
- package/src/client/components/chat/chat.scss +143 -0
- package/src/client/components/errorSummary/error-summary.jsx +34 -0
- package/src/client/components/message/message.jsx +20 -0
- package/src/client/components/panel/panel-footer.jsx +9 -0
- package/src/client/components/panel/panel-header.jsx +41 -0
- package/src/client/components/panel/panel.jsx +119 -0
- package/src/client/components/panel/panel.scss +72 -0
- package/src/client/components/screens/end-chat.jsx +17 -0
- package/src/client/components/screens/pre-chat.jsx +65 -0
- package/src/client/components/screens/request-chat.jsx +156 -0
- package/src/client/components/screens/settings.jsx +67 -0
- package/src/client/components/screens/unavailable.jsx +23 -0
- package/src/client/hooks/useFocusedElements.js +71 -0
- package/src/client/hooks/useTextareaAutosize.js +13 -0
- package/src/client/index.jsx +15 -1
- package/src/client/lib/check-availability.js +1 -0
- package/src/client/lib/message-notification.js +36 -0
- package/src/client/lib/transform-messages.js +35 -0
- package/src/client/store/AppProvider.jsx +139 -0
- package/src/client/store/actions-map.js +119 -0
- package/src/client/store/constants.js +3 -0
- package/src/client/store/reducer.js +28 -0
- package/src/client/store/useApp.js +5 -0
- package/src/client/store/useChatSdk.js +37 -0
- package/src/server/index.js +15 -6
- package/src/server/lib/client.js +31 -35
- package/src/server/lib/utils.js +18 -9
- package/src/client/lib/external-stores.js +0 -4
- package/src/client/lib/external-sync-store.js +0 -42
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","mappings":"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","sources":["webpack://@defra/flood-webchat/./src/server/index.js","webpack://@defra/flood-webchat/./src/server/lib/client.js","webpack://@defra/flood-webchat/./src/server/lib/utils.js","webpack://@defra/flood-webchat/external commonjs \"axios\"","webpack://@defra/flood-webchat/external commonjs \"jwt-decode\"","webpack://@defra/flood-webchat/external commonjs \"querystring\"","webpack://@defra/flood-webchat/webpack/bootstrap","webpack://@defra/flood-webchat/webpack/before-startup","webpack://@defra/flood-webchat/webpack/startup","webpack://@defra/flood-webchat/webpack/after-startup"],"sourcesContent":["const { authenticate, getHost, getIsOpen, getActivity } = require('./lib/client.js')\n\n/**\n * Returns webchat availability\n * @param options {object}\n * @param options.clientId {string}\n * @param options.clientSecret {string}\n * @param options.accessKey {string}\n * @param options.accessSecret {string}\n * @param options.skillEndpoint {string}\n * @param options.hoursEndpoint {string}\n * @param options.maxQueueCount {string}\n * @returns {Promise<{date: Date, availability: (string)}>}\n */\nmodule.exports = async function getAvailability ({\n clientId,\n clientSecret,\n accessKey,\n accessSecret,\n skillEndpoint,\n hoursEndpoint,\n maxQueueCount\n}) {\n const authorisation = 'Basic ' + Buffer.from(`${encodeURIComponent(clientId)}:${encodeURIComponent(clientSecret)}`).toString('base64')\n\n // Cache authentication and re-authenticate when needed (lasts 1 hour?)\n const { tenantId, token, tokenType } = await authenticate({ authorisation, accessKey, accessSecret })\n\n const host = await getHost({ tenantId })\n\n const [{ hasCapacity, hasAgentsAvailable }, isOpen] = await Promise.all([\n getActivity({ tokenType, token, host, skillEndpoint, maxQueueCount }),\n getIsOpen({ token, tokenType, host, hoursEndpoint })\n ])\n\n const isAvailable = isOpen && hasAgentsAvailable && hasCapacity\n const isExistingOnly = isOpen && hasAgentsAvailable && !hasCapacity\n\n let availability = 'UNAVAILABLE'\n\n if (isAvailable) {\n availability = 'AVAILABLE'\n } else if (isExistingOnly) {\n availability = 'EXISTING'\n }\n\n return {\n date: new Date(),\n availability\n }\n}\n","const querystring = require('querystring')\nconst axios = require('axios')\nconst jwtdecode = require('jwt-decode')\nconst { isWithinHours } = require('./utils.js')\n\nconst contentType = 'application/x-www-form-urlencoded'\n\nconst authenticate = async ({ authorisation, accessKey, accessSecret }) => {\n const uri = 'https://cxone.niceincontact.com/auth/token'\n\n const config = {\n signal: AbortSignal.timeout(3000),\n headers: {\n Host: 'eu1.niceincontact.com',\n 'Content-Type': contentType,\n Authorization: authorisation\n }\n }\n\n const body = querystring.stringify({\n grant_type: 'password',\n username: accessKey,\n password: accessSecret\n })\n\n const auth = await axios.post(uri, body, config)\n\n return {\n token: auth.data.access_token,\n tokenType: auth.data.token_type,\n tenantId: jwtdecode(auth.data.id_token)?.tenantId\n }\n}\n\nconst getHost = async ({ tenantId }) => {\n const uri = `https://cxone.niceincontact.com/.well-known/cxone-configuration?tenantId=${tenantId}`\n\n const config = {\n signal: AbortSignal.timeout(3000)\n }\n\n const api = await axios.get(uri, config)\n\n return `api-${api.data.area}.niceincontact.com`\n}\n\nconst getActivity = async ({ tokenType, token, host, skillEndpoint, maxQueueCount }) => {\n const config = {\n signal: AbortSignal.timeout(3000),\n headers: {\n Host: host,\n Authorization: `${tokenType} ${token}`,\n 'Content-Type': contentType\n }\n }\n const uri = `https://${host}${skillEndpoint}`\n\n const skill = await axios.get(uri, config)\n\n const activity = skill.data.skillActivity[0]\n\n return {\n hasCapacity: activity.queueCount < maxQueueCount,\n hasAgentsAvailable: activity.agentsAvailable >= 1\n }\n}\n\nconst getIsOpen = async ({ host, token, tokenType, hoursEndpoint }) => {\n const config = {\n signal: AbortSignal.timeout(3000),\n headers: {\n Host: 'api-l36.niceincontact.com',\n Authorization: `${tokenType} ${token}`,\n 'Content-Type': contentType\n }\n }\n\n const uri = `https://${host}${hoursEndpoint}`\n\n const hours = await axios.get(uri, config)\n\n const days = hours.data.resultSet.hoursOfOperationProfiles[0].days\n\n return isWithinHours(days)\n}\n\nmodule.exports = {\n authenticate,\n getHost,\n getIsOpen,\n getActivity\n}\n","const isWithinHours = days => {\n const now = new Date()\n const name = now.toLocaleDateString('en-GB', { weekday: 'long' })\n const day = days.find(d => d.day.toLowerCase() === name.toLowerCase())\n const date = now.toLocaleDateString('en-GB').split('/')\n const open = `${date[2]}-${date[1]}-${date[0]}T${day.openTime}.000Z`\n const close = `${date[2]}-${date[1]}-${date[0]}T${day.closeTime}.000Z`\n\n return now.getTime() >= Date.parse(open) && now.getTime() <= Date.parse(close)\n}\n\nmodule.exports = {\n isWithinHours\n}\n","module.exports = require(\"axios\");","module.exports = require(\"jwt-decode\");","module.exports = require(\"querystring\");","// 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","","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(\"./src/server/index.js\");\n",""],"names":["_regeneratorRuntime","exports","Op","Object","prototype","hasOwn","hasOwnProperty","defineProperty","obj","key","desc","value","$Symbol","Symbol","iteratorSymbol","iterator","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","enumerable","configurable","writable","err","wrap","innerFn","outerFn","self","tryLocsList","protoGenerator","Generator","generator","create","context","Context","makeInvokeMethod","tryCatch","fn","arg","type","call","ContinueSentinel","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","defineIteratorMethods","forEach","method","_invoke","AsyncIterator","PromiseImpl","invoke","resolve","reject","record","result","_typeof","__await","then","unwrapped","error","previousPromise","callInvokeWithMethodAndArg","state","Error","done","delegate","delegateResult","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","methodName","undefined","TypeError","info","resultName","next","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","iterable","iteratorMethod","isNaN","length","i","displayName","isGeneratorFunction","genFun","ctor","constructor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","iter","keys","val","object","reverse","pop","skipTempReset","prev","charAt","slice","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","_catch","thrown","delegateYield","_slicedToArray","arr","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","o","minLen","_arrayLikeToArray","n","toString","Array","from","test","len","arr2","_i","_s","_e","_x","_r","_arr","_n","_d","isArray","asyncGeneratorStep","gen","_next","_throw","_asyncToGenerator","args","arguments","apply","_require","require","authenticate","getHost","getIsOpen","getActivity","module","_getAvailability","_callee","_ref","clientId","clientSecret","accessKey","accessSecret","skillEndpoint","hoursEndpoint","maxQueueCount","authorisation","_yield$authenticate","tenantId","token","tokenType","host","_yield$Promise$all","_yield$Promise$all2","_yield$Promise$all2$","hasCapacity","hasAgentsAvailable","isOpen","isAvailable","isExistingOnly","availability","_callee$","_context","Buffer","concat","encodeURIComponent","all","date","Date","getAvailability","querystring","axios","jwtdecode","isWithinHours","contentType","_ref2","_jwtdecode","uri","config","body","auth","signal","AbortSignal","timeout","headers","Host","Authorization","stringify","grant_type","username","password","post","data","access_token","token_type","id_token","_ref4","_callee2","_ref3","api","_callee2$","_context2","get","area","_x2","_ref6","_callee3","_ref5","skill","activity","_callee3$","_context3","skillActivity","queueCount","agentsAvailable","_x3","_ref8","_callee4","_ref7","hours","days","_callee4$","_context4","resultSet","hoursOfOperationProfiles","_x4","now","toLocaleDateString","weekday","day","find","d","toLowerCase","split","open","openTime","close","closeTime","getTime","parse"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"server.js","mappings":"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","sources":["webpack://@defra/flood-webchat/./src/server/index.js","webpack://@defra/flood-webchat/./src/server/lib/client.js","webpack://@defra/flood-webchat/./src/server/lib/utils.js","webpack://@defra/flood-webchat/external commonjs \"axios\"","webpack://@defra/flood-webchat/external commonjs \"jwt-decode\"","webpack://@defra/flood-webchat/external commonjs \"luxon\"","webpack://@defra/flood-webchat/external commonjs \"querystring\"","webpack://@defra/flood-webchat/webpack/bootstrap","webpack://@defra/flood-webchat/webpack/before-startup","webpack://@defra/flood-webchat/webpack/startup","webpack://@defra/flood-webchat/webpack/after-startup"],"sourcesContent":["const { authenticate, getApiBaseUrl, getIsOpen, getActivity } = require('./lib/client.js')\n\n/**\n * Returns webchat availability\n * @param options {object}\n * @param options.clientId {string}\n * @param options.clientSecret {string}\n * @param options.accessKey {string}\n * @param options.accessSecret {string}\n * @param options.skillEndpoint {string}\n * @param options.hoursEndpoint {string}\n * @param options.authenticationUri {string}\n * @param options.wellKnownUri {string}\n * @param options.maxQueueCount {string}\n * @returns {Promise<{date: Date, availability: (string)}>}\n */\nmodule.exports = async function getAvailability ({\n clientId,\n clientSecret,\n accessKey,\n accessSecret,\n maxQueueCount,\n skillEndpoint,\n hoursEndpoint,\n wellKnownUri = 'https://cxone.niceincontact.com/.well-known/cxone-configuration',\n authenticationUri = 'https://cxone.niceincontact.com/auth/token'\n}) {\n const authorisation = 'Basic ' + Buffer.from(`${encodeURIComponent(clientId)}:${encodeURIComponent(clientSecret)}`).toString('base64')\n\n // Cache authentication and re-authenticate when needed (lasts 1 hour?)\n const { tenantId, token, tokenType } = await authenticate({\n authenticationUri,\n authorisation,\n accessKey,\n accessSecret\n })\n\n const apiBaseUrl = await getApiBaseUrl({ wellKnownUri, tenantId })\n\n const [{ hasCapacity, hasAgentsAvailable }, isOpen] = await Promise.all([\n getActivity({ baseUrl: apiBaseUrl, tokenType, token, skillEndpoint, maxQueueCount }),\n getIsOpen({ baseUrl: apiBaseUrl, token, tokenType, hoursEndpoint })\n ])\n\n const isAvailable = isOpen && hasAgentsAvailable && hasCapacity\n const isExistingOnly = isOpen && hasAgentsAvailable && !hasCapacity\n\n let availability = 'UNAVAILABLE'\n\n if (isAvailable) {\n availability = 'AVAILABLE'\n } else if (isExistingOnly) {\n availability = 'EXISTING'\n }\n\n return {\n date: new Date(),\n availability\n }\n}\n","const querystring = require('querystring')\nconst axios = require('axios')\nconst jwtdecode = require('jwt-decode')\nconst { isWithinHours } = require('./utils.js')\n\nconst contentType = 'application/x-www-form-urlencoded'\n\nconst authenticate = async ({ authenticationUri, authorisation, accessKey, accessSecret }) => {\n const url = new URL(authenticationUri)\n const body = querystring.stringify({\n grant_type: 'password',\n username: accessKey,\n password: accessSecret\n })\n\n const auth = await axios.post(url.href, body, {\n signal: AbortSignal.timeout(3000),\n headers: {\n Host: url.host,\n 'Content-Type': contentType,\n Authorization: authorisation\n }\n })\n\n return {\n token: auth.data.access_token,\n tokenType: auth.data.token_type,\n tenantId: jwtdecode(auth.data.id_token)?.tenantId\n }\n}\n\nconst getApiBaseUrl = async ({ wellKnownUri, tenantId }) => {\n const url = new URL(wellKnownUri)\n url.searchParams.set('tenantId', tenantId)\n\n const { data } = await axios.get(url.href, {\n headers: {\n Host: url.host\n },\n signal: AbortSignal.timeout(3000)\n })\n\n return data.api_endpoint\n}\n\nconst getActivity = async ({ tokenType, token, baseUrl, skillEndpoint, maxQueueCount }) => {\n const url = new URL(skillEndpoint, baseUrl)\n\n const skill = await axios.get(url.href, {\n signal: AbortSignal.timeout(3000),\n headers: {\n Host: url.host,\n Authorization: `${tokenType} ${token}`,\n 'Content-Type': contentType\n }\n })\n\n const activity = skill.data.skillActivity[0]\n\n return {\n hasCapacity: activity.queueCount < maxQueueCount,\n hasAgentsAvailable: activity.agentsAvailable >= 1\n }\n}\n\nconst getIsOpen = async ({ baseUrl, token, tokenType, hoursEndpoint }) => {\n const url = new URL(hoursEndpoint, baseUrl)\n\n const hours = await axios.get(url.href, {\n signal: AbortSignal.timeout(3000),\n headers: {\n Host: url.host,\n Authorization: `${tokenType} ${token}`,\n 'Content-Type': contentType\n }\n })\n\n const days = hours.data.resultSet.hoursOfOperationProfiles[0].days\n\n return isWithinHours(days)\n}\n\nmodule.exports = {\n authenticate,\n getApiBaseUrl,\n getIsOpen,\n getActivity\n}\n","const { DateTime } = require('luxon')\n\nconst getHour = time => Number(time.split(':')[0])\n\nconst isWithinHours = (days, date) => {\n const now = date ? DateTime.fromISO(date) : DateTime.local()\n now.setZone('Europe/London')\n\n const newDate = date ? new Date(date) : new Date()\n\n const today = newDate.toLocaleDateString('en-GB', { weekday: 'long' })\n const dateParts = newDate.toLocaleDateString('en-GB').split('/')\n\n const todaysAvailability = days.find(item => item.day === today)\n const todaysDateTimeOpen = DateTime.local(Number(dateParts[2]), Number(dateParts[1]), Number(dateParts[0]), getHour(todaysAvailability.openTime))\n const todaysDateTimeClose = DateTime.local(Number(dateParts[2]), Number(dateParts[1]), Number(dateParts[0]), getHour(todaysAvailability.closeTime))\n\n return now.diff(todaysDateTimeOpen).milliseconds >= 0 && now.diff(todaysDateTimeClose).milliseconds <= 0\n}\n\nmodule.exports = {\n isWithinHours\n}\n","module.exports = require(\"axios\");","module.exports = require(\"jwt-decode\");","module.exports = require(\"luxon\");","module.exports = require(\"querystring\");","// 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","","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(\"./src/server/index.js\");\n",""],"names":["authenticate","getApiBaseUrl","getIsOpen","getActivity","require","module","exports","getAvailability","clientId","clientSecret","accessKey","accessSecret","maxQueueCount","skillEndpoint","hoursEndpoint","wellKnownUri","authenticationUri","authorisation","Buffer","from","encodeURIComponent","toString","tenantId","token","tokenType","apiBaseUrl","hasCapacity","hasAgentsAvailable","isOpen","Promise","all","baseUrl","isAvailable","isExistingOnly","availability","date","Date","querystring","axios","jwtdecode","isWithinHours","contentType","url","URL","body","stringify","grant_type","username","password","auth","post","href","signal","AbortSignal","timeout","headers","Host","host","Authorization","data","access_token","token_type","id_token","searchParams","set","get","api_endpoint","skill","activity","skillActivity","queueCount","agentsAvailable","hours","days","resultSet","hoursOfOperationProfiles","DateTime","getHour","time","Number","split","now","fromISO","local","setZone","newDate","today","toLocaleDateString","weekday","dateParts","todaysAvailability","find","item","day","todaysDateTimeOpen","openTime","todaysDateTimeClose","closeTime","diff","milliseconds"],"sourceRoot":""}
|
package/main.scss
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
|
|
2
2
|
// Required GOVUK Styles
|
|
3
|
-
@import "
|
|
4
|
-
@import "
|
|
3
|
+
@import "govuk-frontend/govuk/core/typography";
|
|
4
|
+
@import "govuk-frontend/govuk/utilities/visually-hidden";
|
|
5
5
|
|
|
6
6
|
// Components
|
|
7
7
|
@import "./src/client/components/availability/availability";
|
|
8
|
-
|
|
8
|
+
@import "./src/client/components/panel/panel";
|
|
9
|
+
@import "./src/client/components/chat/chat";
|
|
9
10
|
|
|
10
11
|
.wc-scroll-padding {
|
|
11
12
|
scroll-padding-bottom: calc(2rem + 20px);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@defra/flood-webchat",
|
|
3
|
-
"version": "0.0.1-beta.
|
|
3
|
+
"version": "0.0.1-beta.21",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/server.js",
|
|
6
6
|
"browser": "dist/client.js",
|
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
"@babel/core": "^7.22.10",
|
|
31
31
|
"@babel/preset-env": "^7.22.10",
|
|
32
32
|
"@babel/preset-react": "^7.22.15",
|
|
33
|
+
"@testing-library/jest-dom": "^6.1.3",
|
|
33
34
|
"@testing-library/react": "^14.0.0",
|
|
34
35
|
"@testing-library/user-event": "^14.5.1",
|
|
35
36
|
"@types/jest": "^29.5.4",
|
|
@@ -58,10 +59,13 @@
|
|
|
58
59
|
"govuk-frontend": "^4.0.0"
|
|
59
60
|
},
|
|
60
61
|
"dependencies": {
|
|
62
|
+
"@nice-devone/nice-cxone-chat-web-sdk": "^1.3.0",
|
|
61
63
|
"axios": "^1.5.0",
|
|
62
64
|
"jwt-decode": "^3.1.2",
|
|
65
|
+
"luxon": "^3.4.3",
|
|
63
66
|
"querystring": "^0.2.1",
|
|
64
67
|
"react": "^18.2.0",
|
|
65
|
-
"react-dom": "^18.2.0"
|
|
68
|
+
"react-dom": "^18.2.0",
|
|
69
|
+
"uuid": "^9.0.1"
|
|
66
70
|
}
|
|
67
71
|
}
|
|
@@ -1,70 +1,90 @@
|
|
|
1
1
|
import React, { useEffect, useRef, useState } from 'react'
|
|
2
|
+
|
|
2
3
|
import { classnames } from '../../lib/classnames'
|
|
3
|
-
import {
|
|
4
|
+
import { Panel } from '../panel/panel.jsx'
|
|
5
|
+
import { useApp } from '../../store/useApp'
|
|
6
|
+
|
|
7
|
+
export function Availability () {
|
|
8
|
+
const { availability, messages, isChatOpen, setChatVisibility, unseenCount } = useApp()
|
|
4
9
|
|
|
5
|
-
|
|
6
|
-
const [isOpen, setOpen] = useWebchatOpenState()
|
|
7
|
-
const [isFixed, setFixed] = useState(false)
|
|
10
|
+
const [isFixed, setIsFixed] = useState(false)
|
|
8
11
|
const buttonRef = useRef()
|
|
12
|
+
|
|
9
13
|
const onClick = () => {
|
|
10
|
-
|
|
14
|
+
setChatVisibility(!isChatOpen)
|
|
11
15
|
}
|
|
16
|
+
|
|
12
17
|
const onKeyDown = event => {
|
|
13
18
|
if (event.key === ' ') {
|
|
14
19
|
event.preventDefault()
|
|
15
20
|
}
|
|
16
21
|
}
|
|
22
|
+
|
|
17
23
|
const onKeyUp = event => {
|
|
18
24
|
if (event.key === ' ') {
|
|
19
|
-
|
|
25
|
+
setChatVisibility(!isChatOpen)
|
|
20
26
|
}
|
|
21
27
|
}
|
|
22
28
|
|
|
23
29
|
const intersectionCallback = entries => {
|
|
24
30
|
const [entry] = entries
|
|
25
31
|
const isBelowFold = !entry.isIntersecting && entry.boundingClientRect.top > 0
|
|
26
|
-
|
|
32
|
+
setIsFixed(!isChatOpen && isBelowFold)
|
|
27
33
|
}
|
|
28
34
|
|
|
29
35
|
useEffect(() => {
|
|
30
36
|
const observer = new window.IntersectionObserver(intersectionCallback, {
|
|
31
37
|
rootMargin: '35px'
|
|
32
38
|
})
|
|
39
|
+
|
|
33
40
|
const parentElement = buttonRef.current?.parentElement
|
|
41
|
+
|
|
34
42
|
if (parentElement) {
|
|
35
43
|
observer.observe(parentElement)
|
|
36
44
|
}
|
|
45
|
+
|
|
37
46
|
return () => {
|
|
38
47
|
if (parentElement) {
|
|
39
48
|
observer.unobserve(parentElement)
|
|
40
49
|
}
|
|
41
50
|
}
|
|
42
|
-
}, [buttonRef,
|
|
51
|
+
}, [buttonRef, isChatOpen])
|
|
43
52
|
|
|
44
53
|
useEffect(() => {
|
|
45
54
|
document.documentElement.classList.toggle('wc-scroll-padding', isFixed)
|
|
46
55
|
document.body.classList.toggle('wc-scroll-padding', isFixed)
|
|
47
56
|
}, [isFixed])
|
|
48
57
|
|
|
49
|
-
|
|
58
|
+
let TextComponent = (<>Show Chat</>)
|
|
59
|
+
|
|
60
|
+
if (!messages.length) {
|
|
61
|
+
TextComponent = (<>Start Chat</>)
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
switch (availability) {
|
|
50
65
|
case 'AVAILABLE':
|
|
51
66
|
return (
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
<
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
67
|
+
<>
|
|
68
|
+
<div
|
|
69
|
+
className={classnames('wc-availability', isFixed && 'wc-availability--fixed', isChatOpen && 'wc-open')}
|
|
70
|
+
ref={buttonRef}
|
|
71
|
+
>
|
|
72
|
+
<div className='wc-availability__inner'>
|
|
73
|
+
<a
|
|
74
|
+
className='wc-availability__link'
|
|
75
|
+
href='#webchat'
|
|
76
|
+
draggable='false'
|
|
77
|
+
onClick={onClick}
|
|
78
|
+
onKeyUp={onKeyUp}
|
|
79
|
+
onKeyDown={onKeyDown}
|
|
80
|
+
>
|
|
81
|
+
{TextComponent}
|
|
82
|
+
{unseenCount > 0 && !isChatOpen ? <span className='wc-open-btn__unseen'>{unseenCount}</span> : null}
|
|
83
|
+
</a>
|
|
84
|
+
</div>
|
|
66
85
|
</div>
|
|
67
|
-
|
|
86
|
+
{isChatOpen && <Panel />}
|
|
87
|
+
</>
|
|
68
88
|
)
|
|
69
89
|
case 'EXISTING':
|
|
70
90
|
case 'UNAVAILABLE':
|
|
@@ -77,25 +97,3 @@ export function Availability (props) {
|
|
|
77
97
|
)
|
|
78
98
|
}
|
|
79
99
|
}
|
|
80
|
-
|
|
81
|
-
function AvailabilityContent () {
|
|
82
|
-
const [thread] = useMessageThread()
|
|
83
|
-
const unreadMessageCount = thread.filter(message => !message.read).length
|
|
84
|
-
if (!thread.length) {
|
|
85
|
-
return (
|
|
86
|
-
<>
|
|
87
|
-
Start Chat
|
|
88
|
-
</>
|
|
89
|
-
)
|
|
90
|
-
}
|
|
91
|
-
return (
|
|
92
|
-
<>
|
|
93
|
-
Show Chat {!!unreadMessageCount && (
|
|
94
|
-
<>
|
|
95
|
-
<span className='wc-availability__unseen'>{unreadMessageCount}</span>
|
|
96
|
-
<span className='govuk-visually-hidden'> {unreadMessageCount === 1 ? 'new message' : 'new messages'}</span>
|
|
97
|
-
</>
|
|
98
|
-
)}
|
|
99
|
-
</>
|
|
100
|
-
)
|
|
101
|
-
}
|
|
@@ -34,10 +34,6 @@
|
|
|
34
34
|
margin-bottom: 0;
|
|
35
35
|
fill: govuk-colour('black');
|
|
36
36
|
|
|
37
|
-
@include mq ($from: tablet) {
|
|
38
|
-
margin-right: 10px;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
37
|
.govuk-visually-hidden, .wc-availability__unseen {
|
|
42
38
|
pointer-events: none;
|
|
43
39
|
}
|
|
@@ -86,4 +82,108 @@
|
|
|
86
82
|
padding-left: 7px;
|
|
87
83
|
padding-right: 7px;
|
|
88
84
|
}
|
|
89
|
-
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// Define a mixin for the common styles
|
|
88
|
+
@mixin link-icon-styles {
|
|
89
|
+
position: relative;
|
|
90
|
+
display: inline-block;
|
|
91
|
+
margin-right: 5px;
|
|
92
|
+
fill: govuk-colour('black');
|
|
93
|
+
@include govuk-font($size: 19);
|
|
94
|
+
|
|
95
|
+
&:last-of-type {
|
|
96
|
+
margin-right: 0;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
@include mq ($from: tablet) {
|
|
100
|
+
margin-right: 10px;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
&__icon {
|
|
104
|
+
color: govuk-colour('black');
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
svg {
|
|
108
|
+
position: relative;
|
|
109
|
+
display: inline-block;
|
|
110
|
+
color: currentcolor;
|
|
111
|
+
vertical-align: top;
|
|
112
|
+
margin-right: 7px;
|
|
113
|
+
top: 1px;
|
|
114
|
+
|
|
115
|
+
@include mq ($from: tablet) {
|
|
116
|
+
margin-right: 8px;
|
|
117
|
+
top: 4px;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
&:hover {
|
|
122
|
+
color: $govuk-link-hover-colour;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
&:active {
|
|
126
|
+
color: govuk-colour('black');
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
.defra-link-icon {
|
|
131
|
+
@include link-icon-styles;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
.wc-open-btn {
|
|
135
|
+
@include link-icon-styles;
|
|
136
|
+
margin-bottom: 0;
|
|
137
|
+
|
|
138
|
+
&:visited {
|
|
139
|
+
color: $govuk-link-colour;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
span {
|
|
143
|
+
pointer-events: none;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
svg {
|
|
147
|
+
@include mq ($from: 'tablet') {
|
|
148
|
+
top: 3px;
|
|
149
|
+
}
|
|
150
|
+
color: govuk-colour('black');
|
|
151
|
+
pointer-events: none;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
&:focus {
|
|
155
|
+
box-shadow: none;
|
|
156
|
+
background-color: transparent;
|
|
157
|
+
text-decoration: underline;
|
|
158
|
+
color: $govuk-focus-colour;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
&:hover:not(:focus):not(:active) {
|
|
162
|
+
color: $govuk-link-hover-colour;
|
|
163
|
+
|
|
164
|
+
svg {
|
|
165
|
+
color: govuk-colour('dark-blue');
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
.wc-open-btn__unseen {
|
|
169
|
+
background-color: govuk-colour('dark-blue');
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
&__unseen {
|
|
174
|
+
display: inline-block;
|
|
175
|
+
position: relative;
|
|
176
|
+
border-radius: 10px;
|
|
177
|
+
background-color: govuk-colour('black');
|
|
178
|
+
color: #ffffff;
|
|
179
|
+
font-weight: bold;
|
|
180
|
+
font-size: 14px;
|
|
181
|
+
padding: 0 6px;
|
|
182
|
+
margin-left: 5px;
|
|
183
|
+
@include mq ($from: tablet) {
|
|
184
|
+
top: -1px;
|
|
185
|
+
padding-left: 7px;
|
|
186
|
+
padding-right: 7px;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import React, { useEffect, useRef, useState } from 'react'
|
|
2
|
+
|
|
3
|
+
import { PanelHeader } from '../panel/panel-header.jsx'
|
|
4
|
+
import { PanelFooter } from '../panel/panel-footer.jsx'
|
|
5
|
+
import { Message } from '../message/message.jsx'
|
|
6
|
+
|
|
7
|
+
import { useApp } from '../../store/useApp.js'
|
|
8
|
+
import { useTextareaAutosize } from '../../hooks/useTextareaAutosize.js'
|
|
9
|
+
import { formatTranscript } from '../../lib/transform-messages.js'
|
|
10
|
+
|
|
11
|
+
export function Chat ({ onEndChatScreen, onSettingsScreen }) {
|
|
12
|
+
const { availability, thread, messages, agent, agentStatus, isAgentTyping, settings } = useApp()
|
|
13
|
+
|
|
14
|
+
const [userMessage, setUserMessage] = useState('')
|
|
15
|
+
|
|
16
|
+
const messageRef = useRef()
|
|
17
|
+
|
|
18
|
+
useTextareaAutosize(messageRef.current, userMessage)
|
|
19
|
+
|
|
20
|
+
useEffect(() => {
|
|
21
|
+
if (settings.scroll && messages.length !== 0) {
|
|
22
|
+
const chatBody = document.querySelector('.wc-body')
|
|
23
|
+
chatBody.scrollTop = chatBody.scrollHeight
|
|
24
|
+
}
|
|
25
|
+
}, [messages, isAgentTyping])
|
|
26
|
+
|
|
27
|
+
useEffect(() => {
|
|
28
|
+
const label = document.querySelector('.wc-form__label')
|
|
29
|
+
|
|
30
|
+
if (userMessage.length === 0) {
|
|
31
|
+
label.classList.remove('govuk-visually-hidden')
|
|
32
|
+
} else {
|
|
33
|
+
label.classList.add('govuk-visually-hidden')
|
|
34
|
+
}
|
|
35
|
+
}, [userMessage])
|
|
36
|
+
|
|
37
|
+
const onChange = e => {
|
|
38
|
+
setUserMessage(e.target?.value)
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const agentName = agent?.nickname || agent?.firstName
|
|
42
|
+
|
|
43
|
+
let connectionHeadlineText = 'Connecting to Floodline'
|
|
44
|
+
|
|
45
|
+
if (agentStatus === 'closed') {
|
|
46
|
+
connectionHeadlineText = agentName ? `${agentName} ended the session` : 'Session ended by advisor'
|
|
47
|
+
} else if (agentStatus) {
|
|
48
|
+
if (agentName) {
|
|
49
|
+
connectionHeadlineText = `You are speaking with ${agentName}`
|
|
50
|
+
} else {
|
|
51
|
+
connectionHeadlineText = 'No advisers currently available'
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
if (availability === 'UNAVAILABLE') {
|
|
56
|
+
connectionHeadlineText = 'Webchat is not currently available'
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const sendMessage = e => {
|
|
60
|
+
e.preventDefault()
|
|
61
|
+
|
|
62
|
+
if (messageRef.current.value.length === 0) {
|
|
63
|
+
return
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
try {
|
|
67
|
+
thread.sendTextMessage(messageRef.current.value.trim())
|
|
68
|
+
} catch (err) {
|
|
69
|
+
console.log('[Chat Error] sendMessage', err)
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
setUserMessage('')
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const saveChat = () => {
|
|
76
|
+
const transcript = formatTranscript(messages)
|
|
77
|
+
|
|
78
|
+
const saveChatLink = document.querySelector('#transcript-download')
|
|
79
|
+
|
|
80
|
+
saveChatLink.setAttribute('href', `data:text/plain;charset=utf-8,${transcript}`)
|
|
81
|
+
saveChatLink.click()
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
return (
|
|
85
|
+
<>
|
|
86
|
+
<PanelHeader />
|
|
87
|
+
|
|
88
|
+
<div className='wc-status'>
|
|
89
|
+
<p className='wc-status__availability govuk-body-s'>{connectionHeadlineText}</p>
|
|
90
|
+
<a className='wc-status__link govuk-!-font-size-16' href='#' data-module='govuk-button' onClick={onEndChatScreen}>End chat</a>
|
|
91
|
+
</div>
|
|
92
|
+
|
|
93
|
+
<div className='wc-body'>
|
|
94
|
+
<div className='wc-chat__body'>
|
|
95
|
+
<ul className='wc-chat__messages'>
|
|
96
|
+
{messages.length
|
|
97
|
+
? messages.map((msg, index) => <Message key={msg.id} message={msg} previousMessage={messages[index - 1]} />)
|
|
98
|
+
: null}
|
|
99
|
+
{isAgentTyping
|
|
100
|
+
? (
|
|
101
|
+
<li className='wc-chat__message govuk-body outbound'>
|
|
102
|
+
<div className='wc-chat__from govuk-!-font-size-14'>{agentName} is typing</div>
|
|
103
|
+
<div className='wc-chat__text outbound'>
|
|
104
|
+
<svg width='28' height='16' x='0px' y='0px' viewBox='0 0 28 16'>
|
|
105
|
+
<circle stroke='none' cx='3' cy='8' r='3' fill='currentColor' />
|
|
106
|
+
<circle stroke='none' cx='14' cy='8' r='3' fill='currentColor' />
|
|
107
|
+
<circle stroke='none' cx='25' cy='8' r='3' fill='currentColor' />
|
|
108
|
+
</svg>
|
|
109
|
+
</div>
|
|
110
|
+
</li>
|
|
111
|
+
)
|
|
112
|
+
: null}
|
|
113
|
+
</ul>
|
|
114
|
+
</div>
|
|
115
|
+
</div>
|
|
116
|
+
|
|
117
|
+
<PanelFooter>
|
|
118
|
+
<div className='wc-footer__input'>
|
|
119
|
+
<form className='wc-form' noValidate>
|
|
120
|
+
<label className='govuk-label wc-form__label govuk-!-font-size-16' htmlFor='wc-form-textarea'>
|
|
121
|
+
Your message<span className='govuk-visually-hidden'> (enter key submits)</span>
|
|
122
|
+
</label>
|
|
123
|
+
|
|
124
|
+
<textarea
|
|
125
|
+
ref={messageRef}
|
|
126
|
+
rows='1'
|
|
127
|
+
aria-required='true'
|
|
128
|
+
className='wc-form__textarea govuk-textarea govuk-!-font-size-16'
|
|
129
|
+
id='wc-form-textarea'
|
|
130
|
+
name='message'
|
|
131
|
+
onChange={onChange}
|
|
132
|
+
value={userMessage}
|
|
133
|
+
/>
|
|
134
|
+
|
|
135
|
+
<input
|
|
136
|
+
type='submit'
|
|
137
|
+
className='wc-form__button govuk-button govuk-!-font-size-16'
|
|
138
|
+
value='Send'
|
|
139
|
+
data-prevent-double-click='true'
|
|
140
|
+
onClick={sendMessage}
|
|
141
|
+
/>
|
|
142
|
+
</form>
|
|
143
|
+
</div>
|
|
144
|
+
|
|
145
|
+
<div className='wc-footer__settings'>
|
|
146
|
+
<a
|
|
147
|
+
href='#'
|
|
148
|
+
id='wc-settings'
|
|
149
|
+
className='wc-footer__settings-link'
|
|
150
|
+
data-module='govuk-button'
|
|
151
|
+
onClick={onSettingsScreen}
|
|
152
|
+
>
|
|
153
|
+
Settings
|
|
154
|
+
</a>
|
|
155
|
+
<a
|
|
156
|
+
href='#'
|
|
157
|
+
id='transcript-download'
|
|
158
|
+
className='wc-footer__settings-link'
|
|
159
|
+
data-module='govuk-button'
|
|
160
|
+
download='floodline-webchat-transcript.txt'
|
|
161
|
+
onClick={saveChat}
|
|
162
|
+
>
|
|
163
|
+
Save chat
|
|
164
|
+
</a>
|
|
165
|
+
</div>
|
|
166
|
+
</PanelFooter>
|
|
167
|
+
</>
|
|
168
|
+
)
|
|
169
|
+
}
|