From 7a0d59357c6212fd095ae5fecdf452dfd85add98 Mon Sep 17 00:00:00 2001 From: Yuri Kuznetsov Date: Tue, 13 Sep 2022 14:16:55 +0300 Subject: [PATCH] panel hide/show concurrency issue fix --- client/src/views/record/detail.js | 4 ++-- client/src/views/record/panels-container.js | 20 ++++++++++++++++++ client/src/views/record/panels/bottom.js | 23 +++++++++++++++++++++ client/src/views/record/panels/side.js | 23 +++++++++++++++++++++ 4 files changed, 68 insertions(+), 2 deletions(-) diff --git a/client/src/views/record/detail.js b/client/src/views/record/detail.js index 69caecfdcf..f950a974c1 100644 --- a/client/src/views/record/detail.js +++ b/client/src/views/record/detail.js @@ -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) { diff --git a/client/src/views/record/panels-container.js b/client/src/views/record/panels-container.js index f2d2468d01..c29eec50d6 100644 --- a/client/src/views/record/panels-container.js +++ b/client/src/views/record/panels-container.js @@ -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'); + } + }); }, /** diff --git a/client/src/views/record/panels/bottom.js b/client/src/views/record/panels/bottom.js index 970c8ef31c..1885dab72a 100644 --- a/client/src/views/record/panels/bottom.js +++ b/client/src/views/record/panels/bottom.js @@ -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; + }, }); }); diff --git a/client/src/views/record/panels/side.js b/client/src/views/record/panels/side.js index 781004ffa8..e6d8dc0806 100644 --- a/client/src/views/record/panels/side.js +++ b/client/src/views/record/panels/side.js @@ -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; + }, }); });