From 8be9ee2ce3b7559dc018bce4557d7e2fa9fe413e Mon Sep 17 00:00:00 2001
From: Renato Becker
Date: Mon, 28 May 2018 13:49:57 -0300
Subject: [PATCH 01/12] Initial implementation of new Livechat iFrame API's.
---
package-lock.json | 9 ++--
.../.app/client/lib/hooks.js | 18 +++++++-
.../.app/imports/client/visitor.js | 42 ++++++++++++++++++-
.../assets/rocket-livechat.js | 20 +++++++++
.../server/methods/loginByToken.js | 14 ++++++-
5 files changed, 95 insertions(+), 8 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index 2a971ee02b58..4e58eae320cb 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
{
"name": "Rocket.Chat",
- "version": "0.64.0-develop",
+ "version": "0.65.0-develop",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@@ -4683,6 +4683,7 @@
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
"integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
+ "optional": true,
"requires": {
"prr": "1.0.1"
}
@@ -10591,7 +10592,8 @@
"natives": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/natives/-/natives-1.1.3.tgz",
- "integrity": "sha512-BZGSYV4YOLxzoTK73l0/s/0sH9l8SHs2ocReMH1f8JYSh5FUWu4ZrKCpJdRkWXV6HFR/pZDz7bwWOVAY07q77g=="
+ "integrity": "sha512-BZGSYV4YOLxzoTK73l0/s/0sH9l8SHs2ocReMH1f8JYSh5FUWu4ZrKCpJdRkWXV6HFR/pZDz7bwWOVAY07q77g==",
+ "optional": true
},
"natural-compare": {
"version": "1.4.0",
@@ -12342,7 +12344,8 @@
"prr": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
- "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY="
+ "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
+ "optional": true
},
"pseudomap": {
"version": "1.0.2",
diff --git a/packages/rocketchat-livechat/.app/client/lib/hooks.js b/packages/rocketchat-livechat/.app/client/lib/hooks.js
index 3a525c34cf5d..fe5409d39ca2 100644
--- a/packages/rocketchat-livechat/.app/client/lib/hooks.js
+++ b/packages/rocketchat-livechat/.app/client/lib/hooks.js
@@ -37,7 +37,23 @@ const api = {
widgetClosed() {
Livechat.setWidgetClosed();
- }
+ },
+
+ setGuestToken(token) {
+ visitor.setToken(token);
+ },
+
+ setGuestName(name) {
+
+ },
+
+ setGuestEmail(email) {
+
+ },
+
+ registerGuest(guest) {
+ //aplicar visitor.setId e visitor.setData apos o register
+ }
};
window.addEventListener('message', function(msg) {
diff --git a/packages/rocketchat-livechat/.app/imports/client/visitor.js b/packages/rocketchat-livechat/.app/imports/client/visitor.js
index bb0613cb92e0..782aaa7a0edb 100644
--- a/packages/rocketchat-livechat/.app/imports/client/visitor.js
+++ b/packages/rocketchat-livechat/.app/imports/client/visitor.js
@@ -1,4 +1,4 @@
-/* globals Commands */
+/* globals Commands, Livechat */
const msgStream = new Meteor.Streamer('room-messages');
export default {
@@ -18,6 +18,16 @@ export default {
this.token.set(localStorage.getItem('visitorToken'));
},
+ reset() {
+ this.id.set(null);
+ this.token.set(null);
+ this.room.set(null);
+ this.data.set(null);
+ this.roomToSubscribe.set(null);
+ this.roomSubscribed = null;
+ this.connected = false;
+ },
+
getId() {
return this.id.get();
},
@@ -38,6 +48,34 @@ export default {
return this.token.get();
},
+ setToken(token) {
+ if ((!token) || (token == this.token.get())) {
+ return;
+ }
+
+ this.reset();
+ Livechat.room = null;
+
+ localStorage.setItem('visitorToken', token);
+ this.token.set(token);
+
+ Meteor.call('livechat:loginByToken', token, (err, result) => {
+ console.log(result);
+
+ if (!result) {
+ return;
+ }
+
+ if (result._id) {
+ this.setId(result._id);
+ }
+
+ if (result.roomId) {
+ Livechat.room = roomId;
+ }
+ });
+ },
+
setRoom(rid) {
this.room.set(rid);
},
@@ -62,7 +100,7 @@ export default {
}
this.roomSubscribed = roomId;
-
+ console.log(roomId);
msgStream.on(roomId, { token: this.getToken() }, (msg) => {
if (msg.t === 'command') {
Commands[msg.msg] && Commands[msg.msg]();
diff --git a/packages/rocketchat-livechat/assets/rocket-livechat.js b/packages/rocketchat-livechat/assets/rocket-livechat.js
index d81d0ae304c6..bc2f47234143 100644
--- a/packages/rocketchat-livechat/assets/rocket-livechat.js
+++ b/packages/rocketchat-livechat/assets/rocket-livechat.js
@@ -624,6 +624,22 @@
callHook('clearDepartment');
};
+ var setGuestToken = function(token) {
+ callHook('setGuestToken', token);
+ };
+
+ var setGuestName = function(name) {
+ callHook('setGuestName', name);
+ };
+
+ var setGuestEmail = function(email) {
+ callHook('setGuestEmail', email);
+ };
+
+ var registerGuest = function(guest) {
+ callHook('registerGuest', guest);
+ };
+
var currentPage = {
href: null,
title: null
@@ -722,6 +738,10 @@
setTheme: setTheme,
setDepartment: setDepartment,
clearDepartment: clearDepartment,
+ setGuestToken: setGuestToken,
+ setGuestName: setGuestName,
+ setGuestEmail: setGuestEmail,
+ registerGuest: registerGuest,
// callbacks
onChatMaximized: function(fn) { registerCallback('chat-maximized', fn); },
diff --git a/packages/rocketchat-livechat/server/methods/loginByToken.js b/packages/rocketchat-livechat/server/methods/loginByToken.js
index 577bceb6c9f7..61418330f6ad 100644
--- a/packages/rocketchat-livechat/server/methods/loginByToken.js
+++ b/packages/rocketchat-livechat/server/methods/loginByToken.js
@@ -2,14 +2,24 @@ import LivechatVisitors from '../models/LivechatVisitors';
Meteor.methods({
'livechat:loginByToken'(token) {
- const user = LivechatVisitors.getVisitorByToken(token, { fields: { _id: 1 } });
+ const visitor = LivechatVisitors.getVisitorByToken(token, { fields: { _id: 1 } });
if (!user) {
return;
}
+ let roomId;
+ if (visitor) {
+ const rooms = RocketChat.models.Rooms.findOpenByVisitorToken(visitor.token).fetch();
+
+ if (rooms && rooms.length > 0) {
+ roomId = rooms[0]._id;
+ }
+ }
+
return {
- _id: user._id
+ _id: user._id,
+ roomId
};
}
});
From 46a3c811ea1ffd8e93cba0076aa38ce0a5c8e1ae Mon Sep 17 00:00:00 2001
From: Renato Becker
Date: Mon, 28 May 2018 20:31:10 -0300
Subject: [PATCH 02/12] New Livechat iFrame API's added.
---
.../.app/client/lib/_livechat.js | 15 ++
.../.app/client/lib/chatMessages.js | 8 ++
.../.app/client/lib/hooks.js | 15 +-
.../.app/client/views/livechatWindow.js | 134 ++++++++++--------
.../.app/client/views/messages.js | 8 +-
.../.app/client/views/register.js | 4 +-
.../.app/imports/client/visitor.js | 54 +++++--
.../assets/rocket-livechat.js | 8 +-
.../server/methods/loginByToken.js | 14 +-
9 files changed, 164 insertions(+), 96 deletions(-)
diff --git a/packages/rocketchat-livechat/.app/client/lib/_livechat.js b/packages/rocketchat-livechat/.app/client/lib/_livechat.js
index 541af4c2a826..13aae330ea16 100644
--- a/packages/rocketchat-livechat/.app/client/lib/_livechat.js
+++ b/packages/rocketchat-livechat/.app/client/lib/_livechat.js
@@ -34,6 +34,9 @@ this.Livechat = new (class Livechat {
this.stream = new Meteor.Streamer('livechat-room');
+ this._guestName = new ReactiveVar();
+ this._guestEmail = new ReactiveVar();
+
Tracker.autorun(() => {
if (this._room.get() && visitor.getId()) {
RoomHistoryManager.getMoreIfIsEmpty(this._room.get());
@@ -121,6 +124,12 @@ this.Livechat = new (class Livechat {
get agent() {
return this._agent.get();
}
+ get guestName() {
+ return this._guestName.get();
+ }
+ get guestEmail() {
+ return this._guestEmail.get();
+ }
set online(value) {
this._online.set(value);
@@ -198,6 +207,12 @@ this.Livechat = new (class Livechat {
set agent(agentData) {
this._agent.set(agentData);
}
+ set guestName(name) {
+ return this._guestName.set(name);
+ }
+ set guestEmail(email) {
+ return this._guestEmail.set(email);
+ }
ready() {
this._ready.set(true);
diff --git a/packages/rocketchat-livechat/.app/client/lib/chatMessages.js b/packages/rocketchat-livechat/.app/client/lib/chatMessages.js
index d2619ac69c62..f08bbdc01c5e 100644
--- a/packages/rocketchat-livechat/.app/client/lib/chatMessages.js
+++ b/packages/rocketchat-livechat/.app/client/lib/chatMessages.js
@@ -148,6 +148,14 @@ this.ChatMessages = class ChatMessages {
guest.department = Livechat.department;
}
+ if (Livechat.guestName) {
+ guest.name = Livechat.guestName;
+ }
+
+ if (Livechat.guestEmail) {
+ guest.email = Livechat.guestEmail;
+ }
+
Meteor.call('livechat:registerGuest', guest, (error, result) => {
if (error) {
return showError(error.reason);
diff --git a/packages/rocketchat-livechat/.app/client/lib/hooks.js b/packages/rocketchat-livechat/.app/client/lib/hooks.js
index fe5409d39ca2..28656d66b797 100644
--- a/packages/rocketchat-livechat/.app/client/lib/hooks.js
+++ b/packages/rocketchat-livechat/.app/client/lib/hooks.js
@@ -44,15 +44,22 @@ const api = {
},
setGuestName(name) {
-
+ visitor.setName(name);
},
setGuestEmail(email) {
-
+ visitor.setEmail(email);
},
- registerGuest(guest) {
- //aplicar visitor.setId e visitor.setData apos o register
+ registerGuest(data) {
+ if (!((typeof data === 'object') && (data.token))) {
+ return;
+ }
+ Meteor.call('livechat:registerGuest', data, function(error, result) {
+ if (!error) {
+ visitor.setToken(data.token);
+ }
+ });
}
};
diff --git a/packages/rocketchat-livechat/.app/client/views/livechatWindow.js b/packages/rocketchat-livechat/.app/client/views/livechatWindow.js
index 414bd2cdf9a1..43adf2dc2e6f 100644
--- a/packages/rocketchat-livechat/.app/client/views/livechatWindow.js
+++ b/packages/rocketchat-livechat/.app/client/views/livechatWindow.js
@@ -74,7 +74,7 @@ Template.livechatWindow.events({
Template.livechatWindow.onCreated(function() {
Session.set({sound: true});
-
+
TAPi18n.conf.i18n_files_route = Meteor._relativeToSiteRootUrl('/tap-i18n');
const availableLanguages = TAPi18n.getLanguages();
@@ -90,69 +90,79 @@ Template.livechatWindow.onCreated(function() {
return lng;
};
- // get all needed live chat info for the user
- Meteor.call('livechat:getInitialData', visitor.getToken(), (err, result) => {
- if (err) {
- console.error(err);
- } else {
- if (!result.enabled) {
- Triggers.setDisabled();
- return parentCall('removeWidget');
- }
-
- if (!result.online) {
- Triggers.setDisabled();
- Livechat.title = result.offlineTitle;
- Livechat.offlineColor = result.offlineColor;
- Livechat.offlineMessage = result.offlineMessage;
- Livechat.displayOfflineForm = result.displayOfflineForm;
- Livechat.offlineUnavailableMessage = result.offlineUnavailableMessage;
- Livechat.offlineSuccessMessage = result.offlineSuccessMessage;
- Livechat.online = false;
+ this.autorun(() => {
+ // get all needed live chat info for the user
+ Meteor.call('livechat:getInitialData', visitor.getToken(), (err, result) => {
+ if (err) {
+ console.error(err);
} else {
- Livechat.title = result.title;
- Livechat.onlineColor = result.color;
- Livechat.online = true;
- Livechat.transcript = result.transcript;
- Livechat.transcriptMessage = result.transcriptMessage;
- Livechat.conversationFinishedMessage = result.conversationFinishedMessage;
+ if (!result.enabled) {
+ Triggers.setDisabled();
+ return parentCall('removeWidget');
+ }
+
+ if (!result.online) {
+ Triggers.setDisabled();
+ Livechat.title = result.offlineTitle;
+ Livechat.offlineColor = result.offlineColor;
+ Livechat.offlineMessage = result.offlineMessage;
+ Livechat.displayOfflineForm = result.displayOfflineForm;
+ Livechat.offlineUnavailableMessage = result.offlineUnavailableMessage;
+ Livechat.offlineSuccessMessage = result.offlineSuccessMessage;
+ Livechat.online = false;
+ } else {
+ Livechat.title = result.title;
+ Livechat.onlineColor = result.color;
+ Livechat.online = true;
+ Livechat.transcript = result.transcript;
+ Livechat.transcriptMessage = result.transcriptMessage;
+ Livechat.conversationFinishedMessage = result.conversationFinishedMessage;
+ }
+ Livechat.videoCall = result.videoCall;
+ Livechat.registrationForm = result.registrationForm;
+ Livechat.nameFieldRegistrationForm = result.nameFieldRegistrationForm;
+ Livechat.emailFieldRegistrationForm = result.emailFieldRegistrationForm;
+ if (result.room) {
+ Livechat.room = result.room._id;
+
+ visitor.setConnected();
+ }
+
+ if (result.visitor) {
+ visitor.setData(result.visitor);
+
+ if (visitor.name) {
+ Livechat.guestName = visitor.name;
+ }
+
+ if (visitor.visitorEmails && visitor.visitorEmails.length > 0) {
+ Livechat.guestEmail = visitor.visitorEmails[0].address;
+ }
+ }
+
+ if (result.agentData) {
+ Livechat.agent = result.agentData;
+ }
+
+ let language = result.language || defaultAppLanguage();
+
+ if (!availableLanguages[language]) {
+ language = language.split('-').shift();
+ }
+
+ TAPi18n.setLanguage(language);
+
+ Triggers.setTriggers(result.triggers);
+ Triggers.init();
+
+ result.departments.forEach((department) => {
+ Department.insert(department);
+ });
+ Livechat.allowSwitchingDepartments = result.allowSwitchingDepartments;
+
+ Livechat.ready();
}
- Livechat.videoCall = result.videoCall;
- Livechat.registrationForm = result.registrationForm;
- Livechat.nameFieldRegistrationForm = result.nameFieldRegistrationForm;
- Livechat.emailFieldRegistrationForm = result.emailFieldRegistrationForm;
- if (result.room) {
- Livechat.room = result.room._id;
-
- visitor.setConnected();
- }
-
- if (result.visitor) {
- visitor.setData(result.visitor);
- }
-
- if (result.agentData) {
- Livechat.agent = result.agentData;
- }
-
- let language = result.language || defaultAppLanguage();
-
- if (!availableLanguages[language]) {
- language = language.split('-').shift();
- }
-
- TAPi18n.setLanguage(language);
-
- Triggers.setTriggers(result.triggers);
- Triggers.init();
-
- result.departments.forEach((department) => {
- Department.insert(department);
- });
- Livechat.allowSwitchingDepartments = result.allowSwitchingDepartments;
-
- Livechat.ready();
- }
+ });
});
$(window).on('focus', () => {
diff --git a/packages/rocketchat-livechat/.app/client/views/messages.js b/packages/rocketchat-livechat/.app/client/views/messages.js
index f27e7d00f2d3..9adcf5ef71b8 100644
--- a/packages/rocketchat-livechat/.app/client/views/messages.js
+++ b/packages/rocketchat-livechat/.app/client/views/messages.js
@@ -62,7 +62,7 @@ Template.messages.helpers({
};
},
agentData() {
- const agent = Livechat.agent;
+ const agent = Template.instance().agentData.get();
if (!agent) {
return null;
}
@@ -137,6 +137,12 @@ Template.messages.onCreated(function() {
this.atBottom = true;
this.showOptions = new ReactiveVar(false);
+ this.agentData = new ReactiveVar(null);
+
+ this.autorun(() => {
+ const agentData = Livechat.agent;
+ this.agentData.set(agentData);
+ });
this.updateMessageInputHeight = function(input) {
// Inital height is 28. If the scrollHeight is greater than that( we have more text than area ),
diff --git a/packages/rocketchat-livechat/.app/client/views/register.js b/packages/rocketchat-livechat/.app/client/views/register.js
index 85ea78181175..8b6c2ec65415 100644
--- a/packages/rocketchat-livechat/.app/client/views/register.js
+++ b/packages/rocketchat-livechat/.app/client/views/register.js
@@ -43,8 +43,8 @@ Template.register.events({
const form = e.currentTarget;
const fields = [];
- let name;
- let email;
+ let name = Livechat.guestName;
+ let email = Livechat.guestEmail;
if (Livechat.nameFieldRegistrationForm) {
fields.push('name');
diff --git a/packages/rocketchat-livechat/.app/imports/client/visitor.js b/packages/rocketchat-livechat/.app/imports/client/visitor.js
index 782aaa7a0edb..d51b979610bd 100644
--- a/packages/rocketchat-livechat/.app/imports/client/visitor.js
+++ b/packages/rocketchat-livechat/.app/imports/client/visitor.js
@@ -25,7 +25,14 @@ export default {
this.data.set(null);
this.roomToSubscribe.set(null);
this.roomSubscribed = null;
- this.connected = false;
+
+ Livechat.room = null;
+ Livechat.department = null;
+ Livechat.agent = null;
+ Livechat.guestName = null;
+ Livechat.guestEmail = null;
+
+ msgStream.unsubscribe('room-messages');
},
getId() {
@@ -52,15 +59,13 @@ export default {
if ((!token) || (token == this.token.get())) {
return;
}
-
+
this.reset();
- Livechat.room = null;
-
+
localStorage.setItem('visitorToken', token);
this.token.set(token);
-
+
Meteor.call('livechat:loginByToken', token, (err, result) => {
- console.log(result);
if (!result) {
return;
@@ -68,14 +73,41 @@ export default {
if (result._id) {
this.setId(result._id);
- }
-
- if (result.roomId) {
- Livechat.room = roomId;
+ return result._id;
}
});
},
+ setName(name) {
+ Livechat.guestName = name;
+
+ if (!this.getId()) {
+ return;
+ }
+
+ const data = {
+ token: this.getToken(),
+ name
+ };
+
+ Meteor.call('livechat:registerGuest', data);
+ },
+
+ setEmail(email) {
+ Livechat.guestEmail = email;
+
+ if (!this.getId()) {
+ return;
+ }
+
+ const data = {
+ token: this.getToken(),
+ email
+ };
+
+ Meteor.call('livechat:registerGuest', data);
+ },
+
setRoom(rid) {
this.room.set(rid);
},
@@ -100,7 +132,7 @@ export default {
}
this.roomSubscribed = roomId;
- console.log(roomId);
+
msgStream.on(roomId, { token: this.getToken() }, (msg) => {
if (msg.t === 'command') {
Commands[msg.msg] && Commands[msg.msg]();
diff --git a/packages/rocketchat-livechat/assets/rocket-livechat.js b/packages/rocketchat-livechat/assets/rocket-livechat.js
index bc2f47234143..fb4c58b3ed25 100644
--- a/packages/rocketchat-livechat/assets/rocket-livechat.js
+++ b/packages/rocketchat-livechat/assets/rocket-livechat.js
@@ -620,10 +620,6 @@
callHook('setDepartment', department);
};
- var clearDepartment = function() {
- callHook('clearDepartment');
- };
-
var setGuestToken = function(token) {
callHook('setGuestToken', token);
};
@@ -640,6 +636,10 @@
callHook('registerGuest', guest);
};
+ var clearDepartment = function() {
+ callHook('clearDepartment');
+ };
+
var currentPage = {
href: null,
title: null
diff --git a/packages/rocketchat-livechat/server/methods/loginByToken.js b/packages/rocketchat-livechat/server/methods/loginByToken.js
index 61418330f6ad..0bc1c3f06f37 100644
--- a/packages/rocketchat-livechat/server/methods/loginByToken.js
+++ b/packages/rocketchat-livechat/server/methods/loginByToken.js
@@ -4,22 +4,12 @@ Meteor.methods({
'livechat:loginByToken'(token) {
const visitor = LivechatVisitors.getVisitorByToken(token, { fields: { _id: 1 } });
- if (!user) {
+ if (!visitor) {
return;
}
-
- let roomId;
- if (visitor) {
- const rooms = RocketChat.models.Rooms.findOpenByVisitorToken(visitor.token).fetch();
-
- if (rooms && rooms.length > 0) {
- roomId = rooms[0]._id;
- }
- }
return {
- _id: user._id,
- roomId
+ _id: visitor._id
};
}
});
From 5e3dcbb28956364ede8c6eeb93af46dabd583a95 Mon Sep 17 00:00:00 2001
From: Renato Becker
Date: Mon, 28 May 2018 21:28:58 -0300
Subject: [PATCH 03/12] Fix trailing-spaces issue.
---
packages/rocketchat-livechat/server/methods/loginByToken.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/rocketchat-livechat/server/methods/loginByToken.js b/packages/rocketchat-livechat/server/methods/loginByToken.js
index 0bc1c3f06f37..e2a0f852ee61 100644
--- a/packages/rocketchat-livechat/server/methods/loginByToken.js
+++ b/packages/rocketchat-livechat/server/methods/loginByToken.js
@@ -7,7 +7,7 @@ Meteor.methods({
if (!visitor) {
return;
}
-
+
return {
_id: visitor._id
};
From c25e0058e766a171a34f701263da7b64dd8c3b50 Mon Sep 17 00:00:00 2001
From: Renato Becker
Date: Tue, 29 May 2018 11:41:14 -0300
Subject: [PATCH 04/12] Fix trailing-spaces.
---
.../rocketchat-livechat/.app/client/views/livechatWindow.js | 2 +-
packages/rocketchat-livechat/.app/imports/client/visitor.js | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/packages/rocketchat-livechat/.app/client/views/livechatWindow.js b/packages/rocketchat-livechat/.app/client/views/livechatWindow.js
index 43adf2dc2e6f..8a8e614bba52 100644
--- a/packages/rocketchat-livechat/.app/client/views/livechatWindow.js
+++ b/packages/rocketchat-livechat/.app/client/views/livechatWindow.js
@@ -74,7 +74,7 @@ Template.livechatWindow.events({
Template.livechatWindow.onCreated(function() {
Session.set({sound: true});
-
+
TAPi18n.conf.i18n_files_route = Meteor._relativeToSiteRootUrl('/tap-i18n');
const availableLanguages = TAPi18n.getLanguages();
diff --git a/packages/rocketchat-livechat/.app/imports/client/visitor.js b/packages/rocketchat-livechat/.app/imports/client/visitor.js
index d51b979610bd..e463c9477e96 100644
--- a/packages/rocketchat-livechat/.app/imports/client/visitor.js
+++ b/packages/rocketchat-livechat/.app/imports/client/visitor.js
@@ -132,7 +132,7 @@ export default {
}
this.roomSubscribed = roomId;
-
+
msgStream.on(roomId, { token: this.getToken() }, (msg) => {
if (msg.t === 'command') {
Commands[msg.msg] && Commands[msg.msg]();
From 30bc7c33ff5147b0866c0f1a15c00fb6a599780b Mon Sep 17 00:00:00 2001
From: Renato Becker
Date: Fri, 1 Jun 2018 10:42:49 -0300
Subject: [PATCH 05/12] Allows you to create / change visitor without passing a
token.
---
packages/rocketchat-livechat/.app/client/lib/hooks.js | 9 +++++++--
.../rocketchat-livechat/server/methods/registerGuest.js | 3 ++-
2 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/packages/rocketchat-livechat/.app/client/lib/hooks.js b/packages/rocketchat-livechat/.app/client/lib/hooks.js
index 28656d66b797..4d7b14bd36a6 100644
--- a/packages/rocketchat-livechat/.app/client/lib/hooks.js
+++ b/packages/rocketchat-livechat/.app/client/lib/hooks.js
@@ -52,12 +52,17 @@ const api = {
},
registerGuest(data) {
- if (!((typeof data === 'object') && (data.token))) {
+ if (!(typeof data === 'object')) {
return;
}
+
+ if (!data.token) {
+ data.token = Random.id();
+ }
+
Meteor.call('livechat:registerGuest', data, function(error, result) {
if (!error) {
- visitor.setToken(data.token);
+ visitor.setToken(result.token);
}
});
}
diff --git a/packages/rocketchat-livechat/server/methods/registerGuest.js b/packages/rocketchat-livechat/server/methods/registerGuest.js
index 5cef4e7c19a4..d6c8f0cb32ef 100644
--- a/packages/rocketchat-livechat/server/methods/registerGuest.js
+++ b/packages/rocketchat-livechat/server/methods/registerGuest.js
@@ -11,7 +11,8 @@ Meteor.methods({
RocketChat.models.LivechatPageVisited.keepHistoryForToken(token);
return {
- userId
+ userId,
+ token
};
}
});
From e098d9474682ff7c0bc4d18e03183155558dfe07 Mon Sep 17 00:00:00 2001
From: Renato Becker
Date: Fri, 15 Jun 2018 11:00:59 -0300
Subject: [PATCH 06/12] Fixed conflit in package-lock.json file.
---
package-lock.json | 6 ------
1 file changed, 6 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index 4a5009a58b60..b93756bcc215 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9466,15 +9466,9 @@
}
},
"natives": {
-<<<<<<< HEAD
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.3.tgz",
- "integrity": "sha512-BZGSYV4YOLxzoTK73l0/s/0sH9l8SHs2ocReMH1f8JYSh5FUWu4ZrKCpJdRkWXV6HFR/pZDz7bwWOVAY07q77g==",
-=======
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/natives/-/natives-1.1.4.tgz",
"integrity": "sha512-Q29yeg9aFKwhLVdkTAejM/HvYG0Y1Am1+HUkFQGn5k2j8GS+v60TVmZh6nujpEAj/qql+wGUrlryO8bF+b1jEg==",
->>>>>>> develop
"optional": true
},
"natural-compare": {
From 4421fb546fef4efb864f39ad62e6c619b291673c Mon Sep 17 00:00:00 2001
From: Diego Sampaio
Date: Mon, 18 Jun 2018 16:44:11 -0300
Subject: [PATCH 07/12] Return on error
---
.../.app/client/views/livechatWindow.js | 114 +++++++++---------
1 file changed, 57 insertions(+), 57 deletions(-)
diff --git a/packages/rocketchat-livechat/.app/client/views/livechatWindow.js b/packages/rocketchat-livechat/.app/client/views/livechatWindow.js
index 8a8e614bba52..4f640197a5ad 100644
--- a/packages/rocketchat-livechat/.app/client/views/livechatWindow.js
+++ b/packages/rocketchat-livechat/.app/client/views/livechatWindow.js
@@ -4,7 +4,7 @@ import visitor from '../../imports/client/visitor';
function showDepartments() {
return Department.find({ showOnRegistration: true }).count() > 1;
};
-
+
Template.livechatWindow.helpers({
title() {
return Livechat.title;
@@ -90,78 +90,78 @@ Template.livechatWindow.onCreated(function() {
return lng;
};
- this.autorun(() => {
+ this.autorun(() => {
// get all needed live chat info for the user
Meteor.call('livechat:getInitialData', visitor.getToken(), (err, result) => {
if (err) {
- console.error(err);
- } else {
- if (!result.enabled) {
- Triggers.setDisabled();
- return parentCall('removeWidget');
- }
+ return console.error(err);
+ }
- if (!result.online) {
- Triggers.setDisabled();
- Livechat.title = result.offlineTitle;
- Livechat.offlineColor = result.offlineColor;
- Livechat.offlineMessage = result.offlineMessage;
- Livechat.displayOfflineForm = result.displayOfflineForm;
- Livechat.offlineUnavailableMessage = result.offlineUnavailableMessage;
- Livechat.offlineSuccessMessage = result.offlineSuccessMessage;
- Livechat.online = false;
- } else {
- Livechat.title = result.title;
- Livechat.onlineColor = result.color;
- Livechat.online = true;
- Livechat.transcript = result.transcript;
- Livechat.transcriptMessage = result.transcriptMessage;
- Livechat.conversationFinishedMessage = result.conversationFinishedMessage;
- }
- Livechat.videoCall = result.videoCall;
- Livechat.registrationForm = result.registrationForm;
- Livechat.nameFieldRegistrationForm = result.nameFieldRegistrationForm;
- Livechat.emailFieldRegistrationForm = result.emailFieldRegistrationForm;
- if (result.room) {
- Livechat.room = result.room._id;
-
- visitor.setConnected();
- }
+ if (!result.enabled) {
+ Triggers.setDisabled();
+ return parentCall('removeWidget');
+ }
- if (result.visitor) {
- visitor.setData(result.visitor);
+ if (!result.online) {
+ Triggers.setDisabled();
+ Livechat.title = result.offlineTitle;
+ Livechat.offlineColor = result.offlineColor;
+ Livechat.offlineMessage = result.offlineMessage;
+ Livechat.displayOfflineForm = result.displayOfflineForm;
+ Livechat.offlineUnavailableMessage = result.offlineUnavailableMessage;
+ Livechat.offlineSuccessMessage = result.offlineSuccessMessage;
+ Livechat.online = false;
+ } else {
+ Livechat.title = result.title;
+ Livechat.onlineColor = result.color;
+ Livechat.online = true;
+ Livechat.transcript = result.transcript;
+ Livechat.transcriptMessage = result.transcriptMessage;
+ Livechat.conversationFinishedMessage = result.conversationFinishedMessage;
+ }
+ Livechat.videoCall = result.videoCall;
+ Livechat.registrationForm = result.registrationForm;
+ Livechat.nameFieldRegistrationForm = result.nameFieldRegistrationForm;
+ Livechat.emailFieldRegistrationForm = result.emailFieldRegistrationForm;
+ if (result.room) {
+ Livechat.room = result.room._id;
+
+ visitor.setConnected();
+ }
- if (visitor.name) {
- Livechat.guestName = visitor.name;
- }
+ if (result.visitor) {
+ visitor.setData(result.visitor);
- if (visitor.visitorEmails && visitor.visitorEmails.length > 0) {
- Livechat.guestEmail = visitor.visitorEmails[0].address;
- }
+ if (visitor.name) {
+ Livechat.guestName = visitor.name;
}
- if (result.agentData) {
- Livechat.agent = result.agentData;
+ if (visitor.visitorEmails && visitor.visitorEmails.length > 0) {
+ Livechat.guestEmail = visitor.visitorEmails[0].address;
}
+ }
- let language = result.language || defaultAppLanguage();
+ if (result.agentData) {
+ Livechat.agent = result.agentData;
+ }
- if (!availableLanguages[language]) {
- language = language.split('-').shift();
- }
+ let language = result.language || defaultAppLanguage();
- TAPi18n.setLanguage(language);
+ if (!availableLanguages[language]) {
+ language = language.split('-').shift();
+ }
- Triggers.setTriggers(result.triggers);
- Triggers.init();
+ TAPi18n.setLanguage(language);
- result.departments.forEach((department) => {
- Department.insert(department);
- });
- Livechat.allowSwitchingDepartments = result.allowSwitchingDepartments;
+ Triggers.setTriggers(result.triggers);
+ Triggers.init();
- Livechat.ready();
- }
+ result.departments.forEach((department) => {
+ Department.insert(department);
+ });
+ Livechat.allowSwitchingDepartments = result.allowSwitchingDepartments;
+
+ Livechat.ready();
});
});
From 6f4e5d1908c8b847d029282088fd637762b5ea51 Mon Sep 17 00:00:00 2001
From: Renato Becker
Date: Wed, 20 Jun 2018 16:02:03 -0300
Subject: [PATCH 08/12] code style improvements.
---
.../.app/client/lib/hooks.js | 8 ++++----
.../.app/imports/client/visitor.js | 20 +++++++++----------
2 files changed, 14 insertions(+), 14 deletions(-)
diff --git a/packages/rocketchat-livechat/.app/client/lib/hooks.js b/packages/rocketchat-livechat/.app/client/lib/hooks.js
index 2bdca8f3ad50..fe5e00e2c3a1 100644
--- a/packages/rocketchat-livechat/.app/client/lib/hooks.js
+++ b/packages/rocketchat-livechat/.app/client/lib/hooks.js
@@ -52,9 +52,9 @@ const api = {
},
registerGuest(data) {
- if (!(typeof data === 'object')) {
+ if (typeof data !== 'object') {
return;
- }
+ }
if (!data.token) {
data.token = Random.id();
@@ -63,9 +63,9 @@ const api = {
Meteor.call('livechat:registerGuest', data, function(error, result) {
if (!error) {
visitor.setToken(result.token);
- }
+ }
});
- }
+ }
};
window.addEventListener('message', function(msg) {
diff --git a/packages/rocketchat-livechat/.app/imports/client/visitor.js b/packages/rocketchat-livechat/.app/imports/client/visitor.js
index 0d3c4be232a4..cfc79e3e511d 100644
--- a/packages/rocketchat-livechat/.app/imports/client/visitor.js
+++ b/packages/rocketchat-livechat/.app/imports/client/visitor.js
@@ -31,8 +31,8 @@ export default {
Livechat.agent = null;
Livechat.guestName = null;
Livechat.guestEmail = null;
-
- msgStream.unsubscribe('room-messages');
+
+ msgStream.unsubscribe('room-messages');
},
getId() {
@@ -56,21 +56,21 @@ export default {
},
setToken(token) {
- if ((!token) || (token == this.token.get())) {
+ if (!token || token == this.token.get()) {
return;
}
-
+
this.reset();
-
+
localStorage.setItem('visitorToken', token);
this.token.set(token);
-
+
Meteor.call('livechat:loginByToken', token, (err, result) => {
if (!result) {
return;
}
-
+
if (result._id) {
this.setId(result._id);
return result._id;
@@ -80,7 +80,7 @@ export default {
setName(name) {
Livechat.guestName = name;
-
+
if (!this.getId()) {
return;
}
@@ -89,7 +89,7 @@ export default {
token: this.getToken(),
name
};
-
+
Meteor.call('livechat:registerGuest', data);
},
@@ -104,7 +104,7 @@ export default {
token: this.getToken(),
email
};
-
+
Meteor.call('livechat:registerGuest', data);
},
From 15f0e480c0d7c97d4747bee18f7925ddc80d1443 Mon Sep 17 00:00:00 2001
From: Renato Becker
Date: Thu, 21 Jun 2018 17:26:41 -0300
Subject: [PATCH 09/12] Fixes and improvements in Livechat API.
---
.../.app/client/lib/hooks.js | 4 ++--
.../.app/client/lib/msgTyping.js | 5 ++++
.../.app/client/views/livechatWindow.js | 12 +++++++---
.../.app/client/views/register.html | 8 +++----
.../.app/client/views/register.js | 23 ++++++++++++++++---
.../.app/imports/client/visitor.js | 4 ++--
.../server/methods/registerGuest.js | 13 ++++++++++-
7 files changed, 54 insertions(+), 15 deletions(-)
diff --git a/packages/rocketchat-livechat/.app/client/lib/hooks.js b/packages/rocketchat-livechat/.app/client/lib/hooks.js
index fe5e00e2c3a1..93ba1a6f11c6 100644
--- a/packages/rocketchat-livechat/.app/client/lib/hooks.js
+++ b/packages/rocketchat-livechat/.app/client/lib/hooks.js
@@ -61,8 +61,8 @@ const api = {
}
Meteor.call('livechat:registerGuest', data, function(error, result) {
- if (!error) {
- visitor.setToken(result.token);
+ if (!error && result.visitor && result.visitor.token) {
+ visitor.setToken(result.visitor.token);
}
});
}
diff --git a/packages/rocketchat-livechat/.app/client/lib/msgTyping.js b/packages/rocketchat-livechat/.app/client/lib/msgTyping.js
index 378af82a34aa..addcfa608ef4 100644
--- a/packages/rocketchat-livechat/.app/client/lib/msgTyping.js
+++ b/packages/rocketchat-livechat/.app/client/lib/msgTyping.js
@@ -10,6 +10,7 @@ export const MsgTyping = (function() {
const selfTyping = new ReactiveVar(false);
const usersTyping = {};
const dep = new Tracker.Dependency;
+ let oldRoom;
const addStream = function(room) {
if (!_.isEmpty(usersTyping[room] && usersTyping[room].users)) {
@@ -38,7 +39,11 @@ export const MsgTyping = (function() {
Tracker.autorun(() => {
if (visitor.getRoom() && visitor.getId()) {
+ if (oldRoom) {
+ Notifications.unRoom(oldRoom, 'typing');
+ }
addStream(visitor.getRoom());
+ oldRoom = visitor.getRoom();
}
});
diff --git a/packages/rocketchat-livechat/.app/client/views/livechatWindow.js b/packages/rocketchat-livechat/.app/client/views/livechatWindow.js
index 4f640197a5ad..07aaa0912f9c 100644
--- a/packages/rocketchat-livechat/.app/client/views/livechatWindow.js
+++ b/packages/rocketchat-livechat/.app/client/views/livechatWindow.js
@@ -90,6 +90,13 @@ Template.livechatWindow.onCreated(function() {
return lng;
};
+ const loadDepartments = departments => {
+ Department.remove({});
+ departments.forEach((department) => {
+ Department.insert(department);
+ });
+ };
+
this.autorun(() => {
// get all needed live chat info for the user
Meteor.call('livechat:getInitialData', visitor.getToken(), (err, result) => {
@@ -156,9 +163,8 @@ Template.livechatWindow.onCreated(function() {
Triggers.setTriggers(result.triggers);
Triggers.init();
- result.departments.forEach((department) => {
- Department.insert(department);
- });
+ loadDepartments(result.departments);
+
Livechat.allowSwitchingDepartments = result.allowSwitchingDepartments;
Livechat.ready();
diff --git a/packages/rocketchat-livechat/.app/client/views/register.html b/packages/rocketchat-livechat/.app/client/views/register.html
index 142ca7637593..1e3e533b7e34 100644
--- a/packages/rocketchat-livechat/.app/client/views/register.html
+++ b/packages/rocketchat-livechat/.app/client/views/register.html
@@ -9,11 +9,11 @@