changeset a7d07e635e86 in sao:default
details: https://hg.tryton.org/sao?cmd=changeset&node=a7d07e635e86
description:
Disable toolbar buttons based on record message
In order to update the disabled property, we must store the button tag
in
Sao.Tab.buttons.
The property must be computed by taking into account if the dropdown has
children.
And the resource buttons must check against undefined record_id.
issue10410
review355431002
diffstat:
src/tab.js | 42 +++++++++++++++++++++++++++++++-----------
1 files changed, 31 insertions(+), 11 deletions(-)
diffs (112 lines):
diff -r fa7a3ebd2874 -r a7d07e635e86 src/tab.js
--- a/src/tab.js Sat Aug 21 09:09:56 2021 +0200
+++ b/src/tab.js Thu Sep 02 23:17:33 2021 +0200
@@ -525,7 +525,7 @@
['print', 'tryton-print',
Sao.i18n.gettext('Print report')]
].forEach(function(menu_action) {
- var button = jQuery('<div/>', {
+ var dropdown = jQuery('<div/>', {
'class': 'btn-group dropdown',
'role': 'group'
})
@@ -551,8 +551,9 @@
'aria-labelledby': menu_action[0]
}))
.insertBefore(toolbar.find('button#email'));
+ var button = dropdown.find('button');
buttons[menu_action[0]] = button;
- var dropdown = button
+ dropdown
.on('show.bs.dropdown', function() {
jQuery(this).parents('.btn-group').removeClass(
'hidden-xs');
@@ -560,7 +561,7 @@
jQuery(this).parents('.btn-group').addClass(
'hidden-xs');
});
- var menu = button.find('.dropdown-menu');
+ var menu = dropdown.find('.dropdown-menu');
button.click(function() {
menu.find([
'.' + menu_action[0] + '_button',
@@ -694,12 +695,18 @@
.appendTo(menu);
}.bind(this));
+ if (menu_action[0] != 'action') {
+ button._can_be_sensitive = Boolean(
+ menu.children().length);
+ }
+
if (menu_action[0] == 'print') {
if (toolbars.exports.length && toolbars.print.length) {
menu.append(jQuery('<li/>', {
'role': 'separator',
'class': 'divider',
}));
+ button._can_be_sensitive = true;
}
toolbars.exports.forEach(function(export_) {
var item = jQuery('<li/>', {
@@ -1383,7 +1390,8 @@
resources = {};
}
var record_id = this.screen.get_id();
- var disabled = record_id < 0 || record_id === null;
+ var disabled = (
+ record_id < 0 || record_id === null || record_id ===
undefined);
var update = function(name, title, text, color) {
var button = this.buttons[name];
@@ -1439,13 +1447,25 @@
if (data[0] !== 0) {
name = data[0];
}
- var buttons = ['print', 'relate', 'attach'];
+ var buttons = ['print', 'relate', 'email', 'save', 'attach'];
buttons.forEach(function(button_id){
var button = this.buttons[button_id];
- if (button) {
- var disabled = button.is(':disabled');
- button.prop('disabled', disabled || data[0] === 0);
+ var can_be_sensitive = button._can_be_sensitive;
+ if (can_be_sensitive === undefined) {
+ can_be_sensitive = true;
}
+ if ((button_id == 'print') ||
+ (button_id == 'relate') ||
+ (button_id == 'email')) {
+ can_be_sensitive |= this.screen.get_buttons().some(
+ function(button) {
+ var keyword = button.attributes.keyword ||
'action';
+ return keyword == button_id;
+ });
+ } else if (button_id == 'save') {
+ can_be_sensitive &= !this.screen.readonly;
+ }
+ button.prop('disabled', !(data[0] && can_be_sensitive));
}.bind(this));
this.buttons.switch_.prop('disabled',
this.attributes.view_ids > 1);
@@ -1467,17 +1487,17 @@
},
action: function() {
window.setTimeout(function() {
- this.buttons.action.find('button').click();
+ this.buttons.action.click();
}.bind(this));
},
relate: function() {
window.setTimeout(function() {
- this.buttons.relate.find('button').click();
+ this.buttons.relate.click();
}.bind(this));
},
print: function() {
window.setTimeout(function() {
- this.buttons.print.find('button').click();
+ this.buttons.print.click();
}.bind(this));
},
export: function(){