diff --git a/packages/web/public/dimensions.css b/packages/web/public/dimensions.css index 4eda591cd..bf227caf8 100644 --- a/packages/web/public/dimensions.css +++ b/packages/web/public/dimensions.css @@ -2,4 +2,6 @@ --dim-widget-icon-size: 50px; --dim-statusbar-height: 20px; --dim-left-panel-width: 300px; + --dim-tabs-panel-height: 53px; + --dim-splitter-thickness: 3px; } diff --git a/packages/web/src/Screen.svelte b/packages/web/src/Screen.svelte index 7591e4df7..a72c27865 100644 --- a/packages/web/src/Screen.svelte +++ b/packages/web/src/Screen.svelte @@ -2,6 +2,7 @@ import WidgetContainer from './widgets/WidgetContainer.svelte'; import WidgetIconPanel from './widgets/WidgetIconPanel.svelte'; import { selectedWidget } from './stores'; + import TabsPanel from './widgets/TabsPanel.svelte';
@@ -14,6 +15,9 @@
{/if} +
+ +
diff --git a/packages/web/src/appobj/DatabaseObjectAppObject.svelte b/packages/web/src/appobj/DatabaseObjectAppObject.svelte new file mode 100644 index 000000000..cc27aa11d --- /dev/null +++ b/packages/web/src/appobj/DatabaseObjectAppObject.svelte @@ -0,0 +1,40 @@ + + + diff --git a/packages/web/src/stores.ts b/packages/web/src/stores.ts index 0ed1ae107..ff62e46c0 100644 --- a/packages/web/src/stores.ts +++ b/packages/web/src/stores.ts @@ -3,5 +3,6 @@ import { writable } from 'svelte/store'; export const selectedWidget = writable('database'); export const openedConnections = writable([]); export const currentDatabase = writable(null); +export const openedTabs = writable([]); // export const leftPanelWidth = writable(300); diff --git a/packages/web/src/utility/openNewTab.ts b/packages/web/src/utility/openNewTab.ts new file mode 100644 index 000000000..6b9855a5c --- /dev/null +++ b/packages/web/src/utility/openNewTab.ts @@ -0,0 +1,15 @@ +import uuidv1 from 'uuid/v1'; +import { openedTabs } from '../stores'; + +export default async function openNewTab(newTab, initialData = undefined, options = undefined) { + console.log('OPENING NEW TAB', newTab); + const tabid = uuidv1(); + openedTabs.update(tabs => [ + ...(tabs || []).map(x => ({ ...x, selected: false })), + { + tabid, + selected: true, + ...newTab, + }, + ]); +} diff --git a/packages/web/src/widgets/DatabaseWidget.svelte b/packages/web/src/widgets/DatabaseWidget.svelte index 797628929..1ce47f105 100644 --- a/packages/web/src/widgets/DatabaseWidget.svelte +++ b/packages/web/src/widgets/DatabaseWidget.svelte @@ -1,5 +1,6 @@ Refresh -CONNECTIONS + + ({ ...x, conid, database }))} component={DatabaseObjectAppObject} /> + diff --git a/packages/web/src/widgets/SqlObjectListWrapper.svelte b/packages/web/src/widgets/SqlObjectListWrapper.svelte new file mode 100644 index 000000000..3cb62f611 --- /dev/null +++ b/packages/web/src/widgets/SqlObjectListWrapper.svelte @@ -0,0 +1,15 @@ + + +{#if conid && database} + +{:else} + Database not selected +{/if} diff --git a/packages/web/src/widgets/TabsPanel.svelte b/packages/web/src/widgets/TabsPanel.svelte new file mode 100644 index 000000000..220a38233 --- /dev/null +++ b/packages/web/src/widgets/TabsPanel.svelte @@ -0,0 +1,123 @@ + + + + +{#each dbKeys as dbKey} +
+
+ + {tabsByDb[dbKey][0].tabDbName} +
+
+ {#each _.sortBy(tabsByDb[dbKey], ['title', 'tabid']) as tab} +
+ + + {tab.title} + + + + +
+ {/each} +
+
+{/each} + +