mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-25 02:56:00 +00:00
ability to pin tables
This commit is contained in:
@@ -378,12 +378,22 @@
|
|||||||
null
|
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
|
||||||
|
);
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import AppObjectCore from './AppObjectCore.svelte';
|
import AppObjectCore from './AppObjectCore.svelte';
|
||||||
import { currentDatabase, extensions, openedConnections } from '../stores';
|
import { currentDatabase, extensions, openedConnections, pinnedTables } from '../stores';
|
||||||
import openNewTab from '../utility/openNewTab';
|
import openNewTab from '../utility/openNewTab';
|
||||||
import { filterName, generateDbPairingId, getAlterDatabaseScript } from 'dbgate-tools';
|
import { filterName, generateDbPairingId, getAlterDatabaseScript } from 'dbgate-tools';
|
||||||
import { getConnectionInfo, getDatabaseInfo } from '../utility/metadataLoaders';
|
import { getConnectionInfo, getDatabaseInfo } from '../utility/metadataLoaders';
|
||||||
@@ -403,6 +413,7 @@
|
|||||||
import ConfirmModal from '../modals/ConfirmModal.svelte';
|
import ConfirmModal from '../modals/ConfirmModal.svelte';
|
||||||
|
|
||||||
export let data;
|
export let data;
|
||||||
|
export let passProps;
|
||||||
|
|
||||||
function handleClick(forceNewTab = false) {
|
function handleClick(forceNewTab = false) {
|
||||||
handleDatabaseObjectClick(data, forceNewTab);
|
handleDatabaseObjectClick(data, forceNewTab);
|
||||||
@@ -571,6 +582,8 @@
|
|||||||
};
|
};
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$: isPinned = !!$pinnedTables.find(x => testEqual(data, x));
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<AppObjectCore
|
<AppObjectCore
|
||||||
@@ -580,6 +593,9 @@
|
|||||||
title={data.schemaName ? `${data.schemaName}.${data.pureName}` : data.pureName}
|
title={data.schemaName ? `${data.schemaName}.${data.pureName}` : data.pureName}
|
||||||
icon={databaseObjectIcons[data.objectTypeField]}
|
icon={databaseObjectIcons[data.objectTypeField]}
|
||||||
menu={createMenu}
|
menu={createMenu}
|
||||||
|
showPinnedInsteadOfUnpin={passProps?.showPinnedInsteadOfUnpin}
|
||||||
|
onPin={isPinned ? null : () => pinnedTables.update(list => [...list, data])}
|
||||||
|
onUnpin={isPinned ? () => pinnedTables.update(list => list.filter(x => !testEqual(x, data))) : null}
|
||||||
on:click={() => handleClick()}
|
on:click={() => handleClick()}
|
||||||
on:middleclick={() => handleClick(true)}
|
on:middleclick={() => handleClick(true)}
|
||||||
on:expand
|
on:expand
|
||||||
|
|||||||
21
packages/web/src/appobj/PinnedAppObject.svelte
Normal file
21
packages/web/src/appobj/PinnedAppObject.svelte
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
<script lang="ts" context="module">
|
||||||
|
import DatabaseAppObject from './DatabaseAppObject.svelte';
|
||||||
|
import DatabaseObjectAppObject from './DatabaseObjectAppObject.svelte';
|
||||||
|
|
||||||
|
export const extractKey = data => {
|
||||||
|
if (data.objectTypeField) {
|
||||||
|
return `${data.objectTypeField}||${data.schemaName}||${data.pureName}`;
|
||||||
|
}
|
||||||
|
return data.connection._id;
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
export let data;
|
||||||
|
</script>
|
||||||
|
|
||||||
|
{#if data.objectTypeField}
|
||||||
|
<DatabaseObjectAppObject {...$$props} />
|
||||||
|
{:else}
|
||||||
|
<DatabaseAppObject {...$$props} />
|
||||||
|
{/if}
|
||||||
@@ -43,6 +43,7 @@ export const activeTabId = derived([openedTabs], ([$openedTabs]) => $openedTabs.
|
|||||||
export const activeTab = derived([openedTabs], ([$openedTabs]) => $openedTabs.find(x => x.selected));
|
export const activeTab = derived([openedTabs], ([$openedTabs]) => $openedTabs.find(x => x.selected));
|
||||||
export const recentDatabases = writableWithStorage([], 'recentDatabases');
|
export const recentDatabases = writableWithStorage([], 'recentDatabases');
|
||||||
export const pinnedDatabases = writableWithStorage([], 'pinnedDatabases');
|
export const pinnedDatabases = writableWithStorage([], 'pinnedDatabases');
|
||||||
|
export const pinnedTables = writableWithStorage([], 'pinnedTables');
|
||||||
export const commandsSettings = derived(useSettings(), (config: any) => (config || {}).commands || {});
|
export const commandsSettings = derived(useSettings(), (config: any) => (config || {}).commands || {});
|
||||||
export const allResultsInOneTabDefault = writableWithStorage(false, 'allResultsInOneTabDefault');
|
export const allResultsInOneTabDefault = writableWithStorage(false, 'allResultsInOneTabDefault');
|
||||||
export const commandsCustomized = derived([commands, commandsSettings], ([$commands, $commandsSettings]) =>
|
export const commandsCustomized = derived([commands, commandsSettings], ([$commands, $commandsSettings]) =>
|
||||||
|
|||||||
@@ -2,17 +2,22 @@
|
|||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import WidgetsInnerContainer from './WidgetsInnerContainer.svelte';
|
import WidgetsInnerContainer from './WidgetsInnerContainer.svelte';
|
||||||
import AppObjectList from '../appobj/AppObjectList.svelte';
|
import AppObjectList from '../appobj/AppObjectList.svelte';
|
||||||
import { pinnedDatabases } from '../stores';
|
import { currentDatabase, pinnedDatabases, pinnedTables } from '../stores';
|
||||||
import * as databaseAppObject from '../appobj/DatabaseAppObject.svelte';
|
import * as pinnedAppObject from '../appobj/PinnedAppObject.svelte';
|
||||||
import { useConnectionColorFactory } from '../utility/useConnectionColor';
|
import { useConnectionColorFactory } from '../utility/useConnectionColor';
|
||||||
|
import AboutModal from '../modals/AboutModal.svelte';
|
||||||
|
|
||||||
const connectionColorFactory = useConnectionColorFactory(3);
|
const connectionColorFactory = useConnectionColorFactory(3);
|
||||||
|
|
||||||
|
$: filteredTables = $pinnedTables.filter(
|
||||||
|
x => x.conid == $currentDatabase?.connection?._id && x.database == $currentDatabase?.name
|
||||||
|
);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<WidgetsInnerContainer>
|
<WidgetsInnerContainer>
|
||||||
<AppObjectList
|
<AppObjectList
|
||||||
list={$pinnedDatabases}
|
list={[...$pinnedDatabases, ...filteredTables]}
|
||||||
module={databaseAppObject}
|
module={pinnedAppObject}
|
||||||
passProps={{ connectionColorFactory: $connectionColorFactory }}
|
passProps={{ connectionColorFactory: $connectionColorFactory }}
|
||||||
/>
|
/>
|
||||||
</WidgetsInnerContainer>
|
</WidgetsInnerContainer>
|
||||||
|
|||||||
@@ -54,7 +54,6 @@
|
|||||||
const handleRefreshDatabase = () => {
|
const handleRefreshDatabase = () => {
|
||||||
axiosInstance.post('database-connections/refresh', { conid, database });
|
axiosInstance.post('database-connections/refresh', { conid, database });
|
||||||
};
|
};
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{#if $status && $status.name == 'error'}
|
{#if $status && $status.name == 'error'}
|
||||||
@@ -88,6 +87,7 @@
|
|||||||
data.objectTypeField == 'tables' || data.objectTypeField == 'views' || data.objectTypeField == 'matviews'}
|
data.objectTypeField == 'tables' || data.objectTypeField == 'views' || data.objectTypeField == 'matviews'}
|
||||||
expandIconFunc={chevronExpandIcon}
|
expandIconFunc={chevronExpandIcon}
|
||||||
{filter}
|
{filter}
|
||||||
|
passProps={{ showPinnedInsteadOfUnpin: true }}
|
||||||
/>
|
/>
|
||||||
{/if}
|
{/if}
|
||||||
</WidgetsInnerContainer>
|
</WidgetsInnerContainer>
|
||||||
|
|||||||
Reference in New Issue
Block a user