From 8a0d10e50d4e36f5e569d7ec42fb8d65a2ef96ea Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Thu, 25 Feb 2021 21:43:23 +0100 Subject: [PATCH] keyboard commands --- packages/web/src/App.svelte | 3 ++ .../web/src/commands/CommandListener.svelte | 26 +++++++++++++++++ .../web/src/commands/CommandPalette.svelte | 18 ++++++++++-- packages/web/src/commands/registerCommand.ts | 1 + packages/web/src/datagrid/DataGridCore.svelte | 28 ++++++++++++++++++- packages/web/src/datagrid/DataGridRow.svelte | 1 + .../src/datagrid/LoadingDataGridCore.svelte | 24 +++++++++++++++- packages/web/src/stores.ts | 3 +- .../web/src/widgets/WidgetIconPanel.svelte | 1 + 9 files changed, 100 insertions(+), 5 deletions(-) create mode 100644 packages/web/src/commands/CommandListener.svelte diff --git a/packages/web/src/App.svelte b/packages/web/src/App.svelte index 8d5e288db..65fa8f18b 100644 --- a/packages/web/src/App.svelte +++ b/packages/web/src/App.svelte @@ -1,7 +1,10 @@ + diff --git a/packages/web/src/commands/CommandListener.svelte b/packages/web/src/commands/CommandListener.svelte new file mode 100644 index 000000000..12dd8d5fe --- /dev/null +++ b/packages/web/src/commands/CommandListener.svelte @@ -0,0 +1,26 @@ + + + diff --git a/packages/web/src/commands/CommandPalette.svelte b/packages/web/src/commands/CommandPalette.svelte index 0c56ffd16..32f3a8d7b 100644 --- a/packages/web/src/commands/CommandPalette.svelte +++ b/packages/web/src/commands/CommandPalette.svelte @@ -2,7 +2,9 @@ registerCommand({ id: 'commandPalette.show', text: 'Command palette: Show', + keyText: 'F1', onClick: () => visibleCommandPalette.set(true), + enabledStore: derived(visibleCommandPalette, $visibleCommandPalette => !$visibleCommandPalette), }); @@ -10,6 +12,7 @@ import { filterName } from 'dbgate-datalib'; import _ from 'lodash'; + import { derived } from 'svelte/store'; import { onMount } from 'svelte'; import { commands, visibleCommandPalette } from '../stores'; import { clickOutside } from '../utility/clickOutside'; @@ -24,7 +27,10 @@ onMount(() => domInput.focus()); - $: sortedComands = _.sortBy(Object.values($commands), 'text'); + $: sortedComands = _.sortBy( + Object.values($commands).filter(x => x.enabled), + 'text' + ); $: filteredItems = (parentCommand ? parentCommand.getSubCommands() : sortedComands).filter(x => filterName(filter, x.text) @@ -55,7 +61,10 @@ {#each filteredItems as command, index}
handleCommand(command)}> - {command.text} +
{command.text}
+ {#if command.keyText} +
{command.keyText}
+ {/if}
{/each} @@ -75,6 +84,8 @@ } .command { padding: 5px; + display: flex; + justify-content: space-between; } .command:hover { background: var(--theme-bg-3); @@ -82,4 +93,7 @@ .command.selected { background: var(--theme-bg-selected); } + .shortcut { + background: var(--theme-bg-3); + } diff --git a/packages/web/src/commands/registerCommand.ts b/packages/web/src/commands/registerCommand.ts index 90cca00f4..2ad3d2669 100644 --- a/packages/web/src/commands/registerCommand.ts +++ b/packages/web/src/commands/registerCommand.ts @@ -8,6 +8,7 @@ export interface SubCommand { export interface GlobalCommand { id: string; text: string; + keyText?: string; getSubCommands?: () => SubCommand[]; onClick?: Function; enabledStore?: any; diff --git a/packages/web/src/datagrid/DataGridCore.svelte b/packages/web/src/datagrid/DataGridCore.svelte index fb1706e4d..4da7a0aa6 100644 --- a/packages/web/src/datagrid/DataGridCore.svelte +++ b/packages/web/src/datagrid/DataGridCore.svelte @@ -1,6 +1,20 @@ + +
- + { + currentDataGrid.set(instance); + }} + /> loadedTime) { + reload(); + } - + diff --git a/packages/web/src/stores.ts b/packages/web/src/stores.ts index 895f50812..0a24a3237 100644 --- a/packages/web/src/stores.ts +++ b/packages/web/src/stores.ts @@ -1,4 +1,4 @@ -import { writable } from 'svelte/store'; +import { writable, derived } from 'svelte/store'; import { ExtensionsDirectory } from 'dbgate-types'; interface TabDefinition { @@ -28,5 +28,6 @@ export const extensions = writable(null); export const visibleCommandPalette = writable(false); export const commands = writable({}); export const currentTheme = writableWithStorage('theme-light', 'currentTheme'); +export const activeTabId = derived([openedTabs], ([$openedTabs]) => $openedTabs.find(x => x.selected)?.tabid); // export const leftPanelWidth = writable(300); diff --git a/packages/web/src/widgets/WidgetIconPanel.svelte b/packages/web/src/widgets/WidgetIconPanel.svelte index 0a6be95a1..7bca3aac8 100644 --- a/packages/web/src/widgets/WidgetIconPanel.svelte +++ b/packages/web/src/widgets/WidgetIconPanel.svelte @@ -1,4 +1,5 @@