From 3b2ae9b23d0591be7b119bfbc9c28cbf5693bbb1 Mon Sep 17 00:00:00 2001 From: Manuel Trezza <5673677+mtrezza@users.noreply.github.com> Date: Wed, 3 Dec 2025 16:34:29 +0100 Subject: [PATCH 1/3] fix --- .../Data/Browser/DataBrowser.react.js | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/dashboard/Data/Browser/DataBrowser.react.js b/src/dashboard/Data/Browser/DataBrowser.react.js index e5b3d3f31..63f1d9f19 100644 --- a/src/dashboard/Data/Browser/DataBrowser.react.js +++ b/src/dashboard/Data/Browser/DataBrowser.react.js @@ -297,6 +297,26 @@ export default class DataBrowser extends React.Component { }); } + // Clear panels when data reloads (e.g., after script execution, refresh, filter change) + if ( + this.props.data !== null && + prevProps.data !== null && + this.props.data !== prevProps.data && + this.state.isPanelVisible && + (this.state.selectedObjectId !== undefined || this.state.displayedObjectIds.length > 0) + ) { + // Clear panel data and selection to show "No object selected" + this.props.setAggregationPanelData({}); + this.props.setLoadingInfoPanel(false); + this.setState({ + selectedObjectId: undefined, + showAggregatedData: true, // Keep true to show "No object selected" message + multiPanelData: {}, + displayedObjectIds: [], + prefetchCache: {}, // Also clear the cache since data has changed + }); + } + if ( this.state.current === null && this.state.selectedObjectId !== undefined && From 80a8335a53c653fccab818a0746024bfd4df64c3 Mon Sep 17 00:00:00 2001 From: Manuel Trezza <5673677+mtrezza@users.noreply.github.com> Date: Wed, 3 Dec 2025 16:36:45 +0100 Subject: [PATCH 2/3] fix cache clearing --- src/dashboard/Data/Browser/DataBrowser.react.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/dashboard/Data/Browser/DataBrowser.react.js b/src/dashboard/Data/Browser/DataBrowser.react.js index 63f1d9f19..677cd8f82 100644 --- a/src/dashboard/Data/Browser/DataBrowser.react.js +++ b/src/dashboard/Data/Browser/DataBrowser.react.js @@ -275,7 +275,8 @@ export default class DataBrowser extends React.Component { selectedObjectId: undefined, showAggregatedData: true, // Keep true to show "No object selected" message multiPanelData: {}, - displayedObjectIds: [] + displayedObjectIds: [], + prefetchCache: {}, // Clear cache when switching classes to prevent memory leak }); } @@ -293,7 +294,8 @@ export default class DataBrowser extends React.Component { selectedObjectId: undefined, showAggregatedData: true, // Keep true to show "No object selected" message multiPanelData: {}, - displayedObjectIds: [] + displayedObjectIds: [], + prefetchCache: {}, // Clear cache to prevent memory leak }); } From 3758a7b7acda4140ebb733361cc36c0af4056dc3 Mon Sep 17 00:00:00 2001 From: Manuel Trezza <5673677+mtrezza@users.noreply.github.com> Date: Wed, 3 Dec 2025 16:43:09 +0100 Subject: [PATCH 3/3] refactor --- .../Data/Browser/DataBrowser.react.js | 53 ++++--------------- 1 file changed, 10 insertions(+), 43 deletions(-) diff --git a/src/dashboard/Data/Browser/DataBrowser.react.js b/src/dashboard/Data/Browser/DataBrowser.react.js index 677cd8f82..b06c4057a 100644 --- a/src/dashboard/Data/Browser/DataBrowser.react.js +++ b/src/dashboard/Data/Browser/DataBrowser.react.js @@ -263,30 +263,17 @@ export default class DataBrowser extends React.Component { } componentDidUpdate(prevProps, prevState) { - // Clear panels immediately when className changes - if ( - this.props.className !== prevProps.className && - this.state.isPanelVisible - ) { - // Clear panel data and selection to show "No object selected" - this.props.setAggregationPanelData({}); - this.props.setLoadingInfoPanel(false); - this.setState({ - selectedObjectId: undefined, - showAggregatedData: true, // Keep true to show "No object selected" message - multiPanelData: {}, - displayedObjectIds: [], - prefetchCache: {}, // Clear cache when switching classes to prevent memory leak - }); - } + // Clear panels when className changes, data becomes null, or data reloads + const shouldClearPanels = this.state.isPanelVisible && ( + // Class changed + this.props.className !== prevProps.className || + // Data became null (filter change, loading state) + (this.props.data === null && prevProps.data !== null) || + // Data reloaded (script execution, refresh) + (this.props.data !== null && prevProps.data !== null && this.props.data !== prevProps.data) + ); - // Clear panels when data becomes null (filter change, class change, etc.) - if ( - this.props.data === null && - prevProps.data !== null && - this.state.isPanelVisible && - this.state.selectedObjectId !== undefined - ) { + if (shouldClearPanels) { // Clear panel data and selection to show "No object selected" this.props.setAggregationPanelData({}); this.props.setLoadingInfoPanel(false); @@ -299,26 +286,6 @@ export default class DataBrowser extends React.Component { }); } - // Clear panels when data reloads (e.g., after script execution, refresh, filter change) - if ( - this.props.data !== null && - prevProps.data !== null && - this.props.data !== prevProps.data && - this.state.isPanelVisible && - (this.state.selectedObjectId !== undefined || this.state.displayedObjectIds.length > 0) - ) { - // Clear panel data and selection to show "No object selected" - this.props.setAggregationPanelData({}); - this.props.setLoadingInfoPanel(false); - this.setState({ - selectedObjectId: undefined, - showAggregatedData: true, // Keep true to show "No object selected" message - multiPanelData: {}, - displayedObjectIds: [], - prefetchCache: {}, // Also clear the cache since data has changed - }); - } - if ( this.state.current === null && this.state.selectedObjectId !== undefined &&