diff --git a/packages/tools/src/dbKeysLoader.ts b/packages/tools/src/dbKeysLoader.ts index 76696a99d..4aa5c711b 100644 --- a/packages/tools/src/dbKeysLoader.ts +++ b/packages/tools/src/dbKeysLoader.ts @@ -1,4 +1,5 @@ import _omit from 'lodash/omit'; +import _sortBy from 'lodash/sortBy'; const SHOW_INCREMENT = 100; @@ -29,8 +30,10 @@ export interface DbKeysTreeModel { childrenByKey: { [key: string]: DbKeysNodeModel[] }; keyObjectsByKey: { [key: string]: DbKeysNodeModel }; scannedKeys: number; + loadCount: number; + dbsize: number; cursor: string; - loadedAll: false; + loadedAll: boolean; // refreshAll?: boolean; } @@ -46,9 +49,10 @@ export interface DbKeyLoadedModel { export interface DbKeysLoadResult { nextCursor: string; keys: DbKeyLoadedModel[]; + dbsize: number; } -export type DbKeysLoadFunction = (root: string, limit: number) => Promise; +// export type DbKeysLoadFunction = (root: string, limit: number) => Promise; export type DbKeysChangeModelFunction = (func: (model: DbKeysTreeModel) => DbKeysTreeModel) => void; @@ -140,13 +144,10 @@ export type DbKeysChangeModelFunction = (func: (model: DbKeysTreeModel) => DbKey // }; // } -export async function dbKeys_loadNext(tree: DbKeysTreeModel, loader: DbKeysLoadFunction): Promise { - const count = 2000; +export function dbKeys_mergeNextPage(tree: DbKeysTreeModel, nextPage: DbKeysLoadResult): DbKeysTreeModel { const keyObjectsByKey = { ...tree.keyObjectsByKey }; - const loaded = await loader(tree.cursor, count); - - for (const keyObj of loaded.keys) { + for (const keyObj of nextPage.keys) { const keyPath = keyObj.key.split(tree.treeKeySeparator); keyObjectsByKey[keyObj.key] = { ...keyObj, @@ -198,20 +199,26 @@ export async function dbKeys_loadNext(tree: DbKeysTreeModel, loader: DbKeysLoadF if (dirObj.key == '') { continue; } - + if (!childrenByKey[dirObj.parentKey]) { childrenByKey[dirObj.parentKey] = []; } childrenByKey[dirObj.parentKey].push(dirObj); } + for (const key in childrenByKey) { + childrenByKey[key] = _sortBy(childrenByKey[key], 'text'); + } + return { ...tree, - cursor: loaded.nextCursor, + cursor: nextPage.nextCursor, dirsByKey, childrenByKey, keyObjectsByKey, - scannedKeys: tree.scannedKeys + count, + scannedKeys: tree.scannedKeys + tree.loadCount, + loadedAll: nextPage.nextCursor == '0', + dbsize: nextPage.dbsize, }; } @@ -251,6 +258,8 @@ export function dbKeys_refreshAll(treeKeySeparator: string, tree?: DbKeysTreeMod '': root, }, scannedKeys: 0, + dbsize: 0, + loadCount: 2000, cursor: '0', root, loadedAll: false, diff --git a/packages/web/src/widgets/DbKeysSubTree.svelte b/packages/web/src/widgets/DbKeysSubTree.svelte index b8e026839..6a1f3959b 100644 --- a/packages/web/src/widgets/DbKeysSubTree.svelte +++ b/packages/web/src/widgets/DbKeysSubTree.svelte @@ -6,7 +6,7 @@ import DbKeysTreeNode from './DbKeysTreeNode.svelte'; import { dbKeys_markNodeExpanded, DbKeysChangeModelFunction, DbKeysTreeModel } from 'dbgate-tools'; - export let root; + export let key; export let connection; export let database; export let conid; @@ -19,34 +19,34 @@ export let parentRoots = []; - $: items = model.childrenByKey[root] ?? []; + $: items = model.childrenByKey[key] ?? []; {#each items as item} {/each} -{#if model.dirsByKey[root]?.shouldLoadNext} +{#if model.dirsByKey[key]?.shouldLoadNext} -{:else if model.dirsByKey[root]?.hasNext} +{:else if model.dirsByKey[key]?.hasNext} { - changeModel(model => dbKeys_markNodeExpanded(model, root, true)); + changeModel(model => dbKeys_markNodeExpanded(model, key, true)); }} /> {/if} diff --git a/packages/web/src/widgets/DbKeysTree.svelte b/packages/web/src/widgets/DbKeysTree.svelte index ed39398d1..3e25d2ea9 100644 --- a/packages/web/src/widgets/DbKeysTree.svelte +++ b/packages/web/src/widgets/DbKeysTree.svelte @@ -1,8 +1,8 @@