From 5490ed007e67de98de22883808d528c4cf2e02ae Mon Sep 17 00:00:00 2001 From: t8y2 <1156263951@qq.com> Date: Thu, 30 Apr 2026 14:29:25 +0800 Subject: [PATCH] refactor(redis): keep keys out of sidebar tree --- src/components/sidebar/TreeItem.vue | 21 +++--------- src/i18n/locales/en.ts | 1 - src/i18n/locales/zh-CN.ts | 1 - src/stores/connectionStore.ts | 52 ----------------------------- src/types/database.ts | 4 +-- 5 files changed, 6 insertions(+), 73 deletions(-) diff --git a/src/components/sidebar/TreeItem.vue b/src/components/sidebar/TreeItem.vue index 782358cc91..26771efc12 100644 --- a/src/components/sidebar/TreeItem.vue +++ b/src/components/sidebar/TreeItem.vue @@ -66,8 +66,6 @@ function getIconInfo(node: TreeNode): { icon: any; colorClass: string } | null { return { icon: Zap, colorClass: "text-orange-300" }; case "redis-db": return { icon: Database, colorClass: "text-red-400" }; - case "redis-key": - return { icon: Key, colorClass: "text-red-300" }; case "mongo-db": return { icon: Database, colorClass: "text-green-500" }; case "mongo-collection": @@ -77,7 +75,7 @@ function getIconInfo(node: TreeNode): { icon: any; colorClass: string } | null { } } -const leafTypes: Set = new Set(["column", "index", "fkey", "trigger", "redis-key"]); +const leafTypes: Set = new Set(["column", "index", "fkey", "trigger", "redis-db"]); const groupTypes: Set = new Set(["group-columns", "group-indexes", "group-fkeys", "group-triggers"]); function isGroupLabel(node: TreeNode): boolean { @@ -101,7 +99,6 @@ async function toggle() { } else if (node.type === "redis-db" && node.connectionId && node.database) { const tabTitle = `${connectionStore.getConfig(node.connectionId)?.name || "Redis"}:db${node.database}`; queryStore.createTab(node.connectionId, node.database, tabTitle, "redis"); - await connectionStore.loadRedisKeys(node.connectionId, Number(node.database), node.id); } else if (node.type === "mongo-db" && node.connectionId && node.database) { await connectionStore.loadMongoCollections(node.connectionId, node.database); } else if (node.type === "mongo-collection" && node.connectionId && node.database) { @@ -135,6 +132,8 @@ function onClick() { if (node.type === "table" || node.type === "view") { openData(); toggle(); + } else if (node.type === "redis-db") { + toggle(); } else if (canExpand) { toggle(); } @@ -180,8 +179,6 @@ async function refresh() { const node = props.node; node.isExpanded = false; node.children = []; - node.scanCursor = undefined; - node.hasMore = undefined; await toggle(); } @@ -241,9 +238,7 @@ const visibleChildren = computed(() => { return props.node.children.slice(0, displayLimit.value); }); -const hasMoreChildren = computed(() => - (props.node.children?.length ?? 0) > displayLimit.value || !!props.node.hasMore -); +const hasMoreChildren = computed(() => (props.node.children?.length ?? 0) > displayLimit.value); const remainingCount = computed(() => (props.node.children?.length ?? 0) - displayLimit.value @@ -252,12 +247,6 @@ const remainingCount = computed(() => async function showMore() { if ((props.node.children?.length ?? 0) > displayLimit.value) { displayLimit.value += CHILDREN_PAGE_SIZE; - return; - } - - if (props.node.type === "redis-db" && props.node.connectionId && props.node.database && props.node.hasMore) { - await connectionStore.loadMoreRedisKeys(props.node.connectionId, Number(props.node.database), props.node.id); - displayLimit.value += CHILDREN_PAGE_SIZE; } } @@ -292,7 +281,7 @@ async function showMore() { @click="showMore" > - {{ node.hasMore && remainingCount <= 0 ? t('sidebar.loadMore') : t('sidebar.showMore', { count: Math.min(CHILDREN_PAGE_SIZE, remainingCount) }) }} + {{ t('sidebar.showMore', { count: Math.min(CHILDREN_PAGE_SIZE, remainingCount) }) }} diff --git a/src/i18n/locales/en.ts b/src/i18n/locales/en.ts index 1cb4381369..af62929032 100644 --- a/src/i18n/locales/en.ts +++ b/src/i18n/locales/en.ts @@ -14,7 +14,6 @@ export default { import: "Import Connections", export: "Export Connections", showMore: "Show {count} more...", - loadMore: "Load more...", }, connection: { title: "New Connection", diff --git a/src/i18n/locales/zh-CN.ts b/src/i18n/locales/zh-CN.ts index 698a50f405..cdd975e4ba 100644 --- a/src/i18n/locales/zh-CN.ts +++ b/src/i18n/locales/zh-CN.ts @@ -14,7 +14,6 @@ export default { import: "导入连接", export: "导出连接", showMore: "加载更多 ({count})...", - loadMore: "继续加载...", }, connection: { title: "新建连接", diff --git a/src/stores/connectionStore.ts b/src/stores/connectionStore.ts index a18582d2c0..63ded16762 100644 --- a/src/stores/connectionStore.ts +++ b/src/stores/connectionStore.ts @@ -161,56 +161,6 @@ export const useConnectionStore = defineStore("connection", () => { } } - async function loadRedisKeys(connectionId: string, db: number, nodeId: string) { - const node = findNode(treeNodes.value, nodeId); - if (!node) return; - - node.isLoading = true; - try { - const result = await api.redisScanKeys(connectionId, db, 0, "*", 200); - node.scanCursor = result.cursor; - node.hasMore = result.cursor !== 0; - node.children = result.keys.map((k) => ({ - id: `${nodeId}:${k.key}`, - label: `${k.key} [${k.key_type}]${k.ttl > 0 ? ` TTL:${k.ttl}` : ""}`, - type: "redis-key" as const, - connectionId, - database: String(db), - isExpanded: false, - })); - node.isExpanded = true; - } finally { - node.isLoading = false; - } - } - - async function loadMoreRedisKeys(connectionId: string, db: number, nodeId: string) { - const node = findNode(treeNodes.value, nodeId); - if (!node || node.isLoading || !node.hasMore) return; - - node.isLoading = true; - try { - const result = await api.redisScanKeys(connectionId, db, node.scanCursor ?? 0, "*", 200); - const existingIds = new Set((node.children ?? []).map((child) => child.id)); - const moreChildren = result.keys - .filter((k) => !existingIds.has(`${nodeId}:${k.key}`)) - .map((k) => ({ - id: `${nodeId}:${k.key}`, - label: `${k.key} [${k.key_type}]${k.ttl > 0 ? ` TTL:${k.ttl}` : ""}`, - type: "redis-key" as const, - connectionId, - database: String(db), - isExpanded: false, - })); - - node.scanCursor = result.cursor; - node.hasMore = result.cursor !== 0; - node.children = [...(node.children ?? []), ...moreChildren]; - } finally { - node.isLoading = false; - } - } - async function loadMongoDatabases(connectionId: string) { const node = findNode(treeNodes.value, connectionId); if (!node) return; @@ -506,8 +456,6 @@ export const useConnectionStore = defineStore("connection", () => { initFromDisk, loadDatabases, loadRedisDatabases, - loadRedisKeys, - loadMoreRedisKeys, loadMongoDatabases, loadMongoCollections, loadSchemas, diff --git a/src/types/database.ts b/src/types/database.ts index 501d044b16..bc5705414b 100644 --- a/src/types/database.ts +++ b/src/types/database.ts @@ -72,7 +72,7 @@ export type TreeNodeType = | "connection" | "database" | "schema" | "table" | "view" | "group-columns" | "group-indexes" | "group-fkeys" | "group-triggers" | "column" | "index" | "fkey" | "trigger" - | "redis-db" | "redis-key" + | "redis-db" | "mongo-db" | "mongo-collection"; export interface TreeNode { @@ -82,8 +82,6 @@ export interface TreeNode { children?: TreeNode[]; isLoading?: boolean; isExpanded?: boolean; - scanCursor?: number; - hasMore?: boolean; connectionId?: string; database?: string; schema?: string;