From a4bd62005bcc662bef4fe4f9eec55c0b58b7a001 Mon Sep 17 00:00:00 2001 From: t8y2 <1156263951@qq.com> Date: Fri, 12 Jun 2026 11:32:40 +0800 Subject: [PATCH] feat(redis): add all search mode --- .../src/components/redis/RedisKeyBrowser.vue | 21 ++++-- apps/desktop/src/i18n/locales/en.ts | 3 + apps/desktop/src/i18n/locales/es.ts | 3 + apps/desktop/src/i18n/locales/it.ts | 3 + apps/desktop/src/i18n/locales/pt-BR.ts | 3 + apps/desktop/src/i18n/locales/zh-CN.ts | 3 + apps/desktop/src/i18n/locales/zh-TW.ts | 3 + apps/desktop/src/lib/http.ts | 4 +- apps/desktop/src/lib/tauri.ts | 4 +- crates/dbx-core/src/db/redis_driver.rs | 68 +++++++++++++++++-- crates/dbx-core/src/redis_ops.rs | 6 +- crates/dbx-web/src/routes/redis.rs | 2 + src-tauri/src/commands/redis_cmd.rs | 13 +++- 13 files changed, 118 insertions(+), 18 deletions(-) diff --git a/apps/desktop/src/components/redis/RedisKeyBrowser.vue b/apps/desktop/src/components/redis/RedisKeyBrowser.vue index 57bfa0aa4..1988462ba 100644 --- a/apps/desktop/src/components/redis/RedisKeyBrowser.vue +++ b/apps/desktop/src/components/redis/RedisKeyBrowser.vue @@ -35,7 +35,7 @@ const connectionStore = useConnectionStore(); const settingsStore = useSettingsStore(); const editorFontFamilyStyle = useEditorFontFamilyStyle(); -type RedisSearchMode = "key" | "value"; +type RedisSearchMode = "key" | "value" | "all"; type RedisCreateKeyType = "string" | "hash" | "list" | "set" | "zset" | "stream" | "json"; interface CreateKeyEntry { @@ -100,10 +100,14 @@ let redisBrowserIsActive = true; let redisDbFlushedListenerRegistered = false; const valueQuery = computed(() => searchPattern.value.trim()); +const isValueSearchMode = computed(() => searchMode.value === "value" || searchMode.value === "all"); const effectivePattern = computed(() => (searchMode.value === "key" ? redisKeySearchPattern(searchPattern.value, fuzzyKeySearch.value) : "*")); const isSearchMode = computed(() => (searchMode.value === "key" ? effectivePattern.value !== "*" : valueQuery.value !== "")); -const searchPlaceholder = computed(() => (searchMode.value === "key" ? (fuzzyKeySearch.value ? t("redis.fuzzyPattern") : t("redis.pattern")) : t("redis.valueSearchPlaceholder"))); -const loadingEmptyText = computed(() => (searchMode.value === "value" && valueQuery.value ? t("redis.searchingValues") : t("redis.loadingKeys"))); +const searchPlaceholder = computed(() => { + if (searchMode.value === "key") return fuzzyKeySearch.value ? t("redis.fuzzyPattern") : t("redis.pattern"); + return searchMode.value === "all" ? t("redis.allSearchPlaceholder") : t("redis.valueSearchPlaceholder"); +}); +const loadingEmptyText = computed(() => (isValueSearchMode.value && valueQuery.value ? t(searchMode.value === "all" ? "redis.searchingAll" : "redis.searchingValues") : t("redis.loadingKeys"))); const redisKeySeparator = computed(() => connectionStore.getConfig(props.connectionId)?.redis_key_separator ?? ":"); watch(redisKeySeparator, () => { if (flatKeys.value.length > 0) rebuildTree(false); @@ -192,7 +196,7 @@ function mergeTree(newKeys: RedisKeyInfo[]) { async function fetchScanPage(): Promise { const pageSize = settingsStore.editorSettings.redisScanPageSize; - return searchMode.value === "value" ? await api.redisScanValues(props.connectionId, props.db, scanCursor.value, "*", valueQuery.value, pageSize) : await api.redisScanKeys(props.connectionId, props.db, scanCursor.value, effectivePattern.value, pageSize); + return isValueSearchMode.value ? await api.redisScanValues(props.connectionId, props.db, scanCursor.value, "*", valueQuery.value, pageSize, searchMode.value === "all") : await api.redisScanKeys(props.connectionId, props.db, scanCursor.value, effectivePattern.value, pageSize); } function appendScanResult(result: RedisScanResult) { @@ -223,7 +227,7 @@ async function scanNextPage(requestId = searchRequestId): Promise { } async function streamValueSearch(requestId: number) { - while (requestId === searchRequestId && searchMode.value === "value" && valueQuery.value && hasMore.value) { + while (requestId === searchRequestId && isValueSearchMode.value && valueQuery.value && hasMore.value) { const applied = await scanNextPage(requestId); if (!applied) return; } @@ -255,13 +259,13 @@ async function loadKeys() { expandedGroupIds.value = new Set(); scanCursor.value = 0; try { - if (searchMode.value === "value" && !valueQuery.value) { + if (isValueSearchMode.value && !valueQuery.value) { hasMore.value = false; return; } const applied = await scanNextPage(requestId); if (applied) { - if (searchMode.value === "value") { + if (isValueSearchMode.value) { await streamValueSearch(requestId); } else { await fillInitialKeyBatch(requestId); @@ -849,6 +853,9 @@ defineExpose({ focusSearch }); +