Files
cloudbeaver/webapp/packages/plugin-sql-editor/src/SqlEditor.tsx
T
acc3e42f1c dbeaver/pro#8352 do not unlink connection (#4278)
* dbeaver/pro#8352 do not unlink connection

* dbeaver/pro#8352 simplify logic

* dbeaver/pro#8352 add connection bar

* dbeaver/pro#8352 revert opened state

* dbeaver/pro#8352 do not fetch hints if not connected

* dbeaver/pro#8352 fix build

* dbeaver/pro#8352 move database icon to core package

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2026-04-22 12:32:58 +02:00

61 lines
2.3 KiB
TypeScript

/*
* CloudBeaver - Cloud Database Manager
* Copyright (C) 2020-2026 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/
import { observer } from 'mobx-react-lite';
import { Loader, Pane, ResizerControls, s, Split, useS, useSplitUserState } from '@cloudbeaver/core-blocks';
import { useService } from '@cloudbeaver/core-di';
import { CaptureView } from '@cloudbeaver/core-view';
import type { ISqlEditorTabState } from './ISqlEditorTabState.js';
import { SqlDataSourceService } from './SqlDataSource/SqlDataSourceService.js';
import style from './SqlEditor.module.css';
import { SqlEditorLoader } from './SqlEditor/SqlEditorLoader.js';
import { SqlEditorOpenOverlay } from './SqlEditorOpenOverlay.js';
import { SqlEditorStatusBar } from './SqlEditorStatusBar.js';
import { SqlEditorView } from './SqlEditorView.js';
import { SqlResultTabs } from './SqlResultTabs/SqlResultTabs.js';
import { useDataSource } from './useDataSource.js';
import { SqlEditorConnectionBar } from './SqlEditorConnectionBar.js';
export interface SqlEditorProps {
state: ISqlEditorTabState;
}
export const SqlEditor = observer<SqlEditorProps>(function SqlEditor({ state }) {
const styles = useS(style);
const sqlEditorView = useService(SqlEditorView);
const sqlDataSourceService = useService(SqlDataSourceService);
const dataSource = sqlDataSourceService.get(state.editorId);
useDataSource(dataSource);
const splitState = useSplitUserState(`sql-editor-${dataSource?.sourceKey ?? 'default'}`);
const opened = dataSource?.isOpened() || false;
return (
<Loader suspense>
<CaptureView className={s(styles, { captureView: true })} view={sqlEditorView}>
{opened && <SqlEditorConnectionBar state={state} />}
<Split {...splitState} split="horizontal" sticky={30}>
<Pane className={s(styles, { pane: true })} basis="50%" main>
<SqlEditorLoader state={state} />
</Pane>
<ResizerControls />
<Pane className={s(styles, { pane: true })}>
<Loader suspense>
<SqlResultTabs state={state} />
</Loader>
</Pane>
</Split>
{!opened && <SqlEditorOpenOverlay dataSource={dataSource} />}
<SqlEditorStatusBar dataSource={dataSource} />
</CaptureView>
</Loader>
);
});