diff --git a/.github/history.json b/.github/history.json index 0432606b99e0034cfb4792889c755e9668e60747..1ed2f1a3061c56285592e8077784a11f053bba30 100644 --- a/.github/history.json +++ b/.github/history.json @@ -93753,6 +93753,28 @@ ] } ] + }, + "5.1.4": { + "node_version": "14.19.3", + "npm_version": "6.14.17", + "mongo_versions": [ + "4.2", + "4.4", + "5.0" + ], + "pull_requests": [ + { + "pr": "26909", + "title": "[FIX] Adjusted livechat fallbacks to take null values into account", + "userLogin": "aleksandernsilva", + "milestone": "5.1.4", + "contributors": [ + "aleksandernsilva", + "tassoevan", + "web-flow" + ] + } + ] } } -} +} \ No newline at end of file diff --git a/HISTORY.md b/HISTORY.md index c1ab84f74dddb0625d71fb03006661c8a93c311a..9db7d9b7833daf78540eb3c536dbb602a7fb49db 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,6 +1,24 @@ +# 5.1.4 +`2022-09-27 · 1 🛠· 2 👩â€ðŸ’»ðŸ‘¨â€ðŸ’»` + +### Engine versions +- Node: `14.19.3` +- NPM: `6.14.17` +- MongoDB: `4.2, 4.4, 5.0` + +### 🛠Bug fixes + + +- Adjusted livechat fallbacks to take null values into account ([#26909](https://github.com/RocketChat/Rocket.Chat/pull/26909)) + +### 👩â€ðŸ’»ðŸ‘¨â€ðŸ’» Core Team 🤓 + +- [@aleksandernsilva](https://github.com/aleksandernsilva) +- [@tassoevan](https://github.com/tassoevan) + # 5.1.3 -`2022-09-23 · 4 🛠· 4 👩â€ðŸ’»ðŸ‘¨â€ðŸ’»` +`2022-09-24 · 4 🛠· 4 👩â€ðŸ’»ðŸ‘¨â€ðŸ’»` ### Engine versions - Node: `14.19.3` diff --git a/apps/meteor/.docker/Dockerfile.rhel b/apps/meteor/.docker/Dockerfile.rhel index 88c66e1f6ef61008b09550b6cc1f0bba0dadce5d..11e648aa32eb59e6bacf932947741f8d8a683f7a 100644 --- a/apps/meteor/.docker/Dockerfile.rhel +++ b/apps/meteor/.docker/Dockerfile.rhel @@ -1,6 +1,6 @@ FROM registry.access.redhat.com/ubi8/nodejs-12 -ENV RC_VERSION 5.1.3 +ENV RC_VERSION 5.1.4 MAINTAINER buildmaster@rocket.chat diff --git a/apps/meteor/app/utils/rocketchat.info b/apps/meteor/app/utils/rocketchat.info index 105f5415bd38714def095f4d42f23ba844f7b98e..5335235fb70744ac4d42e93b1c6a64b731bf97e9 100644 --- a/apps/meteor/app/utils/rocketchat.info +++ b/apps/meteor/app/utils/rocketchat.info @@ -1,3 +1,3 @@ { - "version": "5.1.3" + "version": "5.1.4" } diff --git a/apps/meteor/package.json b/apps/meteor/package.json index 64260b1370eeaf03c19fd5cfce028241079f8139..0b5e4bcc15a3d91cca16ca971d2dedcf17d8d560 100644 --- a/apps/meteor/package.json +++ b/apps/meteor/package.json @@ -1,7 +1,7 @@ { "name": "@rocket.chat/meteor", "description": "The Ultimate Open Source WebChat Platform", - "version": "5.1.3", + "version": "5.1.4", "private": true, "author": { "name": "Rocket.Chat", diff --git a/package.json b/package.json index 6444b32d065d06b64d6cc1f8556edbb2f2474f62..5587b79c49dc07c816f90a4cb486fba2e0df81be 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rocket.chat", - "version": "5.1.3", + "version": "5.1.4", "description": "Rocket.Chat Monorepo", "main": "index.js", "private": true, diff --git a/packages/livechat/src/components/App/App.js b/packages/livechat/src/components/App/App.js index 957f882d13419816d27be620d8362ebd77ef80e3..f79cd2ad565bf87840bf0a8278a9cec7f47a0f07 100644 --- a/packages/livechat/src/components/App/App.js +++ b/packages/livechat/src/components/App/App.js @@ -202,17 +202,13 @@ export class App extends Component { } } - render = ({ - sound, - undocked, - minimized, - expanded, - alerts, - modal, - }, { initialized, poppedOut }) => { + render = ({ sound, undocked, minimized, expanded, alerts, modal, iframe }, { initialized, poppedOut }) => { if (!initialized) { return null; } + + const { department, name, email } = iframe.guest || {}; + const screenProps = { notificationsEnabled: sound && sound.enabled, minimized: !poppedOut && (minimized || undocked), @@ -221,6 +217,9 @@ export class App extends Component { sound, alerts, modal, + nameDefault: name, + emailDefault: email, + departmentDefault: department, onEnableNotifications: this.handleEnableNotifications, onDisableNotifications: this.handleDisableNotifications, onMinimize: this.handleMinimize, diff --git a/packages/livechat/src/lib/hooks.js b/packages/livechat/src/lib/hooks.js index 584a29f27fc3e5209e3eaef7f69879011d243d6b..d7de66bed4bae2bb914e5a017a561e46c448c9ff 100644 --- a/packages/livechat/src/lib/hooks.js +++ b/packages/livechat/src/lib/hooks.js @@ -34,8 +34,14 @@ const api = { Triggers.processRequest(info); } - const { token, room: { _id: rid } = {} } = store.state; - const { change, title, location: { href } } = info; + const { token, room } = store.state; + const { _id: rid } = room || {}; + + const { + change, + title, + location: { href }, + } = info; Livechat.sendVisitorNavigation({ token, rid, pageInfo: { change, title, location: { href } } }); }, @@ -62,12 +68,22 @@ const api = { }, async setDepartment(value) { - const { config: { departments = [] }, user: { department: existingDepartment } = {} } = store.state; + const { + user, + config: { departments = [] }, + defaultAgent, + } = store.state; + + const { department: existingDepartment } = user || {}; const department = departments.find((dep) => dep._id === value || dep.name === value)?._id || ''; updateIframeGuestData({ department }); + if (defaultAgent && defaultAgent.department !== department) { + store.setState({ defaultAgent: null }); + } + if (department !== existingDepartment) { await loadConfig(); await loadMessages(); diff --git a/packages/livechat/src/lib/room.js b/packages/livechat/src/lib/room.js index a15256ca4f42324e09c3f96e6e52759f4fba67ae..74c48070a3eb22f8a73be7b04b91e56097c7a326 100644 --- a/packages/livechat/src/lib/room.js +++ b/packages/livechat/src/lib/room.js @@ -297,7 +297,8 @@ export const loadMessages = async () => { }; export const loadMoreMessages = async () => { - const { room: { _id: rid } = {}, messages = [], noMoreMessages = false } = store.state; + const { room, messages = [], noMoreMessages = false } = store.state; + const { _id: rid } = room || {}; if (!rid || noMoreMessages) { return; diff --git a/packages/livechat/src/lib/triggers.js b/packages/livechat/src/lib/triggers.js index 98c1bf9e65ab2752fcfce32a1e64b31219b09387..b29320824b238706977610bb4066b4b29c78bde1 100644 --- a/packages/livechat/src/lib/triggers.js +++ b/packages/livechat/src/lib/triggers.js @@ -33,7 +33,7 @@ const getAgent = (triggerAction) => { return reject(error); } - store.setState({ defaultAgent: { ...agent, ts: Date.now() } }); + store.setState({ defaultAgent: { ...agent, department, ts: Date.now() } }); resolve(agent); } else if (params.sender === 'custom') { resolve({ diff --git a/packages/livechat/src/routes/Chat/container.js b/packages/livechat/src/routes/Chat/container.js index c13c95d9d0fc7d803dd5dab4c8627f096e14343b..e4984599af5d8265fb02403e49b53bff6d3d5c99 100644 --- a/packages/livechat/src/routes/Chat/container.js +++ b/packages/livechat/src/routes/Chat/container.js @@ -184,7 +184,8 @@ class ChatContainer extends Component { return; } - const { alerts, dispatch, room: { _id: rid } = {} } = this.props; + const { alerts, dispatch, room } = this.props; + const { _id: rid } = room || {}; await dispatch({ loading: true }); try { diff --git a/packages/livechat/src/routes/Register/component.js b/packages/livechat/src/routes/Register/component.js index 941809b049bacfa038fe6b4af40ad3c7523a47c7..383aefb241acbe8f26b26a582f495303ef2b069b 100644 --- a/packages/livechat/src/routes/Register/component.js +++ b/packages/livechat/src/routes/Register/component.js @@ -137,34 +137,26 @@ class Register extends Component { } static getDerivedStateFromProps(nextProps, state) { - const { hasNameField, hasEmailField, hasDepartmentField, departmentDefault, departments, nameDefault, emailDefault } = nextProps; + const { hasNameField, hasEmailField, hasDepartmentField, nameDefault, emailDefault, departmentDefault } = nextProps; + const { name, email, department } = state; + const newState = {}; - const nameValue = nameDefault || ''; - if (hasNameField && (!state.name || state.name !== nameValue)) { - state = { ...state, name: { ...state.name, value: nameValue } }; - } else if (!hasNameField) { - state = { ...state, name: null }; + if (hasNameField && nameDefault && nameDefault !== name?.value) { + const error = validate(this.props, { name: 'name', value: nameDefault, regexp: name?.regexp }); + newState.name = { ...name, value: nameDefault, error }; } - const emailValue = emailDefault || ''; - if (hasEmailField && (!state.email || state.name !== emailValue)) { - state = { ...state, email: { ...state.email, value: emailValue } }; - } else if (!hasEmailField) { - state = { ...state, email: null }; + if (hasEmailField && emailDefault && emailDefault !== email?.value) { + const error = validate(this.props, { name: 'email', value: emailDefault, regexp: email?.regexp }); + newState.email = { ...email, value: emailDefault, error }; } - const departmentValue = departmentDefault || getDefaultDepartment(departments); - const showDepartmentField = hasDepartmentField && departments && departments.length > 1; - if (showDepartmentField && (!state.department || state.department !== departmentValue)) { - state = { ...state, department: { ...state.department, value: departmentValue } }; - } else if (!showDepartmentField) { - state = { ...state, department: null }; + if (hasDepartmentField && departmentDefault && departmentDefault !== department?.value) { + const error = validate(this.props, { name: 'department', value: departmentDefault, regexp: department?.regexp }); + newState.department = { ...department, value: departmentDefault, error }; } - for (const { fieldName: name, value, regexp } of getValidableFields(state)) { - const error = validate(nextProps, { name, value, regexp }); - state = { ...state, [name]: { ...state[name], value, error, showError: false } }; - } + return newState; } state = {