feat: add connection management UI
Add TypeScript types, typed Tauri invoke wrappers, Zustand store, TanStack Query hooks, and connection components: ConnectionDialog (create/edit/test), ConnectionList (sheet panel), ConnectionSelector (toolbar dropdown). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
132
src/lib/tauri.ts
Normal file
132
src/lib/tauri.ts
Normal file
@@ -0,0 +1,132 @@
|
||||
import { invoke } from "@tauri-apps/api/core";
|
||||
import type {
|
||||
ConnectionConfig,
|
||||
QueryResult,
|
||||
PaginatedQueryResult,
|
||||
SchemaObject,
|
||||
ColumnInfo,
|
||||
ConstraintInfo,
|
||||
IndexInfo,
|
||||
} from "@/types";
|
||||
|
||||
// Connections
|
||||
export const getConnections = () =>
|
||||
invoke<ConnectionConfig[]>("get_connections");
|
||||
|
||||
export const saveConnection = (config: ConnectionConfig) =>
|
||||
invoke<void>("save_connection", { config });
|
||||
|
||||
export const deleteConnection = (id: string) =>
|
||||
invoke<void>("delete_connection", { id });
|
||||
|
||||
export const testConnection = (config: ConnectionConfig) =>
|
||||
invoke<string>("test_connection", { config });
|
||||
|
||||
export const connectDb = (config: ConnectionConfig) =>
|
||||
invoke<void>("connect", { config });
|
||||
|
||||
export const disconnectDb = (id: string) =>
|
||||
invoke<void>("disconnect", { id });
|
||||
|
||||
export const switchDatabase = (config: ConnectionConfig, database: string) =>
|
||||
invoke<void>("switch_database", { config, database });
|
||||
|
||||
// Queries
|
||||
export const executeQuery = (connectionId: string, sql: string) =>
|
||||
invoke<QueryResult>("execute_query", { connectionId, sql });
|
||||
|
||||
// Schema
|
||||
export const listDatabases = (connectionId: string) =>
|
||||
invoke<string[]>("list_databases", { connectionId });
|
||||
|
||||
export const listSchemas = (connectionId: string) =>
|
||||
invoke<string[]>("list_schemas", { connectionId });
|
||||
|
||||
export const listTables = (connectionId: string, schema: string) =>
|
||||
invoke<SchemaObject[]>("list_tables", { connectionId, schema });
|
||||
|
||||
export const listViews = (connectionId: string, schema: string) =>
|
||||
invoke<SchemaObject[]>("list_views", { connectionId, schema });
|
||||
|
||||
export const listFunctions = (connectionId: string, schema: string) =>
|
||||
invoke<SchemaObject[]>("list_functions", { connectionId, schema });
|
||||
|
||||
export const listIndexes = (connectionId: string, schema: string) =>
|
||||
invoke<SchemaObject[]>("list_indexes", { connectionId, schema });
|
||||
|
||||
export const listSequences = (connectionId: string, schema: string) =>
|
||||
invoke<SchemaObject[]>("list_sequences", { connectionId, schema });
|
||||
|
||||
export const getTableColumns = (
|
||||
connectionId: string,
|
||||
schema: string,
|
||||
table: string
|
||||
) => invoke<ColumnInfo[]>("get_table_columns", { connectionId, schema, table });
|
||||
|
||||
export const getTableConstraints = (
|
||||
connectionId: string,
|
||||
schema: string,
|
||||
table: string
|
||||
) =>
|
||||
invoke<ConstraintInfo[]>("get_table_constraints", {
|
||||
connectionId,
|
||||
schema,
|
||||
table,
|
||||
});
|
||||
|
||||
export const getTableIndexes = (
|
||||
connectionId: string,
|
||||
schema: string,
|
||||
table: string
|
||||
) => invoke<IndexInfo[]>("get_table_indexes", { connectionId, schema, table });
|
||||
|
||||
// Data
|
||||
export const getTableData = (params: {
|
||||
connectionId: string;
|
||||
schema: string;
|
||||
table: string;
|
||||
page: number;
|
||||
pageSize: number;
|
||||
sortColumn?: string;
|
||||
sortDirection?: string;
|
||||
filter?: string;
|
||||
}) => invoke<PaginatedQueryResult>("get_table_data", params);
|
||||
|
||||
export const updateRow = (params: {
|
||||
connectionId: string;
|
||||
schema: string;
|
||||
table: string;
|
||||
pkColumns: string[];
|
||||
pkValues: unknown[];
|
||||
column: string;
|
||||
value: unknown;
|
||||
}) => invoke<void>("update_row", params);
|
||||
|
||||
export const insertRow = (params: {
|
||||
connectionId: string;
|
||||
schema: string;
|
||||
table: string;
|
||||
columns: string[];
|
||||
values: unknown[];
|
||||
}) => invoke<void>("insert_row", params);
|
||||
|
||||
export const deleteRows = (params: {
|
||||
connectionId: string;
|
||||
schema: string;
|
||||
table: string;
|
||||
pkColumns: string[];
|
||||
pkValuesList: unknown[][];
|
||||
}) => invoke<number>("delete_rows", params);
|
||||
|
||||
// Export
|
||||
export const exportCsv = (
|
||||
path: string,
|
||||
columns: string[],
|
||||
rows: unknown[][]
|
||||
) => invoke<void>("export_csv", { path, columns, rows });
|
||||
|
||||
export const exportJson = (
|
||||
path: string,
|
||||
columns: string[],
|
||||
rows: unknown[][]
|
||||
) => invoke<void>("export_json", { path, columns, rows });
|
||||
Reference in New Issue
Block a user