panel hide/show concurrency issue fix

This commit is contained in:
Yuri Kuznetsov
2022-09-13 14:16:55 +03:00
parent adbb46d02c
commit 7a0d59357c
4 changed files with 68 additions and 2 deletions
+2 -2
View File
@@ -1168,7 +1168,7 @@ function (Dep, ViewRecordHelper, ActionItemSetup) {
}
}
else if (this.bottomView) {
this.once('after:render', () => {
this.once('ready', () => {
var bottomView = this.getView('bottom');
if (bottomView && 'showPanel' in bottomView) {
@@ -1185,7 +1185,7 @@ function (Dep, ViewRecordHelper, ActionItemSetup) {
}
}
else if (this.sideView) {
this.once('after:render', () => {
this.once('ready', () => {
var sideView = this.getView('side');
if (sideView && 'hidePanel' in sideView) {
@@ -749,6 +749,26 @@ define('views/record/panels-container', ['view'], function (Dep) {
this.$el.find(`.panel[data-tab="${tab}"]`).removeClass('tab-hidden');
this.adjustPanels();
this.panelList
.filter(item => item.tabNumber === tab && item.name)
.forEach(item => {
let view = this.getView(item.name);
if (view) {
view.trigger('tab-show');
}
});
this.panelList
.filter(item => item.tabNumber !== tab && item.name)
.forEach(item => {
let view = this.getView(item.name);
if (view) {
view.trigger('tab-hide');
}
});
},
/**
+23
View File
@@ -344,5 +344,28 @@ define('views/record/panels/bottom', ['view'], function (Dep) {
this.createView(viewKey, viewName, o);
},
/**
* Is tab-hidden.
*
* @return {boolean}
*/
isTabHidden: function () {
if (this.defs.tabNumber === -1 || typeof this.defs.tabNumber === 'undefined') {
return false;
}
let parentView = this.getParentView();
if (!parentView) {
return this.defs.tabNumber > 0;
}
if (parentView && parentView.hasTabs) {
return parentView.currentTab !== defs.tabNumber;
}
return false;
},
});
});
+23
View File
@@ -384,5 +384,28 @@ define('views/record/panels/side', ['view'], function (Dep) {
actionRefresh: function () {
this.model.fetch();
},
/**
* Is tab-hidden.
*
* @return {boolean}
*/
isTabHidden: function () {
if (this.defs.tabNumber === -1 || typeof this.defs.tabNumber === 'undefined') {
return false;
}
let parentView = this.getParentView();
if (!parentView) {
return this.defs.tabNumber > 0;
}
if (parentView && parentView.hasTabs) {
return parentView.currentTab !== defs.tabNumber;
}
return false;
},
});
});