From fc28bee3d4aa5bb5ba6b9ec2bb53e9c85c21c4a6 Mon Sep 17 00:00:00 2001 From: Yuri Kuznetsov Date: Wed, 11 Dec 2019 10:53:34 +0200 Subject: [PATCH] email draft ui improvements --- .../Espo/Resources/i18n/en_US/Email.json | 1 + client/src/views/email-folder/list-side.js | 11 ++++++++--- client/src/views/email/list.js | 6 +++--- client/src/views/email/modals/detail.js | 18 +++++++++++++++--- client/src/views/email/record/compose.js | 12 ++++++++++-- client/src/views/email/record/list.js | 3 ++- client/src/views/modals/compose-email.js | 11 +++++++---- 7 files changed, 46 insertions(+), 16 deletions(-) diff --git a/application/Espo/Resources/i18n/en_US/Email.json b/application/Espo/Resources/i18n/en_US/Email.json index d03085c2d6..98e8ec889a 100644 --- a/application/Espo/Resources/i18n/en_US/Email.json +++ b/application/Espo/Resources/i18n/en_US/Email.json @@ -104,6 +104,7 @@ "Move to Folder": "Move to Folder", "Filters": "Filters", "Folders": "Folders", + "No Subject": "No Subject", "View Users": "View Users" }, "messages": { diff --git a/client/src/views/email-folder/list-side.js b/client/src/views/email-folder/list-side.js index fa9137e06b..e60da590f6 100644 --- a/client/src/views/email-folder/list-side.js +++ b/client/src/views/email-folder/list-side.js @@ -26,7 +26,7 @@ * these Appropriate Legal Notices must retain the display of the "EspoCRM" word. ************************************************************************/ -Espo.define('views/email-folder/list-side', 'view', function (Dep) { +define('views/email-folder/list-side', 'view', function (Dep) { return Dep.extend({ @@ -62,6 +62,7 @@ Espo.define('views/email-folder/list-side', 'view', function (Dep) { this.loadNotReadCounts(); this.listenTo(this.emailCollection, 'sync', this.loadNotReadCounts); + this.listenTo(this.emailCollection, 'folders-update', this.loadNotReadCounts); this.listenTo(this.emailCollection, 'all-marked-read', function (m) { this.countsData = this.countsData || {}; @@ -74,6 +75,11 @@ Espo.define('views/email-folder/list-side', 'view', function (Dep) { this.renderCounts(); }); + this.listenTo(this.emailCollection, 'draft-sent', function (m) { + this.decreaseNotReadCount('drafts'); + this.renderCounts(); + }); + this.listenTo(this.emailCollection, 'change:isRead', function (model) { if (this.countsIsBeingLoaded) return; this.manageCountsDataAfterModelChanged(model); @@ -190,8 +196,7 @@ Espo.define('views/email-folder/list-side', 'view', function (Dep) { } this.$el.find('li a.count[data-id="'+id+'"]').text(value); } - } + }, }); }); - diff --git a/client/src/views/email/list.js b/client/src/views/email/list.js index 6a53532b26..c2605f2dc1 100644 --- a/client/src/views/email/list.js +++ b/client/src/views/email/list.js @@ -114,8 +114,6 @@ define('views/email/list', 'views/list', function (Dep) { collection.url = 'EmailFolder/action/listAll'; collection.maxSize = 200; - collection.folderCollection = collection; - this.listenToOnce(collection, 'sync', function () { callback.call(this, collection); }, this); @@ -126,6 +124,7 @@ define('views/email/list', 'views/list', function (Dep) { loadFolders: function () { var xhr = null; this.getFolderCollection(function (collection) { + this.createView('folders', 'views/email-folder/list-side', { collection: collection, emailCollection: this.collection, @@ -142,7 +141,7 @@ define('views/email/list', 'views/list', function (Dep) { xhr.abort(); } - this.notify('Please wait...'); + this.notify(this.translate('pleaseWait', 'messages')); xhr = this.collection.fetch({ success: function () { this.notify(false); @@ -157,6 +156,7 @@ define('views/email/list', 'views/list', function (Dep) { this.updateLastUrl(); }, this); }, this); + }, this); }, diff --git a/client/src/views/email/modals/detail.js b/client/src/views/email/modals/detail.js index 419b1a391e..cd1422cf6c 100644 --- a/client/src/views/email/modals/detail.js +++ b/client/src/views/email/modals/detail.js @@ -26,7 +26,7 @@ * these Appropriate Legal Notices must retain the display of the "EspoCRM" word. ************************************************************************/ -Espo.define('views/email/modals/detail', ['views/modals/detail', 'views/email/detail'], function (Dep, Detail) { +define('views/email/modals/detail', ['views/modals/detail', 'views/email/detail'], function (Dep, Detail) { return Dep.extend({ @@ -36,8 +36,10 @@ Espo.define('views/email/modals/detail', ['views/modals/detail', 'views/email/de this.buttonList.unshift({ 'name': 'reply', 'label': 'Reply', - 'style': 'danger' + 'style': 'danger', + 'hidden': this.model.get('status') === 'Draft', }); + if (this.model) { this.listenToOnce(this.model, 'sync', function () { setTimeout(function () { @@ -48,9 +50,19 @@ Espo.define('views/email/modals/detail', ['views/modals/detail', 'views/email/de }, + controlRecordButtonsVisibility: function () { + Dep.prototype.controlRecordButtonsVisibility.call(this); + + if (this.model.get('status') === 'Draft' || !this.getAcl().check('Email', 'create')) { + this.hideButton('reply'); + } else { + this.showButton('reply'); + } + }, + actionReply: function (data, e) { Detail.prototype.actionReply.call(this, {}, e, this.getPreferences().get('emailReplyToAllByDefault')); - } + }, }); }); diff --git a/client/src/views/email/record/compose.js b/client/src/views/email/record/compose.js index 81570ed9e5..c858bf7a5a 100644 --- a/client/src/views/email/record/compose.js +++ b/client/src/views/email/record/compose.js @@ -26,7 +26,7 @@ * these Appropriate Legal Notices must retain the display of the "EspoCRM" word. ************************************************************************/ -Espo.define('views/email/record/compose', ['views/record/edit', 'views/email/record/detail'], function (Dep, Detail) { +define('views/email/record/compose', ['views/record/edit', 'views/email/record/detail'], function (Dep, Detail) { return Dep.extend({ @@ -200,6 +200,14 @@ Espo.define('views/email/record/compose', ['views/record/edit', 'views/email/rec var model = this.model; model.set('status', 'Draft'); + var subjectView = this.getFieldView('subject'); + if (subjectView) { + subjectView.fetchToModel(); + if (!model.get('name')) { + model.set('name', this.translate('No Subject', 'labels', 'Email')); + } + } + this.save(); }, @@ -222,7 +230,7 @@ Espo.define('views/email/record/compose', ['views/record/edit', 'views/email/rec html = html || ''; var value = html.replace(/\n/g, '
'); return value; - } + }, }); }); diff --git a/client/src/views/email/record/list.js b/client/src/views/email/record/list.js index 699fdf289b..d1c07001a1 100644 --- a/client/src/views/email/record/list.js +++ b/client/src/views/email/record/list.js @@ -319,7 +319,7 @@ define('views/email/record/list', 'views/record/list', function (Dep) { var model = this.collection.get(id); if (!model) return; - Espo.Ui.notify(' ... '); + Espo.Ui.notify(this.translate('Sending...', 'labels', 'Email')); model.save({ status: 'Sending', @@ -330,6 +330,7 @@ define('views/email/record/list', 'views/record/list', function (Dep) { this.removeRecordFromList(id); this.uncheckRecord(id, null, true); } + this.collection.trigger('draft-sent'); }.bind(this) ); }.bind(this) diff --git a/client/src/views/modals/compose-email.js b/client/src/views/modals/compose-email.js index ebc56f53ee..38af189ef6 100644 --- a/client/src/views/modals/compose-email.js +++ b/client/src/views/modals/compose-email.js @@ -26,7 +26,7 @@ * these Appropriate Legal Notices must retain the display of the "EspoCRM" word. ************************************************************************/ -Espo.define('views/modals/compose-email', 'views/modals/edit', function (Dep) { +define('views/modals/compose-email', 'views/modals/edit', function (Dep) { return Dep.extend({ @@ -132,7 +132,11 @@ Espo.define('views/modals/compose-email', 'views/modals/edit', function (Dep) { var afterSave = function () { this.enableButton('send'); this.enableButton('saveDraft'); - Espo.Ui.success(this.translate('savedAsDraft', 'messages', 'Email')); + Espo.Ui.success(this.translate('savedAsDraft', 'messages', 'Email')) + + this.trigger('after:save', model); + + this.$el.find('button[data-name="cancel"]').html(this.translate('Close')); }.bind(this); editView.once('after:save', afterSave , this); @@ -145,8 +149,7 @@ Espo.define('views/modals/compose-email', 'views/modals/edit', function (Dep) { }, this); editView.saveDraft(); - } + }, }); }); -