save widget state & size

This commit is contained in:
Jan Prochazka
2021-12-05 13:26:14 +01:00
parent e51d420fa9
commit 45d4569d97
8 changed files with 63 additions and 13 deletions

View File

@@ -23,6 +23,8 @@ import _ from 'lodash';
import { findEngineDriver } from 'dbgate-tools'; import { findEngineDriver } from 'dbgate-tools';
import { openArchiveFolder } from '../utility/openArchiveFolder'; import { openArchiveFolder } from '../utility/openArchiveFolder';
import InputTextModal from '../modals/InputTextModal.svelte'; import InputTextModal from '../modals/InputTextModal.svelte';
import { removeLocalStorage } from '../utility/storageCache';
import { showSnackbarSuccess } from '../utility/snackbar';
const electron = getElectron(); const electron = getElectron();
@@ -275,6 +277,33 @@ registerCommand({
}), }),
}); });
registerCommand({
id: 'view.reset',
category: 'View',
name: 'Reset view',
onClick: () => {
const keys = [
'leftPanelWidth',
'visibleToolbar',
'zoomKoef',
'selectedWidget',
'currentTheme',
'connectionsWidget',
'dbObjectsWidget',
'favoritesWidget',
'savedFilesWidget',
'closedTabsWidget',
'queryHistoryWidget',
'archiveFoldersWidget',
'archiveFilesWidget',
'installedPluginsWidget',
'allPluginsWidget',
];
for (const key of keys) removeLocalStorage(key);
showSnackbarSuccess('Restart DbGate (or reload on web) for applying changes');
},
});
registerCommand({ registerCommand({
id: 'sql.generator', id: 'sql.generator',
category: 'SQL', category: 'SQL',

View File

@@ -30,7 +30,7 @@ function subscribeCssVariable(store, transform, cssVariable) {
store.subscribe(value => document.documentElement.style.setProperty(cssVariable, transform(value))); store.subscribe(value => document.documentElement.style.setProperty(cssVariable, transform(value)));
} }
export const selectedWidget = writable('database'); export const selectedWidget = writableWithStorage('database', 'selectedWidget');
export const openedConnections = writable([]); export const openedConnections = writable([]);
export const currentDatabase = writable(null); export const currentDatabase = writable(null);
export const openedTabs = writableWithStorage<TabDefinition[]>([], 'openedTabs'); export const openedTabs = writableWithStorage<TabDefinition[]>([], 'openedTabs');
@@ -54,7 +54,7 @@ export const commandsCustomized = derived([commands, commandsSettings], ([$comma
export const visibleToolbar = writableWithStorage(true, 'visibleToolbar'); export const visibleToolbar = writableWithStorage(true, 'visibleToolbar');
export const zoomKoef = writableWithStorage(1, 'zoomKoef'); export const zoomKoef = writableWithStorage(1, 'zoomKoef');
export const leftPanelWidth = writable(300); export const leftPanelWidth = writableWithStorage(300, 'leftPanelWidth');
export const currentDropDownMenu = writable(null); export const currentDropDownMenu = writable(null);
export const openedModals = writable([]); export const openedModals = writable([]);
export const openedSnackbars = writable([]); export const openedSnackbars = writable([]);

View File

@@ -8,10 +8,10 @@
</script> </script>
<WidgetColumnBar> <WidgetColumnBar>
<WidgetColumnBarItem title="Archive folders, DB models" name="folders" height="50%"> <WidgetColumnBarItem title="Archive folders, DB models" name="folders" height="50%" storageName='archiveFoldersWidget'>
<ArchiveFolderList /> <ArchiveFolderList />
</WidgetColumnBarItem> </WidgetColumnBarItem>
<WidgetColumnBarItem title="Files, Tables, Views, Functions" name="files"> <WidgetColumnBarItem title="Files, Tables, Views, Functions" name="files" storageName='archiveFilesWidget'>
<ArchiveFilesList /> <ArchiveFilesList />
</WidgetColumnBarItem> </WidgetColumnBarItem>
</WidgetColumnBar> </WidgetColumnBar>

View File

@@ -19,11 +19,15 @@
<WidgetColumnBar {hidden}> <WidgetColumnBar {hidden}>
{#if !$config?.singleDatabase} {#if !$config?.singleDatabase}
<WidgetColumnBarItem title="Connections" name="connections" height="50%"> <WidgetColumnBarItem title="Connections" name="connections" height="35%" storageName="connectionsWidget">
<ConnectionList /> <ConnectionList />
</WidgetColumnBarItem> </WidgetColumnBarItem>
{/if} {/if}
<WidgetColumnBarItem title={driver?.dialect?.nosql ? 'Collections' : 'Tables, views, functions'} name="dbObjects"> <WidgetColumnBarItem
title={driver?.dialect?.nosql ? 'Collections' : 'Tables, views, functions'}
name="dbObjects"
storageName="dbObjectsWidget"
>
<SqlObjectListWrapper /> <SqlObjectListWrapper />
</WidgetColumnBarItem> </WidgetColumnBarItem>
</WidgetColumnBar> </WidgetColumnBar>

View File

@@ -20,14 +20,14 @@
<WidgetColumnBar> <WidgetColumnBar>
{#if hasPermission('files/favorites/read')} {#if hasPermission('files/favorites/read')}
<WidgetColumnBarItem title="Favorites" name="favorites" height="20%"> <WidgetColumnBarItem title="Favorites" name="favorites" height="20%" storageName="favoritesWidget">
<WidgetsInnerContainer> <WidgetsInnerContainer>
<AppObjectList list={$favorites || []} module={favoriteFileAppObject} /> <AppObjectList list={$favorites || []} module={favoriteFileAppObject} />
</WidgetsInnerContainer> </WidgetsInnerContainer>
</WidgetColumnBarItem> </WidgetColumnBarItem>
{/if} {/if}
<WidgetColumnBarItem title="Saved files" name="files"> <WidgetColumnBarItem title="Saved files" name="files" storageName="savedFilesWidget">
<SavedFilesList /> <SavedFilesList />
</WidgetColumnBarItem> </WidgetColumnBarItem>
</WidgetColumnBar> </WidgetColumnBar>

View File

@@ -19,7 +19,7 @@
</script> </script>
<WidgetColumnBar> <WidgetColumnBar>
<WidgetColumnBarItem title="Recently closed tabs" name="closedTabs"> <WidgetColumnBarItem title="Recently closed tabs" name="closedTabs" storageName='closedTabsWidget'>
<WidgetsInnerContainer> <WidgetsInnerContainer>
<AppObjectList <AppObjectList
list={_.sortBy( list={_.sortBy(
@@ -30,7 +30,7 @@
/> />
</WidgetsInnerContainer> </WidgetsInnerContainer>
</WidgetColumnBarItem> </WidgetColumnBarItem>
<WidgetColumnBarItem title="Query history" name="queryHistory"> <WidgetColumnBarItem title="Query history" name="queryHistory" storageName='queryHistoryWidget'>
<QueryHistoryList /> <QueryHistoryList />
</WidgetColumnBarItem> </WidgetColumnBarItem>
</WidgetColumnBar> </WidgetColumnBar>

View File

@@ -7,10 +7,10 @@
</script> </script>
<WidgetColumnBar> <WidgetColumnBar>
<WidgetColumnBarItem title="Installed extensions" name="installed" height="50%"> <WidgetColumnBarItem title="Installed extensions" name="installed" height="50%" storageName='installedPluginsWidget'>
<InstalledPluginsList /> <InstalledPluginsList />
</WidgetColumnBarItem> </WidgetColumnBarItem>
<WidgetColumnBarItem title="Available extensions" name="all"> <WidgetColumnBarItem title="Available extensions" name="all" storageName='allPluginsWidget'>
<AvailablePluginsList /> <AvailablePluginsList />
</WidgetColumnBarItem> </WidgetColumnBarItem>
</WidgetColumnBar> </WidgetColumnBar>

View File

@@ -7,6 +7,7 @@
import WidgetTitle from './WidgetTitle.svelte'; import WidgetTitle from './WidgetTitle.svelte';
import splitterDrag from '../utility/splitterDrag'; import splitterDrag from '../utility/splitterDrag';
import { getLocalStorage, setLocalStorage } from '../utility/storageCache';
export let title; export let title;
export let name; export let name;
@@ -15,6 +16,8 @@
export let height = null; export let height = null;
export let collapsed = null; export let collapsed = null;
export let storageName = null;
let size = 0; let size = 0;
const dynamicProps = writable({ const dynamicProps = writable({
@@ -37,14 +40,28 @@
$: setInitialSize(height, $widgetColumnBarHeight); $: setInitialSize(height, $widgetColumnBarHeight);
$: if (storageName && $widgetColumnBarHeight > 0) {
setLocalStorage(storageName, { relativeHeight: size / $widgetColumnBarHeight, visible });
}
function setInitialSize(initialSize, parentHeight) { function setInitialSize(initialSize, parentHeight) {
if (storageName) {
const storage = getLocalStorage(storageName);
if (storage) {
size = parentHeight * storage.relativeHeight;
return;
}
}
if (_.isString(initialSize) && initialSize.endsWith('px')) size = parseInt(initialSize.slice(0, -2)); if (_.isString(initialSize) && initialSize.endsWith('px')) size = parseInt(initialSize.slice(0, -2));
else if (_.isString(initialSize) && initialSize.endsWith('%')) else if (_.isString(initialSize) && initialSize.endsWith('%'))
size = (parentHeight * parseFloat(initialSize.slice(0, -1))) / 100; size = (parentHeight * parseFloat(initialSize.slice(0, -1))) / 100;
else size = parentHeight / 3; else size = parentHeight / 3;
} }
let visible = !collapsed; let visible =
storageName && getLocalStorage(storageName) && getLocalStorage(storageName).visible != null
? getLocalStorage(storageName).visible
: !collapsed;
</script> </script>
{#if !skip && show} {#if !skip && show}