modal action impr

This commit is contained in:
Yuri Kuznetsov
2023-11-07 13:53:31 +02:00
parent d133295a3d
commit 058837e215
5 changed files with 65 additions and 36 deletions
@@ -26,6 +26,16 @@
]
}
},
"modalDetailActionList": [
{
"name": "complete",
"label": "Complete",
"acl": "edit",
"handler": "crm:handlers/task/detail-actions",
"actionFunction": "complete",
"checkVisibilityFunction": "isCompleteAvailable"
}
],
"dynamicLogic": {
"fields": {
"dateCompleted": {
@@ -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;
+1 -1
View File
@@ -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'));
});
}
@@ -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({});
});
+2
View File
@@ -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,
});
});