diff --git a/packages/web/src/appobj/DatabaseObjectAppObject.svelte b/packages/web/src/appobj/DatabaseObjectAppObject.svelte index 67fff6cdc..522dc9ca7 100644 --- a/packages/web/src/appobj/DatabaseObjectAppObject.svelte +++ b/packages/web/src/appobj/DatabaseObjectAppObject.svelte @@ -378,12 +378,22 @@ null ); } + + function testEqual(a, b) { + return ( + a.conid == b.conid && + a.database == b.database && + a.objectTypeField == b.objectTypeField && + a.pureName == b.pureName && + a.schemaName == b.schemaName + ); + } pinnedTables.update(list => [...list, data])} + onUnpin={isPinned ? () => pinnedTables.update(list => list.filter(x => !testEqual(x, data))) : null} on:click={() => handleClick()} on:middleclick={() => handleClick(true)} on:expand diff --git a/packages/web/src/appobj/PinnedAppObject.svelte b/packages/web/src/appobj/PinnedAppObject.svelte new file mode 100644 index 000000000..94e301df0 --- /dev/null +++ b/packages/web/src/appobj/PinnedAppObject.svelte @@ -0,0 +1,21 @@ + + + + +{#if data.objectTypeField} + +{:else} + +{/if} diff --git a/packages/web/src/stores.ts b/packages/web/src/stores.ts index e12175ea4..439b6b422 100644 --- a/packages/web/src/stores.ts +++ b/packages/web/src/stores.ts @@ -43,6 +43,7 @@ export const activeTabId = derived([openedTabs], ([$openedTabs]) => $openedTabs. export const activeTab = derived([openedTabs], ([$openedTabs]) => $openedTabs.find(x => x.selected)); export const recentDatabases = writableWithStorage([], 'recentDatabases'); export const pinnedDatabases = writableWithStorage([], 'pinnedDatabases'); +export const pinnedTables = writableWithStorage([], 'pinnedTables'); export const commandsSettings = derived(useSettings(), (config: any) => (config || {}).commands || {}); export const allResultsInOneTabDefault = writableWithStorage(false, 'allResultsInOneTabDefault'); export const commandsCustomized = derived([commands, commandsSettings], ([$commands, $commandsSettings]) => diff --git a/packages/web/src/widgets/PinnedObjectsList.svelte b/packages/web/src/widgets/PinnedObjectsList.svelte index fbafbdbe8..acf82f88f 100644 --- a/packages/web/src/widgets/PinnedObjectsList.svelte +++ b/packages/web/src/widgets/PinnedObjectsList.svelte @@ -2,17 +2,22 @@ import _ from 'lodash'; import WidgetsInnerContainer from './WidgetsInnerContainer.svelte'; import AppObjectList from '../appobj/AppObjectList.svelte'; - import { pinnedDatabases } from '../stores'; - import * as databaseAppObject from '../appobj/DatabaseAppObject.svelte'; + import { currentDatabase, pinnedDatabases, pinnedTables } from '../stores'; + import * as pinnedAppObject from '../appobj/PinnedAppObject.svelte'; import { useConnectionColorFactory } from '../utility/useConnectionColor'; + import AboutModal from '../modals/AboutModal.svelte'; const connectionColorFactory = useConnectionColorFactory(3); + + $: filteredTables = $pinnedTables.filter( + x => x.conid == $currentDatabase?.connection?._id && x.database == $currentDatabase?.name + ); diff --git a/packages/web/src/widgets/SqlObjectList.svelte b/packages/web/src/widgets/SqlObjectList.svelte index 7879f9046..d129558d8 100644 --- a/packages/web/src/widgets/SqlObjectList.svelte +++ b/packages/web/src/widgets/SqlObjectList.svelte @@ -54,7 +54,6 @@ const handleRefreshDatabase = () => { axiosInstance.post('database-connections/refresh', { conid, database }); }; - {#if $status && $status.name == 'error'} @@ -88,6 +87,7 @@ data.objectTypeField == 'tables' || data.objectTypeField == 'views' || data.objectTypeField == 'matviews'} expandIconFunc={chevronExpandIcon} {filter} + passProps={{ showPinnedInsteadOfUnpin: true }} /> {/if}