[IMPROVE] Replace livechat:appearance pub to REST (#15510)

* Replace livechat:apperance pub to REST

* rename const

* rename

* set appearance after save
pull/13848/head^2
Marcos Spessatto Defendi 6 years ago committed by Renato Becker
parent 16a179a8d1
commit 95ecb65aab
  1. 148
      app/livechat/client/views/app/livechatAppearance.js
  2. 12
      app/livechat/imports/server/rest/appearance.js
  3. 1
      app/livechat/server/api.js
  4. 35
      app/livechat/server/api/lib/appearance.js
  5. 1
      app/livechat/server/publications/livechatAppearance.js
  6. 42
      tests/end-to-end/api/livechat/appearance.js

@ -1,6 +1,5 @@
/* eslint new-cap: ["error", { "newIsCapExceptions": ["jscolor"] }]*/
import { Meteor } from 'meteor/meteor';
import { Mongo } from 'meteor/mongo';
import { ReactiveVar } from 'meteor/reactive-var';
import { Template } from 'meteor/templating';
import s from 'underscore.string';
@ -8,8 +7,9 @@ import toastr from 'toastr';
import { t, handleError } from '../../../../utils';
import './livechatAppearance.html';
import { APIClient } from '../../../../utils/client';
const LivechatAppearance = new Mongo.Collection('livechatAppearance');
const getSettingFromAppearance = (instance, settingName) => instance.appearance.get() && instance.appearance.get().find((setting) => setting._id === settingName);
Template.livechatAppearance.helpers({
color() {
@ -107,9 +107,8 @@ Template.livechatAppearance.helpers({
},
});
Template.livechatAppearance.onCreated(function() {
this.subscribe('livechat:appearance');
Template.livechatAppearance.onCreated(async function() {
this.appearance = new ReactiveVar([]);
this.title = new ReactiveVar(null);
this.color = new ReactiveVar(null);
@ -129,74 +128,44 @@ Template.livechatAppearance.onCreated(function() {
this.registrationFormEmailFieldEnabled = new ReactiveVar(null);
this.registrationFormMessage = new ReactiveVar(null);
this.autorun(() => {
const setting = LivechatAppearance.findOne('Livechat_title');
this.title.set(setting && setting.value);
});
this.autorun(() => {
const setting = LivechatAppearance.findOne('Livechat_title_color');
this.color.set(setting && setting.value);
});
this.autorun(() => {
const setting = LivechatAppearance.findOne('Livechat_show_agent_info');
this.showAgentInfo.set(setting && setting.value);
});
this.autorun(() => {
const setting = LivechatAppearance.findOne('Livechat_show_agent_email');
this.showAgentEmail.set(setting && setting.value);
});
this.autorun(() => {
const setting = LivechatAppearance.findOne('Livechat_display_offline_form');
this.displayOfflineForm.set(setting && setting.value);
});
this.autorun(() => {
const setting = LivechatAppearance.findOne('Livechat_offline_form_unavailable');
this.offlineUnavailableMessage.set(setting && setting.value);
});
this.autorun(() => {
const setting = LivechatAppearance.findOne('Livechat_offline_message');
this.offlineMessage.set(setting && setting.value);
});
this.autorun(() => {
const setting = LivechatAppearance.findOne('Livechat_offline_success_message');
this.offlineSuccessMessage.set(setting && setting.value);
});
this.autorun(() => {
const setting = LivechatAppearance.findOne('Livechat_offline_title');
this.titleOffline.set(setting && setting.value);
});
this.autorun(() => {
const setting = LivechatAppearance.findOne('Livechat_offline_title_color');
this.colorOffline.set(setting && setting.value);
});
this.autorun(() => {
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);
});
this.autorun(() => {
const setting = LivechatAppearance.findOne('Livechat_conversation_finished_text');
this.conversationFinishedText.set(setting && setting.value);
});
this.autorun(() => {
const setting = LivechatAppearance.findOne('Livechat_registration_form_message');
this.registrationFormMessage.set(setting && setting.value);
});
this.autorun(() => {
const setting = LivechatAppearance.findOne('Livechat_registration_form');
this.registrationFormEnabled.set(setting && setting.value);
});
this.autorun(() => {
const setting = LivechatAppearance.findOne('Livechat_name_field_registration_form');
this.registrationFormNameFieldEnabled.set(setting && setting.value);
});
this.autorun(() => {
const setting = LivechatAppearance.findOne('Livechat_email_field_registration_form');
this.registrationFormEmailFieldEnabled.set(setting && setting.value);
});
const { appearance } = await APIClient.v1.get('livechat/appearance');
this.appearance.set(appearance);
const livechatTitle = getSettingFromAppearance(this, 'Livechat_title');
const livechatTitleColor = getSettingFromAppearance(this, 'Livechat_title_color');
const livechatShowAgentInfo = getSettingFromAppearance(this, 'Livechat_show_agent_info');
const livechatShowAgentEmail = getSettingFromAppearance(this, 'Livechat_show_agent_email');
const livechatDisplayOfflineForm = getSettingFromAppearance(this, 'Livechat_display_offline_form');
const livechatOfflineFormUnavailable = getSettingFromAppearance(this, 'Livechat_offline_form_unavailable');
const livechatOfflineMessage = getSettingFromAppearance(this, 'Livechat_offline_message');
const livechatOfflineSuccessMessage = getSettingFromAppearance(this, 'Livechat_offline_success_message');
const livechatOfflineTitle = getSettingFromAppearance(this, 'Livechat_offline_title');
const livechatOfflineTitleColor = getSettingFromAppearance(this, 'Livechat_offline_title_color');
const livechatOfflineEmail = getSettingFromAppearance(this, 'Livechat_offline_email');
const livechatConversationFinishedMessage = getSettingFromAppearance(this, 'Livechat_conversation_finished_message');
const livechatRegistrationFormMessage = getSettingFromAppearance(this, 'Livechat_registration_form_message');
const livechatRegistrationForm = getSettingFromAppearance(this, 'Livechat_registration_form');
const livechatNameFieldRegistrationForm = getSettingFromAppearance(this, 'Livechat_name_field_registration_form');
const livechatEmailFieldRegistrationForm = getSettingFromAppearance(this, 'Livechat_email_field_registration_form');
const conversationFinishedText = getSettingFromAppearance(this, 'Livechat_conversation_finished_text');
this.title.set(livechatTitle && livechatTitle.value);
this.color.set(livechatTitleColor && livechatTitleColor.value);
this.showAgentInfo.set(livechatShowAgentInfo && livechatShowAgentInfo.value);
this.showAgentEmail.set(livechatShowAgentEmail && livechatShowAgentEmail.value);
this.displayOfflineForm.set(livechatDisplayOfflineForm && livechatDisplayOfflineForm.value);
this.offlineUnavailableMessage.set(livechatOfflineFormUnavailable && livechatOfflineFormUnavailable.value);
this.offlineMessage.set(livechatOfflineMessage && livechatOfflineMessage.value);
this.offlineSuccessMessage.set(livechatOfflineSuccessMessage && livechatOfflineSuccessMessage.value);
this.titleOffline.set(livechatOfflineTitle && livechatOfflineTitle.value);
this.colorOffline.set(livechatOfflineTitleColor && livechatOfflineTitleColor.value);
this.offlineEmail.set(livechatOfflineEmail && livechatOfflineEmail.value);
this.conversationFinishedMessage.set(livechatConversationFinishedMessage && livechatConversationFinishedMessage.value);
this.registrationFormMessage.set(livechatRegistrationFormMessage && livechatRegistrationFormMessage.value);
this.registrationFormEnabled.set(livechatRegistrationForm && livechatRegistrationForm.value);
this.registrationFormNameFieldEnabled.set(livechatNameFieldRegistrationForm && livechatNameFieldRegistrationForm.value);
this.registrationFormEmailFieldEnabled.set(livechatEmailFieldRegistrationForm && livechatEmailFieldRegistrationForm.value);
this.conversationFinishedText.set(conversationFinishedText && conversationFinishedText.value);
});
Template.livechatAppearance.events({
@ -213,52 +182,52 @@ Template.livechatAppearance.events({
'click .reset-settings'(e, instance) {
e.preventDefault();
const settingTitle = LivechatAppearance.findOne('Livechat_title');
const settingTitle = getSettingFromAppearance(instance, 'Livechat_title');
instance.title.set(settingTitle && settingTitle.value);
const settingTitleColor = LivechatAppearance.findOne('Livechat_title_color');
const settingTitleColor = getSettingFromAppearance(instance, 'Livechat_title_color');
instance.color.set(settingTitleColor && settingTitleColor.value);
const settingShowAgentInfo = LivechatAppearance.findOne('Livechat_show_agent_info');
const settingShowAgentInfo = getSettingFromAppearance(instance, 'Livechat_show_agent_info');
instance.showAgentInfo.set(settingShowAgentInfo && settingShowAgentInfo.value);
const settingShowAgentEmail = LivechatAppearance.findOne('Livechat_show_agent_email');
const settingShowAgentEmail = getSettingFromAppearance(instance, 'Livechat_show_agent_email');
instance.showAgentEmail.set(settingShowAgentEmail && settingShowAgentEmail.value);
const settingDiplayOffline = LivechatAppearance.findOne('Livechat_display_offline_form');
const settingDiplayOffline = getSettingFromAppearance(instance, 'Livechat_display_offline_form');
instance.displayOfflineForm.set(settingDiplayOffline && settingDiplayOffline.value);
const settingFormUnavailable = LivechatAppearance.findOne('Livechat_offline_form_unavailable');
const settingFormUnavailable = getSettingFromAppearance(instance, 'Livechat_offline_form_unavailable');
instance.offlineUnavailableMessage.set(settingFormUnavailable && settingFormUnavailable.value);
const settingOfflineMessage = LivechatAppearance.findOne('Livechat_offline_message');
const settingOfflineMessage = getSettingFromAppearance(instance, 'Livechat_offline_message');
instance.offlineMessage.set(settingOfflineMessage && settingOfflineMessage.value);
const settingOfflineSuccess = LivechatAppearance.findOne('Livechat_offline_success_message');
const settingOfflineSuccess = getSettingFromAppearance(instance, 'Livechat_offline_success_message');
instance.offlineSuccessMessage.set(settingOfflineSuccess && settingOfflineSuccess.value);
const settingOfflineTitle = LivechatAppearance.findOne('Livechat_offline_title');
const settingOfflineTitle = getSettingFromAppearance(instance, 'Livechat_offline_title');
instance.titleOffline.set(settingOfflineTitle && settingOfflineTitle.value);
const settingOfflineTitleColor = LivechatAppearance.findOne('Livechat_offline_title_color');
const settingOfflineTitleColor = getSettingFromAppearance(instance, 'Livechat_offline_title_color');
instance.colorOffline.set(settingOfflineTitleColor && settingOfflineTitleColor.value);
const settingConversationFinishedMessage = LivechatAppearance.findOne('Livechat_conversation_finished_message');
const settingConversationFinishedMessage = getSettingFromAppearance(instance, 'Livechat_conversation_finished_message');
instance.conversationFinishedMessage.set(settingConversationFinishedMessage && settingConversationFinishedMessage.value);
const settingConversationFinishedText = LivechatAppearance.findOne('Livechat_conversation_finished_text');
const settingConversationFinishedText = getSettingFromAppearance(instance, 'Livechat_conversation_finished_text');
instance.conversationFinishedText.set(settingConversationFinishedText && settingConversationFinishedText.value);
const settingRegistrationFormEnabled = LivechatAppearance.findOne('Livechat_registration_form');
const settingRegistrationFormEnabled = getSettingFromAppearance(instance, 'Livechat_registration_form');
instance.registrationFormEnabled.set(settingRegistrationFormEnabled && settingRegistrationFormEnabled.value);
const settingRegistrationFormNameFieldEnabled = LivechatAppearance.findOne('Livechat_name_field_registration_form');
const settingRegistrationFormNameFieldEnabled = getSettingFromAppearance(instance, 'Livechat_name_field_registration_form');
instance.registrationFormNameFieldEnabled.set(settingRegistrationFormNameFieldEnabled && settingRegistrationFormNameFieldEnabled.value);
const settingRegistrationFormEmailFieldEnabled = LivechatAppearance.findOne('Livechat_email_field_registration_form');
const settingRegistrationFormEmailFieldEnabled = getSettingFromAppearance(instance, 'Livechat_email_field_registration_form');
instance.registrationFormEmailFieldEnabled.set(settingRegistrationFormEmailFieldEnabled && settingRegistrationFormEmailFieldEnabled.value);
const settingRegistrationFormMessage = LivechatAppearance.findOne('Livechat_registration_form_message');
const settingRegistrationFormMessage = getSettingFromAppearance(instance, 'Livechat_registration_form_message');
instance.registrationFormMessage.set(settingRegistrationFormMessage && settingRegistrationFormMessage.value);
},
'submit .rocket-form'(e, instance) {
@ -338,6 +307,7 @@ Template.livechatAppearance.events({
if (err) {
return handleError(err);
}
instance.appearance.set(settings);
toastr.success(t('Settings_updated'));
});
},

@ -0,0 +1,12 @@
import { API } from '../../../../api';
import { findAppearance } from '../../../server/api/lib/appearance';
API.v1.addRoute('livechat/appearance', { authRequired: true }, {
get() {
const { appearance } = Promise.await(findAppearance({ userId: this.userId }));
return API.v1.success({
appearance,
});
},
});

@ -5,4 +5,5 @@ import '../imports/server/rest/users.js';
import '../imports/server/rest/upload.js';
import '../imports/server/rest/inquiries.js';
import '../imports/server/rest/rooms.js';
import '../imports/server/rest/appearance.js';
import '../imports/server/rest/triggers.js';

@ -0,0 +1,35 @@
import { hasPermissionAsync } from '../../../../authorization/server/functions/hasPermission';
import { Settings } from '../../../../models/server/raw';
export async function findAppearance({ userId }) {
if (!await hasPermissionAsync(userId, 'view-livechat-manager')) {
throw new Error('error-not-authorized');
}
const query = {
_id: {
$in: [
'Livechat_title',
'Livechat_title_color',
'Livechat_show_agent_info',
'Livechat_show_agent_email',
'Livechat_display_offline_form',
'Livechat_offline_form_unavailable',
'Livechat_offline_message',
'Livechat_offline_success_message',
'Livechat_offline_title',
'Livechat_offline_title_color',
'Livechat_offline_email',
'Livechat_conversation_finished_message',
'Livechat_registration_form',
'Livechat_name_field_registration_form',
'Livechat_email_field_registration_form',
'Livechat_registration_form_message',
'Livechat_conversation_finished_text',
],
},
};
return {
appearance: await Settings.find(query).toArray(),
};
}

@ -4,6 +4,7 @@ import { hasPermission } from '../../../authorization';
import { Settings } from '../../../models';
Meteor.publish('livechat:appearance', function() {
console.warn('The publication "livechat:appearance" is deprecated and will be removed after version v3.0.0');
if (!this.userId) {
return this.error(new Meteor.Error('error-not-authorized', 'Not authorized', { publish: 'livechat:appearance' }));
}

@ -0,0 +1,42 @@
import { getCredentials, api, request, credentials } from '../../../data/api-data.js';
import { updatePermission, updateSetting } from '../../../data/permissions.helper';
describe('LIVECHAT - appearance', function() {
this.retries(0);
before((done) => getCredentials(done));
before((done) => {
updateSetting('Livechat_enabled', true).then(done);
});
describe('livechat/appearance', () => {
it('should return an "unauthorized error" when the user does not have the necessary permission', (done) => {
updatePermission('view-livechat-manager', []).then(() => {
request.get(api('livechat/appearance'))
.set(credentials)
.expect('Content-Type', 'application/json')
.expect(400)
.expect((res) => {
expect(res.body).to.have.property('success', false);
expect(res.body.error).to.be.equal('error-not-authorized');
})
.end(done);
});
});
it('should return an array of settings', (done) => {
updatePermission('view-livechat-manager', ['admin'])
.then(() => {
request.get(api('livechat/appearance'))
.set(credentials)
.expect('Content-Type', 'application/json')
.expect(200)
.expect((res) => {
expect(res.body).to.have.property('success', true);
expect(res.body.appearance).to.be.an('array');
})
.end(done);
});
});
});
});
Loading…
Cancel
Save