Make livechat client app less reactive

pull/3100/head
Diego Sampaio 10 years ago
parent 189198c810
commit 97ec423824
  1. 13
      packages/rocketchat-livechat/app/client/lib/_visitor.coffee
  2. 3
      packages/rocketchat-livechat/app/client/lib/chatMessages.coffee
  3. 5
      packages/rocketchat-livechat/app/client/lib/collections.coffee
  4. 11
      packages/rocketchat-livechat/app/client/lib/fromApp/Notifications.coffee
  5. 24
      packages/rocketchat-livechat/app/client/lib/triggers.js
  6. 10
      packages/rocketchat-livechat/app/client/startup/room.coffee
  7. 5
      packages/rocketchat-livechat/app/client/startup/triggers.js
  8. 59
      packages/rocketchat-livechat/app/client/views/livechatWindow.js
  9. 11
      packages/rocketchat-livechat/app/client/views/messages.js
  10. 2
      packages/rocketchat-livechat/app/client/views/register.js
  11. 4
      packages/rocketchat-livechat/package.js
  12. 56
      packages/rocketchat-livechat/server/methods/getInitialData.js
  13. 3
      packages/rocketchat-livechat/server/publications/availableDepartments.js
  14. 3
      packages/rocketchat-livechat/server/publications/trigger.js
  15. 12
      packages/rocketchat-livechat/server/publications/visitorRoom.js

@ -1,3 +1,5 @@
msgStream = new Meteor.Streamer 'room-messages'
@visitor = new class
token = new ReactiveVar null
room = new ReactiveVar null
@ -30,9 +32,20 @@
room.set(rid)
return roomToSubscribe.set(rid)
subscribeToRoom = (roomId) ->
msgStream.on roomId, (msg) ->
if msg.t is 'command'
if msg.msg is 'survey'
unless $('body #survey').length
Blaze.render(Template.survey, $('body').get(0))
else
ChatMessage.upsert { _id: msg._id }, msg
register: register
getToken: getToken
setRoom: setRoom
getRoom: getRoom
setRoomToSubscribe: setRoomToSubscribe
getRoomToSubscribe: getRoomToSubscribe
subscribeToRoom: subscribeToRoom

@ -106,7 +106,8 @@ class @ChatMessages
sendMessage (message) ->
ChatMessage.update message._id, _.omit(message, '_id')
if message.rid?
visitor.setRoomToSubscribe(message.rid)
visitor.subscribeToRoom(message.rid)
visitor.setRoom(message.rid)
else
sendMessage()

@ -1,5 +1,2 @@
@ChatMessage = new Meteor.Collection null
@ChatRoom = new Meteor.Collection 'rocketchat_room'
@Settings = new Meteor.Collection 'rocketchat_settings'
@Trigger = new Meteor.Collection 'rocketchat_livechat_trigger'
@Department = new Meteor.Collection 'rocketchat_livechat_department'
@Department = new Meteor.Collection null

@ -22,17 +22,6 @@
args.unshift "#{userId}/#{eventName}"
@streamUser.emit.apply @streamUser, args
notifyUsersOfRoom: (room, eventName, args...) ->
console.log "RocketChat.Notifications: notifyUsersOfRoom", arguments if @debug is true
onlineUsers = RoomManager.onlineUsers.get()
room = ChatRoom.findOne(room)
for username in room?.usernames or []
if onlineUsers[username]?
argsToSend = ["#{onlineUsers[username]._id}/#{eventName}"].concat args
@streamUser.emit.apply @streamUser, argsToSend
onAll: (eventName, callback) ->
@streamAll.on eventName, callback

@ -5,7 +5,7 @@ this.Triggers = (function() {
var fire = function(actions) {
if (Meteor.userId()) {
console.log('already logged user - does nothing');
// console.log('already logged user - does nothing');
return;
}
actions.forEach(function(action) {
@ -57,23 +57,25 @@ this.Triggers = (function() {
});
};
var setTriggers = function(newTriggers) {
triggers = newTriggers;
};
var init = function() {
initiated = true;
Tracker.autorun(function() {
triggers = Trigger.find().fetch();
if (requests.length > 0 && triggers.length > 0) {
requests.forEach(function(request) {
processRequest(request);
});
if (requests.length > 0 && triggers.length > 0) {
requests.forEach(function(request) {
processRequest(request);
});
requests = [];
}
});
requests = [];
}
};
return {
init: init,
processRequest: processRequest
processRequest: processRequest,
setTriggers: setTriggers
};
}());

@ -1,10 +0,0 @@
msgStream = new Meteor.Streamer 'room-messages'
Tracker.autorun ->
if visitor.getRoomToSubscribe()?
msgStream.on visitor.getRoomToSubscribe(), (msg) ->
if msg.t is 'command'
if msg.msg is 'survey'
unless $('body #survey').length
Blaze.render(Template.survey, $('body').get(0))
else
ChatMessage.upsert { _id: msg._id }, msg

@ -1,5 +0,0 @@
Meteor.startup(function() {
Meteor.subscribe('livechat:trigger', function() {
Triggers.init();
});
});

@ -1,17 +1,10 @@
/* globals Department */
Template.livechatWindow.helpers({
title() {
var ref;
if (!Template.instance().subscriptionsReady()) {
return '';
}
return ((ref = Settings.findOne('Livechat_title')) != null ? ref.value : void 0) || 'Rocket.Chat';
return Template.instance().title.get();
},
color() {
var ref;
if (!Template.instance().subscriptionsReady()) {
return 'transparent';
}
return ((ref = Settings.findOne('Livechat_title_color')) != null ? ref.value : void 0) || '#C1272D';
return Template.instance().color.get();
},
popoutActive() {
return FlowRouter.getQueryParam('mode') === 'popout';
@ -20,14 +13,13 @@ Template.livechatWindow.helpers({
if (Session.get('triggered') || Meteor.userId()) {
return false;
}
var form = Settings.findOne('Livechat_registration_form');
return form.value;
return Template.instance().registrationForm.get();
},
livechatStartedEnabled() {
return Template.instance().startedEnabled.get() !== null;
return Template.instance().enabled.get() !== null;
},
livechatEnabled() {
return Template.instance().startedEnabled.get();
return Template.instance().enabled.get();
}
});
@ -42,22 +34,37 @@ Template.livechatWindow.events({
});
Template.livechatWindow.onCreated(function() {
this.startedEnabled = new ReactiveVar(null);
this.enabled = new ReactiveVar(null);
this.subscribe('settings', ['Livechat_title', 'Livechat_title_color', 'Livechat_enabled', 'Livechat_registration_form']);
this.title = new ReactiveVar('Rocket.Chat');
this.color = new ReactiveVar('#C1272D');
this.registrationForm = new ReactiveVar(true);
var initialCheck = true;
// 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) {
return parentCall('removeWidget');
}
this.enabled.set(result.enabled);
this.title.set(result.title);
this.color.set(result.color);
this.registrationForm.set(result.registrationForm);
this.autorun(() => {
if (this.subscriptionsReady()) {
var enabled = Settings.findOne('Livechat_enabled');
if (enabled !== undefined) {
if (!enabled.value && initialCheck) {
parentCall('removeWidget');
}
initialCheck = false;
this.startedEnabled.set(enabled.value);
if (result.room) {
RoomHistoryManager.getMoreIfIsEmpty(result.room._id);
visitor.subscribeToRoom(result.room._id);
visitor.setRoom(result.room._id);
}
Triggers.setTriggers(result.triggers);
Triggers.init();
result.departments.forEach((department) => {
Department.insert(department);
});
}
});
});

@ -41,16 +41,7 @@ Template.messages.events({
Template.messages.onCreated(function() {
var self;
self = this;
self.autorun(function() {
self.subscribe('livechat:visitorRoom', visitor.getToken(), function() {
var room;
room = ChatRoom.findOne();
if (room != null) {
visitor.setRoomToSubscribe(room._id);
RoomHistoryManager.getMoreIfIsEmpty(room._id);
}
});
});
self.atBottom = true;
self.updateMessageInputHeight = function(input) {

@ -54,8 +54,6 @@ Template.register.events({
});
Template.register.onCreated(function() {
this.subscribe('livechat:availableDepartments');
this.error = new ReactiveVar();
this.showError = (msg) => {
$('.error').addClass('show');

@ -99,6 +99,7 @@ Package.onUse(function(api) {
api.addFiles('server/methods/addManager.js', 'server');
api.addFiles('server/methods/changeLivechatStatus.js', 'server');
api.addFiles('server/methods/getCustomFields.js', 'server');
api.addFiles('server/methods/getInitialData.js', 'server');
api.addFiles('server/methods/pageVisited.js', 'server');
api.addFiles('server/methods/registerGuest.js', 'server');
api.addFiles('server/methods/removeAgent.js', 'server');
@ -132,7 +133,6 @@ Package.onUse(function(api) {
api.addFiles('server/externalMessageHook.js', 'server');
// publications
api.addFiles('server/publications/availableDepartments.js', 'server');
api.addFiles('server/publications/customFields.js', 'server');
api.addFiles('server/publications/departmentAgents.js', 'server');
api.addFiles('server/publications/externalMessages.js', 'server');
@ -140,10 +140,8 @@ Package.onUse(function(api) {
api.addFiles('server/publications/livechatDepartments.js', 'server');
api.addFiles('server/publications/livechatManagers.js', 'server');
api.addFiles('server/publications/livechatRooms.js', 'server');
api.addFiles('server/publications/trigger.js', 'server');
api.addFiles('server/publications/visitorInfo.js', 'server');
api.addFiles('server/publications/visitorPageVisited.js', 'server');
api.addFiles('server/publications/visitorRoom.js', 'server');
// api
api.addFiles('server/api.js', 'server');

@ -0,0 +1,56 @@
Meteor.methods({
'livechat:getInitialData'(visitorToken) {
console.log('userId ->',Meteor.userId());
var info = {
enabled: null,
title: null,
color: null,
registrationForm: null,
room: null,
triggers: [],
departments: []
};
const room = RocketChat.models.Rooms.findByVisitorToken(visitorToken, {
fields: {
name: 1,
t: 1,
cl: 1,
u: 1,
usernames: 1,
v: 1
}
}).fetch();
if (room && room.length > 0) {
info.room = room[0];
}
RocketChat.models.Settings.findNotHiddenPublic([
'Livechat_title',
'Livechat_title_color',
'Livechat_enabled',
'Livechat_registration_form'
]).forEach((setting) => {
if (setting._id === 'Livechat_title') {
info.title = setting.value;
} else if (setting._id === 'Livechat_title_color') {
info.color = setting.value;
} else if (setting._id === 'Livechat_enabled') {
info.enabled = setting.value;
} else if (setting._id === 'Livechat_registration_form') {
info.registrationForm = setting.value;
}
});
RocketChat.models.LivechatTrigger.find().forEach((trigger) => {
info.triggers.push(trigger);
});
RocketChat.models.LivechatDepartment.findEnabledWithAgents().forEach((department) => {
info.departments.push(department);
});
return info;
}
});

@ -1,3 +0,0 @@
Meteor.publish('livechat:availableDepartments', function() {
return RocketChat.models.LivechatDepartment.findEnabledWithAgents();
});

@ -1,3 +0,0 @@
Meteor.publish('livechat:trigger', function() {
return RocketChat.models.LivechatTrigger.find();
});

@ -1,12 +0,0 @@
Meteor.publish('livechat:visitorRoom', function(visitorToken) {
return RocketChat.models.Rooms.findByVisitorToken(visitorToken, {
fields: {
name: 1,
t: 1,
cl: 1,
u: 1,
usernames: 1,
v: 1
}
});
});
Loading…
Cancel
Save