mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-26 21:25:59 +00:00
AI assistant place
This commit is contained in:
@@ -148,6 +148,7 @@
|
|||||||
'icon parent-filter-outline': 'mdi mdi-home-alert-outline',
|
'icon parent-filter-outline': 'mdi mdi-home-alert-outline',
|
||||||
'icon download': 'mdi mdi-download',
|
'icon download': 'mdi mdi-download',
|
||||||
'icon text': 'mdi mdi-text',
|
'icon text': 'mdi mdi-text',
|
||||||
|
'icon ai': 'mdi mdi-head-lightbulb',
|
||||||
|
|
||||||
'icon run': 'mdi mdi-play',
|
'icon run': 'mdi mdi-play',
|
||||||
'icon chevron-down': 'mdi mdi-chevron-down',
|
'icon chevron-down': 'mdi mdi-chevron-down',
|
||||||
|
|||||||
@@ -12,6 +12,15 @@
|
|||||||
testEnabled: () => getCurrentEditor()?.isSqlEditor(),
|
testEnabled: () => getCurrentEditor()?.isSqlEditor(),
|
||||||
onClick: () => getCurrentEditor().formatCode(),
|
onClick: () => getCurrentEditor().formatCode(),
|
||||||
});
|
});
|
||||||
|
registerCommand({
|
||||||
|
id: 'query.switchAiAssistant',
|
||||||
|
category: 'Query',
|
||||||
|
name: 'AI Assistant',
|
||||||
|
keyText: 'Shift+Alt+A',
|
||||||
|
icon: 'icon ai',
|
||||||
|
testEnabled: () => isProApp(),
|
||||||
|
onClick: () => getCurrentEditor().toggleAiAssistant(),
|
||||||
|
});
|
||||||
registerCommand({
|
registerCommand({
|
||||||
id: 'query.insertSqlJoin',
|
id: 'query.insertSqlJoin',
|
||||||
category: 'Query',
|
category: 'Query',
|
||||||
@@ -89,6 +98,8 @@
|
|||||||
import ToolStripDropDownButton from '../buttons/ToolStripDropDownButton.svelte';
|
import ToolStripDropDownButton from '../buttons/ToolStripDropDownButton.svelte';
|
||||||
import { extractQueryParameters, replaceQueryParameters } from 'dbgate-query-splitter';
|
import { extractQueryParameters, replaceQueryParameters } from 'dbgate-query-splitter';
|
||||||
import QueryParametersModal from '../modals/QueryParametersModal.svelte';
|
import QueryParametersModal from '../modals/QueryParametersModal.svelte';
|
||||||
|
import { isProApp } from '../utility/proTools';
|
||||||
|
import HorizontalSplitter from '../elements/HorizontalSplitter.svelte';
|
||||||
|
|
||||||
export let tabid;
|
export let tabid;
|
||||||
export let conid;
|
export let conid;
|
||||||
@@ -137,6 +148,7 @@
|
|||||||
let domEditor;
|
let domEditor;
|
||||||
let domToolStrip;
|
let domToolStrip;
|
||||||
let intervalId;
|
let intervalId;
|
||||||
|
let isAiAssistantVisible = false;
|
||||||
|
|
||||||
onMount(() => {
|
onMount(() => {
|
||||||
intervalId = setInterval(() => {
|
intervalId = setInterval(() => {
|
||||||
@@ -210,6 +222,10 @@
|
|||||||
visibleResultTabs = !visibleResultTabs;
|
visibleResultTabs = !visibleResultTabs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function toggleAiAssistant() {
|
||||||
|
isAiAssistantVisible = !isAiAssistantVisible;
|
||||||
|
}
|
||||||
|
|
||||||
function getParameterSplitterOptions() {
|
function getParameterSplitterOptions() {
|
||||||
if (!queryParameterStyle) {
|
if (!queryParameterStyle) {
|
||||||
return null;
|
return null;
|
||||||
@@ -401,6 +417,7 @@
|
|||||||
{ command: 'query.replace' },
|
{ command: 'query.replace' },
|
||||||
{ divider: true },
|
{ divider: true },
|
||||||
{ command: 'query.toggleVisibleResultTabs' },
|
{ command: 'query.toggleVisibleResultTabs' },
|
||||||
|
{ command: 'query.switchAiAssistant', hideDisabled: true },
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -423,73 +440,80 @@
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<ToolStripContainer bind:this={domToolStrip}>
|
<ToolStripContainer bind:this={domToolStrip}>
|
||||||
<VerticalSplitter isSplitter={visibleResultTabs}>
|
<HorizontalSplitter isSplitter={isAiAssistantVisible} initialSizeRight={300}>
|
||||||
<svelte:fragment slot="1">
|
<svelte:fragment slot="1">
|
||||||
{#if driver?.databaseEngineTypes?.includes('sql')}
|
<VerticalSplitter isSplitter={visibleResultTabs}>
|
||||||
<SqlEditor
|
<svelte:fragment slot="1">
|
||||||
engine={$connection && $connection.engine}
|
{#if driver?.databaseEngineTypes?.includes('sql')}
|
||||||
{conid}
|
<SqlEditor
|
||||||
{database}
|
engine={$connection && $connection.engine}
|
||||||
splitterOptions={driver?.getQuerySplitterOptions('editor')}
|
{conid}
|
||||||
options={{
|
{database}
|
||||||
wrap: enableWrap,
|
splitterOptions={driver?.getQuerySplitterOptions('editor')}
|
||||||
}}
|
options={{
|
||||||
value={$editorState.value || ''}
|
wrap: enableWrap,
|
||||||
menu={createMenu()}
|
}}
|
||||||
on:input={e => {
|
value={$editorState.value || ''}
|
||||||
setEditorData(e.detail);
|
menu={createMenu()}
|
||||||
if (isInitialized) {
|
on:input={e => {
|
||||||
markTabUnsaved(tabid);
|
setEditorData(e.detail);
|
||||||
}
|
if (isInitialized) {
|
||||||
errorMessages = [];
|
markTabUnsaved(tabid);
|
||||||
}}
|
}
|
||||||
on:focus={() => {
|
errorMessages = [];
|
||||||
activator.activate();
|
}}
|
||||||
domToolStrip?.activate();
|
on:focus={() => {
|
||||||
invalidateCommands();
|
activator.activate();
|
||||||
setTimeout(() => {
|
domToolStrip?.activate();
|
||||||
isInitialized = true;
|
invalidateCommands();
|
||||||
}, 100);
|
setTimeout(() => {
|
||||||
}}
|
isInitialized = true;
|
||||||
bind:this={domEditor}
|
}, 100);
|
||||||
onExecuteFragment={(sql, startLine) => executeCore(sql, startLine)}
|
}}
|
||||||
{errorMessages}
|
bind:this={domEditor}
|
||||||
/>
|
onExecuteFragment={(sql, startLine) => executeCore(sql, startLine)}
|
||||||
{:else}
|
{errorMessages}
|
||||||
<AceEditor
|
/>
|
||||||
mode={driver?.editorMode || 'sql'}
|
{:else}
|
||||||
value={$editorState.value || ''}
|
<AceEditor
|
||||||
splitterOptions={driver?.getQuerySplitterOptions('editor')}
|
mode={driver?.editorMode || 'sql'}
|
||||||
options={{
|
value={$editorState.value || ''}
|
||||||
wrap: enableWrap,
|
splitterOptions={driver?.getQuerySplitterOptions('editor')}
|
||||||
}}
|
options={{
|
||||||
menu={createMenu()}
|
wrap: enableWrap,
|
||||||
on:input={e => setEditorData(e.detail)}
|
}}
|
||||||
on:focus={() => {
|
menu={createMenu()}
|
||||||
activator.activate();
|
on:input={e => setEditorData(e.detail)}
|
||||||
domToolStrip?.activate();
|
on:focus={() => {
|
||||||
invalidateCommands();
|
activator.activate();
|
||||||
}}
|
domToolStrip?.activate();
|
||||||
bind:this={domEditor}
|
invalidateCommands();
|
||||||
/>
|
}}
|
||||||
{/if}
|
bind:this={domEditor}
|
||||||
|
/>
|
||||||
|
{/if}
|
||||||
|
</svelte:fragment>
|
||||||
|
<svelte:fragment slot="2">
|
||||||
|
<ResultTabs tabs={[{ label: 'Messages', slot: 0 }]} {sessionId} {executeNumber} bind:resultCount {driver}>
|
||||||
|
<svelte:fragment slot="0">
|
||||||
|
<SocketMessageView
|
||||||
|
eventName={sessionId ? `session-info-${sessionId}` : null}
|
||||||
|
onMessageClick={handleMesageClick}
|
||||||
|
{executeNumber}
|
||||||
|
startLine={executeStartLine}
|
||||||
|
showProcedure
|
||||||
|
showLine
|
||||||
|
onChangeErrors={handleChangeErrors}
|
||||||
|
/>
|
||||||
|
</svelte:fragment>
|
||||||
|
</ResultTabs>
|
||||||
|
</svelte:fragment>
|
||||||
|
</VerticalSplitter>
|
||||||
</svelte:fragment>
|
</svelte:fragment>
|
||||||
<svelte:fragment slot="2">
|
<svelte:fragment slot="2">
|
||||||
<ResultTabs tabs={[{ label: 'Messages', slot: 0 }]} {sessionId} {executeNumber} bind:resultCount {driver}>
|
<div>AI Assistant</div>
|
||||||
<svelte:fragment slot="0">
|
|
||||||
<SocketMessageView
|
|
||||||
eventName={sessionId ? `session-info-${sessionId}` : null}
|
|
||||||
onMessageClick={handleMesageClick}
|
|
||||||
{executeNumber}
|
|
||||||
startLine={executeStartLine}
|
|
||||||
showProcedure
|
|
||||||
showLine
|
|
||||||
onChangeErrors={handleChangeErrors}
|
|
||||||
/>
|
|
||||||
</svelte:fragment>
|
|
||||||
</ResultTabs>
|
|
||||||
</svelte:fragment>
|
</svelte:fragment>
|
||||||
</VerticalSplitter>
|
</HorizontalSplitter>
|
||||||
<svelte:fragment slot="toolstrip">
|
<svelte:fragment slot="toolstrip">
|
||||||
<ToolStripCommandSplitButton commands={['query.execute', 'query.executeCurrent']} />
|
<ToolStripCommandSplitButton commands={['query.execute', 'query.executeCurrent']} />
|
||||||
<ToolStripCommandButton command="query.kill" />
|
<ToolStripCommandButton command="query.kill" />
|
||||||
@@ -511,6 +535,7 @@
|
|||||||
icon="icon at"
|
icon="icon at"
|
||||||
title="Query parameter style"
|
title="Query parameter style"
|
||||||
/>
|
/>
|
||||||
|
<ToolStripCommandButton command="query.switchAiAssistant" hideDisabled />
|
||||||
</svelte:fragment>
|
</svelte:fragment>
|
||||||
</ToolStripContainer>
|
</ToolStripContainer>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user