From 058837e215c949b945cb87a042e75a79de719b2d Mon Sep 17 00:00:00 2001 From: Yuri Kuznetsov Date: Tue, 7 Nov 2023 13:53:31 +0200 Subject: [PATCH] modal action impr --- .../Resources/metadata/clientDefs/Task.json | 10 ++++ .../crm/src/handlers/task/detail-actions.js | 51 +++++++++++++++++++ client/modules/crm/src/handlers/task/menu.js | 2 +- .../crm/src/views/task/modals/detail.js | 36 +------------ client/src/views/modal.js | 2 + 5 files changed, 65 insertions(+), 36 deletions(-) create mode 100644 client/modules/crm/src/handlers/task/detail-actions.js diff --git a/application/Espo/Modules/Crm/Resources/metadata/clientDefs/Task.json b/application/Espo/Modules/Crm/Resources/metadata/clientDefs/Task.json index 69a0042b25..5423adb5c1 100644 --- a/application/Espo/Modules/Crm/Resources/metadata/clientDefs/Task.json +++ b/application/Espo/Modules/Crm/Resources/metadata/clientDefs/Task.json @@ -26,6 +26,16 @@ ] } }, + "modalDetailActionList": [ + { + "name": "complete", + "label": "Complete", + "acl": "edit", + "handler": "crm:handlers/task/detail-actions", + "actionFunction": "complete", + "checkVisibilityFunction": "isCompleteAvailable" + } + ], "dynamicLogic": { "fields": { "dateCompleted": { diff --git a/client/modules/crm/src/handlers/task/detail-actions.js b/client/modules/crm/src/handlers/task/detail-actions.js new file mode 100644 index 0000000000..1f2d1edd6d --- /dev/null +++ b/client/modules/crm/src/handlers/task/detail-actions.js @@ -0,0 +1,51 @@ +/************************************************************************ + * This file is part of EspoCRM. + * + * EspoCRM - Open Source CRM application. + * Copyright (C) 2014-2023 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko + * Website: https://www.espocrm.com + * + * EspoCRM is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * EspoCRM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with EspoCRM. If not, see http://www.gnu.org/licenses/. + * + * The interactive user interfaces in modified source and object code versions + * of this program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU General Public License version 3. + * + * In accordance with Section 7(b) of the GNU General Public License version 3, + * these Appropriate Legal Notices must retain the display of the "EspoCRM" word. + ************************************************************************/ + +import ActionHandler from 'action-handler'; + +class DetailActions extends ActionHandler { + + complete() { + const model = this.view.model; + + model + .save({status: 'Completed'}, {patch: true}) + .then(() => { + Espo.Ui.success(this.view.getLanguage().translateOption('Completed', 'status', 'Task')); + }); + } + + // noinspection JSUnusedGlobalSymbols + isCompleteAvailable() { + const status = this.view.model.get('status'); + + return !['Completed', 'Canceled'].includes(status); + } +} + +export default DetailActions; diff --git a/client/modules/crm/src/handlers/task/menu.js b/client/modules/crm/src/handlers/task/menu.js index dd5fcf024b..4bbc92ca18 100644 --- a/client/modules/crm/src/handlers/task/menu.js +++ b/client/modules/crm/src/handlers/task/menu.js @@ -36,7 +36,7 @@ class TaskMenuHandler extends ActionHandler { model .save({status: 'Completed'}, {patch: true}) .then(() => { - Espo.Ui.success(this.view.translate('Saved')); + Espo.Ui.success(this.view.getLanguage().translateOption('Completed', 'status', 'Task')); }); } diff --git a/client/modules/crm/src/views/task/modals/detail.js b/client/modules/crm/src/views/task/modals/detail.js index e400460f3e..816c88e470 100644 --- a/client/modules/crm/src/views/task/modals/detail.js +++ b/client/modules/crm/src/views/task/modals/detail.js @@ -28,39 +28,5 @@ define('crm:views/task/modals/detail', ['views/modals/detail'], function (Dep) { - return Dep.extend({ - - setupRecordButtons: function () { - this.addDropdownItem({ - name: 'setCompleted', - label: 'Complete', - }, true); - - Dep.prototype.setupRecordButtons.call(this); - }, - - controlRecordButtonsVisibility: function () { - if ( - !~['Completed', 'Canceled'].indexOf(this.model.get('status')) && - this.getAcl().check(this.model, 'edit') - ) { - this.showActionItem('setCompleted'); - } else { - this.hideActionItem('setCompleted'); - } - - Dep.prototype.controlRecordButtonsVisibility.call(this); - }, - - actionSetCompleted: function () { - this.model - .save({status: 'Completed'}, {patch: true}) - .then(() => { - this.hideActionItem('setCompleted'); - Espo.Ui.success(this.getLanguage().translateOption('Completed', 'status', 'Task')); - - this.trigger('after:save', this.model); - }) - } - }); + return Dep.extend({}); }); diff --git a/client/src/views/modal.js b/client/src/views/modal.js index a6d4bf5541..ba465d6625 100644 --- a/client/src/views/modal.js +++ b/client/src/views/modal.js @@ -512,11 +512,13 @@ class ModalView extends View { } o.onClick = o.onClick || ((d, e) => { + // noinspection ES6ConvertLetToConst let handler = o.handler || (o.data || {}).handler; Espo.Utils.handleAction(this, e.originalEvent, e.currentTarget, { action: o.name, handler: handler, + actionFunction: o.actionFunction, }); });