From a547b85ef28dd00f1c639a3117e9b081da96c7ef Mon Sep 17 00:00:00 2001 From: alex <48489896+devnaumov@users.noreply.github.com> Date: Wed, 20 Aug 2025 10:43:51 +0200 Subject: [PATCH] dbeaver/pro#6598 open panel on tab select (#3662) Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com> --- webapp/packages/core-app/src/AppScreen/Main.tsx | 13 ++++++++++++- .../core-ui/src/SideBarPanel/SideBarPanel.tsx | 3 +-- .../core-ui/src/Tabs/TabsContainer/TabsContainer.ts | 4 ++++ 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/webapp/packages/core-app/src/AppScreen/Main.tsx b/webapp/packages/core-app/src/AppScreen/Main.tsx index 9b2a73fbb5..1d0c530c1f 100644 --- a/webapp/packages/core-app/src/AppScreen/Main.tsx +++ b/webapp/packages/core-app/src/AppScreen/Main.tsx @@ -7,7 +7,7 @@ */ import { observer } from 'mobx-react-lite'; -import { getComputed, Loader, Pane, ResizerControls, s, Split, useS, useSplitUserState } from '@cloudbeaver/core-blocks'; +import { getComputed, Loader, Pane, ResizerControls, s, Split, useExecutor, useS, useSplitUserState } from '@cloudbeaver/core-blocks'; import { useService } from '@cloudbeaver/core-di'; import { LeftBarPanelService, SideBarPanel, SideBarPanelService } from '@cloudbeaver/core-ui'; @@ -25,6 +25,17 @@ export const Main = observer(function Main() { const sideBarDisabled = getComputed(() => sideBarPanelService.tabsContainer.getDisplayed().length === 0); const leftBarDisabled = getComputed(() => leftBarPanelService.tabsContainer.getDisplayed().length === 0); + useExecutor({ + executor: sideBarPanelService.tabsContainer.onTabSelect, + handlers: [ + function showPanel() { + if (splitRightState.mode === 'minimize' && !sideBarDisabled) { + splitRightState.onModeChange?.('resize'); + } + }, + ], + }); + return (
diff --git a/webapp/packages/core-ui/src/SideBarPanel/SideBarPanel.tsx b/webapp/packages/core-ui/src/SideBarPanel/SideBarPanel.tsx index e85440821a..d44dc9fbf3 100644 --- a/webapp/packages/core-ui/src/SideBarPanel/SideBarPanel.tsx +++ b/webapp/packages/core-ui/src/SideBarPanel/SideBarPanel.tsx @@ -42,10 +42,9 @@ const sideBarPanelRegistry: StyleRegistry = [ export const SideBarPanel = observer(function SideBarPanel({ container }) { const style = useS(styles); - return ( - + container.select(tab.tabId, tab.props)}>
diff --git a/webapp/packages/core-ui/src/Tabs/TabsContainer/TabsContainer.ts b/webapp/packages/core-ui/src/Tabs/TabsContainer/TabsContainer.ts index ba2b03c6d8..d74ac35a1f 100644 --- a/webapp/packages/core-ui/src/Tabs/TabsContainer/TabsContainer.ts +++ b/webapp/packages/core-ui/src/Tabs/TabsContainer/TabsContainer.ts @@ -8,12 +8,14 @@ import { makeObservable, observable } from 'mobx'; import type { MetadataMap, MetadataValueGetter, schema } from '@cloudbeaver/core-utils'; +import { SyncExecutor } from '@cloudbeaver/core-executor'; import type { ITabInfo, ITabInfoOptions, ITabsContainer } from './ITabsContainer.js'; export class TabsContainer | unknown = unknown> implements ITabsContainer { readonly areaLabel: string; readonly tabInfoMap: Map>; + readonly onTabSelect: SyncExecutor; get tabInfoList(): Array> { return Array.from(this.tabInfoMap.values()).sort((a, b) => a.order - b.order); @@ -29,6 +31,7 @@ export class TabsContainer | this.tabInfoMap = new Map(); this.currentTabId = null; this.areaLabel = areaLabel; + this.onTabSelect = new SyncExecutor(); makeObservable, 'currentTabId'>(this, { tabInfoMap: observable.shallow, @@ -58,6 +61,7 @@ export class TabsContainer | }); this.currentTabId = tabId; + this.onTabSelect.execute(tabId); } getTabInfo(tabId: string): ITabInfo | undefined {