fix: globe clickable after tab switch — deferred init with ResizeObserver
Globe.gl needs non-zero container dimensions for initialization and click handling. With the tab persistence fix (display:none for hidden tabs), the globe container starts at 0×0 when radio isn't the first tab. Added a separate ResizeObserver that detects when the container becomes visible and triggers globe initialization via containerVisible state dependency. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
056024d753
commit
7786d02f86
2 changed files with 52 additions and 7 deletions
|
|
@ -123,15 +123,20 @@ export default function App() {
|
|||
<p>Plugins werden im Server konfiguriert.</p>
|
||||
</div>
|
||||
) : (
|
||||
/* Render ALL tabs, hide inactive ones with CSS to preserve state */
|
||||
/* Render ALL tabs, hide inactive ones to preserve state.
|
||||
Active tab gets full dimensions; hidden tabs stay in DOM but invisible. */
|
||||
plugins.map(p => {
|
||||
const Comp = tabComponents[p.name];
|
||||
if (!Comp) return null;
|
||||
const isActive = activeTab === p.name;
|
||||
return (
|
||||
<div
|
||||
key={p.name}
|
||||
className="hub-tab-panel"
|
||||
style={{ display: activeTab === p.name ? 'contents' : 'none' }}
|
||||
className={`hub-tab-panel ${isActive ? 'active' : ''}`}
|
||||
style={isActive
|
||||
? { display: 'flex', flexDirection: 'column', width: '100%', height: '100%' }
|
||||
: { display: 'none' }
|
||||
}
|
||||
>
|
||||
<Comp data={pluginData[p.name] || {}} />
|
||||
</div>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue