fix(objects): preserve category filter per tab
This commit is contained in:
11 files changed
+47
-32
No files matched your search
@@ -80,21 +80,24 @@ describe("queryStore database open state", () => {
|
||||
expect(store.tabs.filter((tab) => tab.mode === "dolt-version-control")).toHaveLength(2);
|
||||
});
|
||||
|
||||
it("keeps object browser search and viewport per tab", async () => {
|
||||
it("keeps object browser filter, search, and viewport per tab", async () => {
|
||||
const { useQueryStore } = await import("@/stores/queryStore");
|
||||
const store = useQueryStore();
|
||||
|
||||
const tabId = store.openObjectBrowser("pg-1", "app", "public");
|
||||
store.updateObjectBrowserFilter(tabId, "views");
|
||||
store.updateObjectBrowserSearch(tabId, "orders");
|
||||
store.updateObjectBrowserViewport(tabId, { scrollTop: 340, viewMode: "list" });
|
||||
|
||||
const tab = store.tabs.find((item) => item.id === tabId);
|
||||
expect(tab?.objectBrowser?.filter).toBe("views");
|
||||
expect(tab?.objectBrowser?.searchQuery).toBe("orders");
|
||||
expect(tab?.objectBrowser?.viewport).toEqual({ scrollTop: 340, viewMode: "list" });
|
||||
|
||||
const otherTabId = store.createTab("pg-1", "app", "query");
|
||||
store.switchTab(otherTabId);
|
||||
store.switchTab(tabId);
|
||||
expect(store.tabs.find((item) => item.id === tabId)?.objectBrowser?.filter).toBe("views");
|
||||
expect(store.tabs.find((item) => item.id === tabId)?.objectBrowser?.searchQuery).toBe("orders");
|
||||
|
||||
store.updateSchema(tabId, "archive");
|
||||
@@ -102,6 +105,7 @@ describe("queryStore database open state", () => {
|
||||
expect(tab?.objectBrowser?.schema).toBe("archive");
|
||||
// The keyword intentionally survives a schema switch: the mounted browser keeps its local search too.
|
||||
expect(tab?.objectBrowser?.searchQuery).toBe("orders");
|
||||
expect(tab?.objectBrowser?.filter).toBeUndefined();
|
||||
expect(tab?.objectBrowser?.viewport).toBeUndefined();
|
||||
});
|
||||
|
||||
|
||||
@@ -77,6 +77,10 @@ describe("queryStore MySQL Event create navigation", () => {
|
||||
expect(tab.objectBrowser?.eventCreateRequestId).toBeUndefined();
|
||||
expect(tab.objectBrowser?.initialObjectFilter).toBe("events");
|
||||
|
||||
store.updateObjectBrowserFilter(tabId, "tables");
|
||||
expect(tab.objectBrowser?.filter).toBe("tables");
|
||||
expect(tab.objectBrowser?.initialObjectFilter).toBe("events");
|
||||
|
||||
// Re-opening the same existing event on the reused tab increments edit request id
|
||||
store.openObjectBrowser("mysql-1", "shop", undefined, undefined, "foo_event", true, "events");
|
||||
expect(tab.objectBrowser?.eventOpenRequestId).toBe(2);
|
||||
|
||||
@@ -3,7 +3,7 @@ import { defineStore } from "pinia";
|
||||
import { uuid } from "@/lib/common/utils";
|
||||
import { computed, markRaw, nextTick, onScopeDispose, reactive, ref, watch } from "vue";
|
||||
import { useI18n } from "vue-i18n";
|
||||
import type { BatchSqlExecution, ConnectionConfig, DatabaseType, IndexInfo, NacosConfigEditorViewport, ObjectBrowserViewport, QueryResult, QueryResultSourceColumnRef, QueryTab, TableInfoTab, TableStructureEditorTarget } from "@/types/database";
|
||||
import type { BatchSqlExecution, ConnectionConfig, DatabaseType, IndexInfo, NacosConfigEditorViewport, ObjectBrowserFilter, ObjectBrowserViewport, QueryResult, QueryResultSourceColumnRef, QueryTab, TableInfoTab, TableStructureEditorTarget } from "@/types/database";
|
||||
import { orderPinnedFirst } from "@/lib/app/pinnedItems";
|
||||
import { canCancelQueryExecution } from "@/lib/sql/queryExecutionState";
|
||||
import { buildExplainSql, parseExplainResult, parseDamengExplainText, parseOracleExplainText, sqlServerExplainResult, type BuildExplainSqlResult, type ExplainPlanDatabaseType } from "@/lib/diagram/explainPlan";
|
||||
@@ -4193,6 +4193,12 @@ export const useQueryStore = defineStore("query", () => {
|
||||
tab.objectBrowser = { ...tab.objectBrowser, searchQuery: query };
|
||||
}
|
||||
|
||||
function updateObjectBrowserFilter(id: string, filter: ObjectBrowserFilter) {
|
||||
const tab = tabs.value.find((t) => t.id === id);
|
||||
if (!tab || tab.mode !== "objects" || tab.objectBrowser?.filter === filter) return;
|
||||
tab.objectBrowser = { ...tab.objectBrowser, filter };
|
||||
}
|
||||
|
||||
function updateNacosConfigEditorViewport(connectionId: string, namespace: string, viewport: NacosConfigEditorViewport) {
|
||||
if (!Number.isFinite(viewport.scrollTop) || !Number.isFinite(viewport.scrollLeft)) return;
|
||||
const tab = tabs.value.find((candidate) => candidate.mode === "nacos" && candidate.connectionId === connectionId && (candidate.nacosNamespace || "") === namespace);
|
||||
@@ -4437,7 +4443,7 @@ export const useQueryStore = defineStore("query", () => {
|
||||
clearExplain(tab);
|
||||
}
|
||||
tab.schema = schema;
|
||||
if (tab.mode === "objects") tab.objectBrowser = { ...tab.objectBrowser, schema, viewport: undefined };
|
||||
if (tab.mode === "objects") tab.objectBrowser = { ...tab.objectBrowser, schema, filter: undefined, viewport: undefined };
|
||||
persistSavedSqlExecutionTarget(tab, options);
|
||||
}
|
||||
|
||||
@@ -7903,6 +7909,7 @@ export const useQueryStore = defineStore("query", () => {
|
||||
flushEditorState,
|
||||
updateObjectBrowserViewport,
|
||||
updateObjectBrowserSearch,
|
||||
updateObjectBrowserFilter,
|
||||
updateNacosConfigEditorViewport,
|
||||
setAutoCommit,
|
||||
markManualTransactionDirty,
|
||||
|
||||
Reference in new issue
Block a user