From a28ea2367771af6fd30929650f9a730fe6ad680b Mon Sep 17 00:00:00 2001 From: Gabriel Delavald Date: Mon, 24 Jul 2017 18:27:20 -0300 Subject: [PATCH 1/3] Adds preference to one-click-to-direct-message and basic funcionality --- packages/rocketchat-i18n/i18n/en.i18n.json | 2 + .../client/accountPreferences.html | 9 +++++ .../client/accountPreferences.js | 1 + .../rocketchat-ui/client/views/app/room.js | 37 +++++++++++++------ server/methods/saveUserPreferences.js | 1 + 5 files changed, 38 insertions(+), 12 deletions(-) diff --git a/packages/rocketchat-i18n/i18n/en.i18n.json b/packages/rocketchat-i18n/i18n/en.i18n.json index d532cfda72af..3865a2c68629 100644 --- a/packages/rocketchat-i18n/i18n/en.i18n.json +++ b/packages/rocketchat-i18n/i18n/en.i18n.json @@ -330,6 +330,8 @@ "Clear_all_unreads_question": "Clear all unreads?", "Click_here": "Click here", "Click_here_for_more_info": "Click here for more info", + "Click_Direct_Message": "Click to Create Direct Message", + "Click_Direct_Message_Description": "Skip opening profile tab and goes straight to conversation", "Client_ID": "Client ID", "Client_Secret": "Client Secret", "Clients_will_refresh_in_a_few_seconds": "Clients will refresh in a few seconds", diff --git a/packages/rocketchat-ui-account/client/accountPreferences.html b/packages/rocketchat-ui-account/client/accountPreferences.html index 8d3bd2116dbc..c28dc2a23b17 100644 --- a/packages/rocketchat-ui-account/client/accountPreferences.html +++ b/packages/rocketchat-ui-account/client/accountPreferences.html @@ -139,6 +139,15 @@

{{_ "Messages"}}

+
+ +
+ + +
+
{{_ "Click_Direct_Message_Description"}}
+ +
diff --git a/packages/rocketchat-ui-account/client/accountPreferences.js b/packages/rocketchat-ui-account/client/accountPreferences.js index d86d2cef6ada..8c490beac7c3 100644 --- a/packages/rocketchat-ui-account/client/accountPreferences.js +++ b/packages/rocketchat-ui-account/client/accountPreferences.js @@ -114,6 +114,7 @@ Template.accountPreferences.onCreated(function() { data.hideFlexTab = $('#hideFlexTab').find('input:checked').val(); data.hideAvatars = $('#hideAvatars').find('input:checked').val(); data.mergeChannels = $('#mergeChannels').find('input:checked').val(); + data.clickToDirectMessage = $('#clickToDirectMessage').find('input:checked').val(); data.sendOnEnter = $('#sendOnEnter').find('select').val(); data.unreadRoomsMode = $('input[name=unreadRoomsMode]:checked').val(); data.autoImageLoad = $('input[name=autoImageLoad]:checked').val(); diff --git a/packages/rocketchat-ui/client/views/app/room.js b/packages/rocketchat-ui/client/views/app/room.js index 4adb3f5d9fbf..fe3143ec73cb 100644 --- a/packages/rocketchat-ui/client/views/app/room.js +++ b/packages/rocketchat-ui/client/views/app/room.js @@ -458,21 +458,34 @@ Template.room.events({ if (!Meteor.userId() || !this._arguments) { return; } - const roomData = Session.get(`roomData${ this._arguments[1].rid }`); + const clickToDirectMessage = Meteor.user() && Meteor.user().settings && Meteor.user().settings.preferences && Meteor.user().settings.preferences.clickToDirectMessage; + if (clickToDirectMessage) { + return Meteor.call('createDirectMessage', this._arguments[1].u.username, (error, result) => { + if (error) { + return handleError(error); + } - if (RocketChat.Layout.isEmbedded()) { - fireGlobalEvent('click-user-card-message', { username: this._arguments[1].u.username }); - e.preventDefault(); - e.stopPropagation(); - return; - } + if ((result != null ? result.rid : undefined) != null) { + return FlowRouter.go('direct', { username: this._arguments[1].u.username }, FlowRouter.current().queryParams); + } + }); + } else { + const roomData = Session.get(`roomData${ this._arguments[1].rid }`); - if (['c', 'p', 'd'].includes(roomData.t)) { - instance.setUserDetail(this._arguments[1].u.username); - } + if (RocketChat.Layout.isEmbedded()) { + fireGlobalEvent('click-user-card-message', { username: this._arguments[1].u.username }); + e.preventDefault(); + e.stopPropagation(); + return; + } - instance.tabBar.setTemplate('membersList'); - return instance.tabBar.open(); + if (['c', 'p', 'd'].includes(roomData.t)) { + instance.setUserDetail(this._arguments[1].u.username); + } + + instance.tabBar.setTemplate('membersList'); + return instance.tabBar.open(); + } }, 'scroll .wrapper': _.throttle(function(e) { diff --git a/server/methods/saveUserPreferences.js b/server/methods/saveUserPreferences.js index 2d951fd35a66..f91bb3beaf06 100644 --- a/server/methods/saveUserPreferences.js +++ b/server/methods/saveUserPreferences.js @@ -60,6 +60,7 @@ Meteor.methods({ preferences.hideUsernames = settings.hideUsernames === '1'; preferences.hideRoles = settings.hideRoles === '1'; preferences.hideAvatars = settings.hideAvatars === '1'; + preferences.clickToDirectMessage = settings.clickToDirectMessage === '1'; preferences.hideFlexTab = settings.hideFlexTab === '1'; preferences.highlights = settings.highlights; preferences.sendOnEnter = settings.sendOnEnter; From 95c6aa09007e734cc83ecf20fb3a644c4e7009fe Mon Sep 17 00:00:00 2001 From: Gabriel Delavald Date: Tue, 25 Jul 2017 10:50:14 -0300 Subject: [PATCH 2/3] Changes description and handles error cases --- packages/rocketchat-i18n/i18n/en.i18n.json | 2 +- .../rocketchat-ui/client/views/app/room.js | 38 +++++++++++-------- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/packages/rocketchat-i18n/i18n/en.i18n.json b/packages/rocketchat-i18n/i18n/en.i18n.json index 3865a2c68629..e0ef7d1784af 100644 --- a/packages/rocketchat-i18n/i18n/en.i18n.json +++ b/packages/rocketchat-i18n/i18n/en.i18n.json @@ -331,7 +331,7 @@ "Click_here": "Click here", "Click_here_for_more_info": "Click here for more info", "Click_Direct_Message": "Click to Create Direct Message", - "Click_Direct_Message_Description": "Skip opening profile tab and goes straight to conversation", + "Click_Direct_Message_Description": "Skip opening profile tab, instead go straight to conversation", "Client_ID": "Client ID", "Client_Secret": "Client Secret", "Clients_will_refresh_in_a_few_seconds": "Clients will refresh in a few seconds", diff --git a/packages/rocketchat-ui/client/views/app/room.js b/packages/rocketchat-ui/client/views/app/room.js index fe3143ec73cb..411fb19bc6d7 100644 --- a/packages/rocketchat-ui/client/views/app/room.js +++ b/packages/rocketchat-ui/client/views/app/room.js @@ -10,7 +10,23 @@ const isSubscribed = _id => ChatSubscription.find({ rid: _id }).count() > 0; const favoritesEnabled = () => RocketChat.settings.get('Favorite_Rooms'); const userCanDrop = _id => !RocketChat.roomTypes.readOnly(_id, Meteor.user()); +const openProfileTab = (e, instance, data) => { + const roomData = Session.get(`roomData${ data.rid }`); + if (RocketChat.Layout.isEmbedded()) { + fireGlobalEvent('click-user-card-message', { username: data.u.username }); + e.preventDefault(); + e.stopPropagation(); + return; + } + + if (['c', 'p', 'd'].includes(roomData.t)) { + instance.setUserDetail(data.u.username); + } + + instance.tabBar.setTemplate('membersList'); + return instance.tabBar.open(); +}; Template.room.helpers({ isTranslated() { const sub = ChatSubscription.findOne({ rid: this._id }, { fields: { autoTranslate: 1, autoTranslateLanguage: 1 } }); @@ -462,7 +478,11 @@ Template.room.events({ if (clickToDirectMessage) { return Meteor.call('createDirectMessage', this._arguments[1].u.username, (error, result) => { if (error) { - return handleError(error); + if (error.isClientSafe) { + openProfileTab(e, instance, this._arguments[1]); + } else { + return handleError(error); + } } if ((result != null ? result.rid : undefined) != null) { @@ -470,21 +490,7 @@ Template.room.events({ } }); } else { - const roomData = Session.get(`roomData${ this._arguments[1].rid }`); - - if (RocketChat.Layout.isEmbedded()) { - fireGlobalEvent('click-user-card-message', { username: this._arguments[1].u.username }); - e.preventDefault(); - e.stopPropagation(); - return; - } - - if (['c', 'p', 'd'].includes(roomData.t)) { - instance.setUserDetail(this._arguments[1].u.username); - } - - instance.tabBar.setTemplate('membersList'); - return instance.tabBar.open(); + openProfileTab(e, instance, this._arguments[1]); } }, From 8722ed964766557d46c4e50b6c87cee7d682cb7b Mon Sep 17 00:00:00 2001 From: Gabriel Delavald Date: Tue, 25 Jul 2017 15:37:49 -0300 Subject: [PATCH 3/3] Refactor user preference into admin setting --- packages/rocketchat-i18n/i18n/en.i18n.json | 4 ++-- packages/rocketchat-lib/server/startup/settings.js | 4 ++++ .../rocketchat-ui-account/client/accountPreferences.html | 9 --------- .../rocketchat-ui-account/client/accountPreferences.js | 1 - packages/rocketchat-ui/client/views/app/room.js | 3 +-- server/methods/saveUserPreferences.js | 1 - 6 files changed, 7 insertions(+), 15 deletions(-) diff --git a/packages/rocketchat-i18n/i18n/en.i18n.json b/packages/rocketchat-i18n/i18n/en.i18n.json index e0ef7d1784af..02ef0ba3ab5a 100644 --- a/packages/rocketchat-i18n/i18n/en.i18n.json +++ b/packages/rocketchat-i18n/i18n/en.i18n.json @@ -330,8 +330,8 @@ "Clear_all_unreads_question": "Clear all unreads?", "Click_here": "Click here", "Click_here_for_more_info": "Click here for more info", - "Click_Direct_Message": "Click to Create Direct Message", - "Click_Direct_Message_Description": "Skip opening profile tab, instead go straight to conversation", + "UI_Click_Direct_Message": "Click to Create Direct Message", + "UI_Click_Direct_Message_Description": "Skip opening profile tab, instead go straight to conversation", "Client_ID": "Client ID", "Client_Secret": "Client Secret", "Clients_will_refresh_in_a_few_seconds": "Clients will refresh in a few seconds", diff --git a/packages/rocketchat-lib/server/startup/settings.js b/packages/rocketchat-lib/server/startup/settings.js index d93b106c04f5..521e48dbe97a 100644 --- a/packages/rocketchat-lib/server/startup/settings.js +++ b/packages/rocketchat-lib/server/startup/settings.js @@ -1036,6 +1036,10 @@ RocketChat.settings.addGroup('Layout', function() { type: 'boolean', 'public': true }); + this.add('UI_Click_Direct_Message', false, { + type: 'boolean', + 'public': true + }); }); }); diff --git a/packages/rocketchat-ui-account/client/accountPreferences.html b/packages/rocketchat-ui-account/client/accountPreferences.html index c28dc2a23b17..8d3bd2116dbc 100644 --- a/packages/rocketchat-ui-account/client/accountPreferences.html +++ b/packages/rocketchat-ui-account/client/accountPreferences.html @@ -139,15 +139,6 @@

{{_ "Messages"}}

-
- -
- - -
-
{{_ "Click_Direct_Message_Description"}}
- -
diff --git a/packages/rocketchat-ui-account/client/accountPreferences.js b/packages/rocketchat-ui-account/client/accountPreferences.js index 8c490beac7c3..d86d2cef6ada 100644 --- a/packages/rocketchat-ui-account/client/accountPreferences.js +++ b/packages/rocketchat-ui-account/client/accountPreferences.js @@ -114,7 +114,6 @@ Template.accountPreferences.onCreated(function() { data.hideFlexTab = $('#hideFlexTab').find('input:checked').val(); data.hideAvatars = $('#hideAvatars').find('input:checked').val(); data.mergeChannels = $('#mergeChannels').find('input:checked').val(); - data.clickToDirectMessage = $('#clickToDirectMessage').find('input:checked').val(); data.sendOnEnter = $('#sendOnEnter').find('select').val(); data.unreadRoomsMode = $('input[name=unreadRoomsMode]:checked').val(); data.autoImageLoad = $('input[name=autoImageLoad]:checked').val(); diff --git a/packages/rocketchat-ui/client/views/app/room.js b/packages/rocketchat-ui/client/views/app/room.js index 411fb19bc6d7..1d77eccb8deb 100644 --- a/packages/rocketchat-ui/client/views/app/room.js +++ b/packages/rocketchat-ui/client/views/app/room.js @@ -474,8 +474,7 @@ Template.room.events({ if (!Meteor.userId() || !this._arguments) { return; } - const clickToDirectMessage = Meteor.user() && Meteor.user().settings && Meteor.user().settings.preferences && Meteor.user().settings.preferences.clickToDirectMessage; - if (clickToDirectMessage) { + if (RocketChat.settings.get('UI_Click_Direct_Message')) { return Meteor.call('createDirectMessage', this._arguments[1].u.username, (error, result) => { if (error) { if (error.isClientSafe) { diff --git a/server/methods/saveUserPreferences.js b/server/methods/saveUserPreferences.js index f91bb3beaf06..2d951fd35a66 100644 --- a/server/methods/saveUserPreferences.js +++ b/server/methods/saveUserPreferences.js @@ -60,7 +60,6 @@ Meteor.methods({ preferences.hideUsernames = settings.hideUsernames === '1'; preferences.hideRoles = settings.hideRoles === '1'; preferences.hideAvatars = settings.hideAvatars === '1'; - preferences.clickToDirectMessage = settings.clickToDirectMessage === '1'; preferences.hideFlexTab = settings.hideFlexTab === '1'; preferences.highlights = settings.highlights; preferences.sendOnEnter = settings.sendOnEnter;