From cf6e741d320e23b3c149fd81b522a7595b1129b2 Mon Sep 17 00:00:00 2001 From: Renato Becker Date: Tue, 17 Apr 2018 16:03:24 -0300 Subject: [PATCH] [NEW] Livechat setting to customize ended conversation message (#10108) * Message of the conversation finished has been added. * New setting added to display a message when the Livechat conversation has ended. * Fix PR review. --- packages/rocketchat-i18n/i18n/en.i18n.json | 1 + packages/rocketchat-i18n/i18n/pt.i18n.json | 1 + .../.app/client/lib/_livechat.js | 7 +++++++ .../.app/client/lib/commands.js | 7 ------- .../.app/client/views/livechatWindow.js | 1 + .../.app/client/views/message.js | 2 +- .../client/views/app/livechatAppearance.html | 7 +++++++ .../client/views/app/livechatAppearance.js | 15 +++++++++++++++ packages/rocketchat-livechat/config.js | 8 ++++++++ .../rocketchat-livechat/server/lib/Livechat.js | 3 ++- .../server/methods/getInitialData.js | 4 +++- .../server/methods/saveAppearance.js | 3 ++- .../server/publications/livechatAppearance.js | 3 ++- 13 files changed, 50 insertions(+), 12 deletions(-) diff --git a/packages/rocketchat-i18n/i18n/en.i18n.json b/packages/rocketchat-i18n/i18n/en.i18n.json index 6a8ddeb323fb..44e8f3fe4791 100644 --- a/packages/rocketchat-i18n/i18n/en.i18n.json +++ b/packages/rocketchat-i18n/i18n/en.i18n.json @@ -433,6 +433,7 @@ "Content": "Content", "Conversation": "Conversation", "Conversation_closed": "Conversation closed: __comment__.", + "Conversation_finished_message": "Conversation Finished Message", "Convert_Ascii_Emojis": "Convert ASCII to Emoji", "Copied": "Copied", "Copy": "Copy", diff --git a/packages/rocketchat-i18n/i18n/pt.i18n.json b/packages/rocketchat-i18n/i18n/pt.i18n.json index d4380dd8a5b9..2ec11d3c1f72 100644 --- a/packages/rocketchat-i18n/i18n/pt.i18n.json +++ b/packages/rocketchat-i18n/i18n/pt.i18n.json @@ -432,6 +432,7 @@ "Content": "Conteúdo", "Conversation": "Conversa", "Conversation_closed": "Chat encerrado: __comment__.", + "Conversation_finished_message": "Mensagem ao encerrar chat", "Convert_Ascii_Emojis": "Converter ASCII para Emoji", "Copied": "Copiado", "Copy": "Cópia", diff --git a/packages/rocketchat-livechat/.app/client/lib/_livechat.js b/packages/rocketchat-livechat/.app/client/lib/_livechat.js index c0185a16b436..781f500bc643 100644 --- a/packages/rocketchat-livechat/.app/client/lib/_livechat.js +++ b/packages/rocketchat-livechat/.app/client/lib/_livechat.js @@ -22,6 +22,7 @@ this.Livechat = new (class Livechat { this._offlineSuccessMessage = new ReactiveVar(TAPi18n.__('Thanks_We_ll_get_back_to_you_soon')); this._videoCall = new ReactiveVar(false); this._transcriptMessage = new ReactiveVar(''); + this._conversationFinishedMessage = new ReactiveVar(''); this._connecting = new ReactiveVar(false); this._room = new ReactiveVar(null); this._department = new ReactiveVar(null); @@ -100,6 +101,9 @@ this.Livechat = new (class Livechat { get transcriptMessage() { return this._transcriptMessage.get(); } + get conversationFinishedMessage() { + return this._conversationFinishedMessage.get(); + } get department() { return this._department.get(); } @@ -161,6 +165,9 @@ this.Livechat = new (class Livechat { set transcriptMessage(value) { this._transcriptMessage.set(value); } + set conversationFinishedMessage(value) { + this._conversationFinishedMessage.set(value); + } set connecting(value) { this._connecting.set(value); } diff --git a/packages/rocketchat-livechat/.app/client/lib/commands.js b/packages/rocketchat-livechat/.app/client/lib/commands.js index bcb7eac20125..34631ba9e52d 100644 --- a/packages/rocketchat-livechat/.app/client/lib/commands.js +++ b/packages/rocketchat-livechat/.app/client/lib/commands.js @@ -55,13 +55,6 @@ this.Commands = { } } }); - } else { - swal({ - title: t('Chat_ended'), - type: 'success', - timer: 1000, - showConfirmButton: false - }); } }, diff --git a/packages/rocketchat-livechat/.app/client/views/livechatWindow.js b/packages/rocketchat-livechat/.app/client/views/livechatWindow.js index c0fdf8f2d18f..3116100f6e50 100644 --- a/packages/rocketchat-livechat/.app/client/views/livechatWindow.js +++ b/packages/rocketchat-livechat/.app/client/views/livechatWindow.js @@ -111,6 +111,7 @@ Template.livechatWindow.onCreated(function() { Livechat.online = true; Livechat.transcript = result.transcript; Livechat.transcriptMessage = result.transcriptMessage; + Livechat.conversationFinishedMessage = result.conversationFinishedMessage; } Livechat.videoCall = result.videoCall; Livechat.registrationForm = result.registrationForm; diff --git a/packages/rocketchat-livechat/.app/client/views/message.js b/packages/rocketchat-livechat/.app/client/views/message.js index 9dc31af875b1..dac45da7a1f3 100644 --- a/packages/rocketchat-livechat/.app/client/views/message.js +++ b/packages/rocketchat-livechat/.app/client/views/message.js @@ -40,7 +40,7 @@ Template.message.helpers({ case 'wm': return t('Welcome', { user: this.u.username }); case 'livechat-close': - return t('Conversation_finished'); + return (Livechat.conversationFinishedMessage) ? Livechat.conversationFinishedMessage : t('Conversation_finished'); // case 'rtc': return RocketChat.callbacks.run('renderRtcMessage', this); default: this.html = this.msg; diff --git a/packages/rocketchat-livechat/client/views/app/livechatAppearance.html b/packages/rocketchat-livechat/client/views/app/livechatAppearance.html index 03fdaf1731f7..a21c01511d7f 100644 --- a/packages/rocketchat-livechat/client/views/app/livechatAppearance.html +++ b/packages/rocketchat-livechat/client/views/app/livechatAppearance.html @@ -66,6 +66,13 @@

{{_ "Settings"}}

+
+ {{_ "Conversation_finished"}} +
+ + +
+
diff --git a/packages/rocketchat-livechat/client/views/app/livechatAppearance.js b/packages/rocketchat-livechat/client/views/app/livechatAppearance.js index 89d4fb89a1ee..d056e9855042 100644 --- a/packages/rocketchat-livechat/client/views/app/livechatAppearance.js +++ b/packages/rocketchat-livechat/client/views/app/livechatAppearance.js @@ -79,6 +79,9 @@ Template.livechatAppearance.helpers({ emailOffline() { return Template.instance().offlineEmail.get(); }, + conversationFinishedMessage() { + return Template.instance().conversationFinishedMessage.get(); + }, sampleColor() { if (Template.instance().previewState.get().indexOf('offline') !== -1) { return Template.instance().colorOffline.get(); @@ -177,6 +180,7 @@ Template.livechatAppearance.onCreated(function() { this.titleOffline = new ReactiveVar(null); this.colorOffline = new ReactiveVar(null); this.offlineEmail = new ReactiveVar(null); + this.conversationFinishedMessage = new ReactiveVar(null); this.autorun(() => { const setting = LivechatAppearance.findOne('Livechat_title'); @@ -218,6 +222,10 @@ Template.livechatAppearance.onCreated(function() { const setting = LivechatAppearance.findOne('Livechat_offline_email'); this.offlineEmail.set(setting && setting.value); }); + this.autorun(() => { + const setting = LivechatAppearance.findOne('Livechat_conversation_finished_message'); + this.conversationFinishedMessage.set(setting && setting.value); + }); }); Template.livechatAppearance.events({ @@ -260,6 +268,9 @@ Template.livechatAppearance.events({ const settingOfflineTitleColor = LivechatAppearance.findOne('Livechat_offline_title_color'); instance.colorOffline.set(settingOfflineTitleColor && settingOfflineTitleColor.value); + + const settingConversationFinishedMessage = LivechatAppearance.findOne('Livechat_conversation_finished_message'); + instance.conversationFinishedMessage.set(settingConversationFinishedMessage && settingConversationFinishedMessage.value); }, 'submit .rocket-form'(e, instance) { e.preventDefault(); @@ -304,6 +315,10 @@ Template.livechatAppearance.events({ { _id: 'Livechat_offline_email', value: instance.$('#emailOffline').val() + }, + { + _id: 'Livechat_conversation_finished_message', + value: s.trim(instance.conversationFinishedMessage.get()) } ]; diff --git a/packages/rocketchat-livechat/config.js b/packages/rocketchat-livechat/config.js index e546f997c677..a8cbae7fa182 100644 --- a/packages/rocketchat-livechat/config.js +++ b/packages/rocketchat-livechat/config.js @@ -69,6 +69,14 @@ Meteor.startup(function() { RocketChat.settings.add('Livechat_registration_form', true, { type: 'boolean', group: 'Livechat', public: true, i18nLabel: 'Show_preregistration_form' }); RocketChat.settings.add('Livechat_allow_switching_departments', true, { type: 'boolean', group: 'Livechat', public: true, i18nLabel: 'Allow_switching_departments' }); RocketChat.settings.add('Livechat_show_agent_email', true, { type: 'boolean', group: 'Livechat', public: true, i18nLabel: 'Show_agent_email' }); + + RocketChat.settings.add('Livechat_conversation_finished_message', '', { + type: 'string', + group: 'Livechat', + public: true, + i18nLabel: 'Conversation_finished_message' + }); + RocketChat.settings.add('Livechat_guest_count', 1, { type: 'int', group: 'Livechat' }); RocketChat.settings.add('Livechat_Room_Count', 1, { diff --git a/packages/rocketchat-livechat/server/lib/Livechat.js b/packages/rocketchat-livechat/server/lib/Livechat.js index b614a7096bba..7ef7354ea383 100644 --- a/packages/rocketchat-livechat/server/lib/Livechat.js +++ b/packages/rocketchat-livechat/server/lib/Livechat.js @@ -275,7 +275,8 @@ RocketChat.Livechat = { 'Jitsi_Enabled', 'Language', 'Livechat_enable_transcript', - 'Livechat_transcript_message' + 'Livechat_transcript_message', + 'Livechat_conversation_finished_message' ]).forEach((setting) => { settings[setting._id] = setting.value; }); diff --git a/packages/rocketchat-livechat/server/methods/getInitialData.js b/packages/rocketchat-livechat/server/methods/getInitialData.js index bca2a9787764..01415950fc73 100644 --- a/packages/rocketchat-livechat/server/methods/getInitialData.js +++ b/packages/rocketchat-livechat/server/methods/getInitialData.js @@ -20,7 +20,8 @@ Meteor.methods({ offlineSuccessMessage: null, offlineUnavailableMessage: null, displayOfflineForm: null, - videoCall: null + videoCall: null, + conversationFinishedMessage: null }; const room = RocketChat.models.Rooms.findOpenByVisitorToken(visitorToken, { @@ -67,6 +68,7 @@ Meteor.methods({ info.videoCall = initSettings.Livechat_videocall_enabled === true && initSettings.Jitsi_Enabled === true; info.transcript = initSettings.Livechat_enable_transcript; info.transcriptMessage = initSettings.Livechat_transcript_message; + info.conversationFinishedMessage = initSettings.Livechat_conversation_finished_message; info.agentData = room && room[0] && room[0].servedBy && RocketChat.models.Users.getAgentInfo(room[0].servedBy._id); diff --git a/packages/rocketchat-livechat/server/methods/saveAppearance.js b/packages/rocketchat-livechat/server/methods/saveAppearance.js index 69fc5287f38d..a9aa4cccf98a 100644 --- a/packages/rocketchat-livechat/server/methods/saveAppearance.js +++ b/packages/rocketchat-livechat/server/methods/saveAppearance.js @@ -14,7 +14,8 @@ Meteor.methods({ 'Livechat_offline_success_message', 'Livechat_offline_title', 'Livechat_offline_title_color', - 'Livechat_offline_email' + 'Livechat_offline_email', + 'Livechat_conversation_finished_message' ]; const valid = settings.every((setting) => { diff --git a/packages/rocketchat-livechat/server/publications/livechatAppearance.js b/packages/rocketchat-livechat/server/publications/livechatAppearance.js index abb3aee63b37..db0a1788d0ba 100644 --- a/packages/rocketchat-livechat/server/publications/livechatAppearance.js +++ b/packages/rocketchat-livechat/server/publications/livechatAppearance.js @@ -19,7 +19,8 @@ Meteor.publish('livechat:appearance', function() { 'Livechat_offline_success_message', 'Livechat_offline_title', 'Livechat_offline_title_color', - 'Livechat_offline_email' + 'Livechat_offline_email', + 'Livechat_conversation_finished_message' ] } };