mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-20 01:55:59 +00:00
329 lines
7.6 KiB
TypeScript
329 lines
7.6 KiB
TypeScript
import { currentTheme, extensions, getVisibleToolbar, visibleToolbar } from '../stores';
|
|
import registerCommand from './registerCommand';
|
|
import { derived, get } from 'svelte/store';
|
|
import { ThemeDefinition } from 'dbgate-types';
|
|
import ConnectionModal from '../modals/ConnectionModal.svelte';
|
|
import AboutModal from '../modals/AboutModal.svelte';
|
|
import ImportExportModal from '../modals/ImportExportModal.svelte';
|
|
import SqlGeneratorModal from '../modals/SqlGeneratorModal.svelte';
|
|
import { showModal } from '../modals/modalTools';
|
|
import newQuery from '../query/newQuery';
|
|
import saveTabFile from '../utility/saveTabFile';
|
|
import openNewTab from '../utility/openNewTab';
|
|
import getElectron from '../utility/getElectron';
|
|
import { openElectronFile } from '../utility/openElectronFile';
|
|
import { getDefaultFileFormat } from '../plugins/fileformats';
|
|
import { getCurrentConfig, getCurrentDatabase } from '../stores';
|
|
import './recentDatabaseSwitch';
|
|
import hasPermission from '../utility/hasPermission';
|
|
|
|
const electron = getElectron();
|
|
|
|
function themeCommand(theme: ThemeDefinition) {
|
|
return {
|
|
text: theme.themeName,
|
|
onClick: () => currentTheme.set(theme.className),
|
|
// onPreview: () => {
|
|
// const old = get(currentTheme);
|
|
// currentTheme.set(css);
|
|
// return ok => {
|
|
// if (!ok) currentTheme.set(old);
|
|
// };
|
|
// },
|
|
};
|
|
}
|
|
|
|
registerCommand({
|
|
id: 'theme.changeTheme',
|
|
category: 'Theme',
|
|
name: 'Change',
|
|
toolbarName: 'Change theme',
|
|
getSubCommands: () => get(extensions).themes.map(themeCommand),
|
|
});
|
|
|
|
registerCommand({
|
|
id: 'toolbar.show',
|
|
category: 'Toolbar',
|
|
name: 'Show',
|
|
onClick: () => visibleToolbar.set(1),
|
|
testEnabled: () => !getVisibleToolbar(),
|
|
});
|
|
|
|
registerCommand({
|
|
id: 'toolbar.hide',
|
|
category: 'Toolbar',
|
|
name: 'Hide',
|
|
onClick: () => visibleToolbar.set(0),
|
|
testEnabled: () => getVisibleToolbar(),
|
|
});
|
|
|
|
registerCommand({
|
|
id: 'about.show',
|
|
category: 'About',
|
|
name: 'Show',
|
|
toolbarName: 'About',
|
|
onClick: () => showModal(AboutModal),
|
|
});
|
|
|
|
registerCommand({
|
|
id: 'new.connection',
|
|
toolbar: true,
|
|
icon: 'icon new-connection',
|
|
toolbarName: 'Add connection',
|
|
category: 'New',
|
|
toolbarOrder: 1,
|
|
name: 'Connection',
|
|
testEnabled: () => !getCurrentConfig()?.runAsPortal,
|
|
onClick: () => showModal(ConnectionModal),
|
|
});
|
|
|
|
registerCommand({
|
|
id: 'new.query',
|
|
category: 'New',
|
|
icon: 'icon file',
|
|
toolbar: true,
|
|
toolbarOrder: 2,
|
|
name: 'Query',
|
|
toolbarName: 'New query',
|
|
keyText: 'Ctrl+Q',
|
|
onClick: () => newQuery(),
|
|
});
|
|
|
|
registerCommand({
|
|
id: 'new.shell',
|
|
category: 'New',
|
|
icon: 'img shell',
|
|
name: 'JavaScript Shell',
|
|
onClick: () => {
|
|
openNewTab({
|
|
title: 'Shell #',
|
|
icon: 'img shell',
|
|
tabComponent: 'ShellTab',
|
|
});
|
|
},
|
|
});
|
|
|
|
registerCommand({
|
|
id: 'new.markdown',
|
|
category: 'New',
|
|
icon: 'img markdown',
|
|
name: 'Markdown page',
|
|
onClick: () => {
|
|
openNewTab({
|
|
title: 'Page #',
|
|
icon: 'img markdown',
|
|
tabComponent: 'MarkdownEditorTab',
|
|
});
|
|
},
|
|
});
|
|
|
|
registerCommand({
|
|
id: 'new.freetable',
|
|
category: 'New',
|
|
icon: 'img markdown',
|
|
name: 'Free table editor',
|
|
onClick: () => {
|
|
openNewTab({
|
|
title: 'Data #',
|
|
icon: 'img free-table',
|
|
tabComponent: 'FreeTableTab',
|
|
});
|
|
},
|
|
});
|
|
|
|
registerCommand({
|
|
id: 'group.save',
|
|
category: null,
|
|
isGroupCommand: true,
|
|
name: 'Save',
|
|
keyText: 'Ctrl+S',
|
|
group: 'save',
|
|
});
|
|
|
|
registerCommand({
|
|
id: 'group.saveAs',
|
|
category: null,
|
|
isGroupCommand: true,
|
|
name: 'Save As',
|
|
keyText: 'Ctrl+Shift+S',
|
|
group: 'saveAs',
|
|
});
|
|
|
|
registerCommand({
|
|
id: 'group.undo',
|
|
category: null,
|
|
isGroupCommand: true,
|
|
name: 'Undo',
|
|
keyText: 'Ctrl+Z',
|
|
group: 'undo',
|
|
});
|
|
|
|
registerCommand({
|
|
id: 'group.redo',
|
|
category: null,
|
|
isGroupCommand: true,
|
|
name: 'Redo',
|
|
keyText: 'Ctrl+Y',
|
|
group: 'redo',
|
|
});
|
|
|
|
if (electron) {
|
|
registerCommand({
|
|
id: 'file.open',
|
|
category: 'File',
|
|
name: 'Open',
|
|
keyText: 'Ctrl+O',
|
|
onClick: openElectronFile,
|
|
});
|
|
}
|
|
|
|
registerCommand({
|
|
id: 'file.import',
|
|
category: 'File',
|
|
name: 'Import data',
|
|
toolbar: true,
|
|
icon: 'icon import',
|
|
onClick: () =>
|
|
showModal(ImportExportModal, {
|
|
importToArchive: true,
|
|
initialValues: { sourceStorageType: getDefaultFileFormat(get(extensions)).storageType },
|
|
}),
|
|
});
|
|
|
|
registerCommand({
|
|
id: 'sql.generator',
|
|
category: 'SQL',
|
|
name: 'SQL Generator',
|
|
toolbar: true,
|
|
icon: 'icon sql-generator',
|
|
testEnabled: () => getCurrentDatabase() != null,
|
|
onClick: () =>
|
|
showModal(SqlGeneratorModal, {
|
|
conid: getCurrentDatabase()?.connection?._id,
|
|
database: getCurrentDatabase()?.name,
|
|
}),
|
|
});
|
|
|
|
if (hasPermission('settings/change')) {
|
|
registerCommand({
|
|
id: 'settings.commands',
|
|
category: 'Settings',
|
|
name: 'Keyboard shortcuts',
|
|
onClick: () => {
|
|
openNewTab({
|
|
title: 'Keyboard Shortcuts',
|
|
icon: 'icon keyboard',
|
|
tabComponent: 'CommandListTab',
|
|
props: {},
|
|
});
|
|
},
|
|
});
|
|
}
|
|
|
|
export function registerFileCommands({
|
|
idPrefix,
|
|
category,
|
|
getCurrentEditor,
|
|
folder,
|
|
format,
|
|
fileExtension,
|
|
save = true,
|
|
execute = false,
|
|
toggleComment = false,
|
|
findReplace = false,
|
|
undoRedo = false,
|
|
}) {
|
|
if (save) {
|
|
registerCommand({
|
|
id: idPrefix + '.save',
|
|
group: 'save',
|
|
category,
|
|
name: 'Save',
|
|
// keyText: 'Ctrl+S',
|
|
icon: 'icon save',
|
|
toolbar: true,
|
|
testEnabled: () => getCurrentEditor() != null,
|
|
onClick: () => saveTabFile(getCurrentEditor(), false, folder, format, fileExtension),
|
|
});
|
|
registerCommand({
|
|
id: idPrefix + '.saveAs',
|
|
group: 'saveAs',
|
|
category,
|
|
name: 'Save As',
|
|
testEnabled: () => getCurrentEditor() != null,
|
|
onClick: () => saveTabFile(getCurrentEditor(), true, folder, format, fileExtension),
|
|
});
|
|
}
|
|
|
|
if (execute) {
|
|
registerCommand({
|
|
id: idPrefix + '.execute',
|
|
category,
|
|
name: 'Execute',
|
|
icon: 'icon run',
|
|
toolbar: true,
|
|
keyText: 'F5 | Ctrl+Enter',
|
|
testEnabled: () => getCurrentEditor() != null && !getCurrentEditor()?.isBusy(),
|
|
onClick: () => getCurrentEditor().execute(),
|
|
});
|
|
registerCommand({
|
|
id: idPrefix + '.kill',
|
|
category,
|
|
name: 'Kill',
|
|
icon: 'icon close',
|
|
toolbar: true,
|
|
testEnabled: () => getCurrentEditor()?.canKill && getCurrentEditor().canKill(),
|
|
onClick: () => getCurrentEditor().kill(),
|
|
});
|
|
}
|
|
|
|
if (toggleComment) {
|
|
registerCommand({
|
|
id: idPrefix + '.toggleComment',
|
|
category,
|
|
name: 'Toggle comment',
|
|
keyText: 'Ctrl+/',
|
|
disableHandleKeyText: 'Ctrl+/',
|
|
testEnabled: () => getCurrentEditor() != null,
|
|
onClick: () => getCurrentEditor().toggleComment(),
|
|
});
|
|
}
|
|
|
|
if (findReplace) {
|
|
registerCommand({
|
|
id: idPrefix + '.find',
|
|
category,
|
|
name: 'Find',
|
|
keyText: 'Ctrl+F',
|
|
testEnabled: () => getCurrentEditor() != null,
|
|
onClick: () => getCurrentEditor().find(),
|
|
});
|
|
registerCommand({
|
|
id: idPrefix + '.replace',
|
|
category,
|
|
keyText: 'Ctrl+H',
|
|
name: 'Replace',
|
|
testEnabled: () => getCurrentEditor() != null,
|
|
onClick: () => getCurrentEditor().replace(),
|
|
});
|
|
}
|
|
if (undoRedo) {
|
|
registerCommand({
|
|
id: idPrefix + '.undo',
|
|
category,
|
|
name: 'Undo',
|
|
group: 'undo',
|
|
testEnabled: () => getCurrentEditor()?.canUndo(),
|
|
onClick: () => getCurrentEditor().undo(),
|
|
});
|
|
registerCommand({
|
|
id: idPrefix + '.redo',
|
|
category,
|
|
group: 'redo',
|
|
name: 'Redo',
|
|
testEnabled: () => getCurrentEditor()?.canRedo(),
|
|
onClick: () => getCurrentEditor().redo(),
|
|
});
|
|
}
|
|
}
|