Files
db-studio/frontend/src/services/db/db.hooks.ts
2024-07-07 13:10:31 +02:00

78 lines
2.3 KiB
TypeScript

import { useQuery } from "@tanstack/react-query";
import { DB_QUERY_KEYS } from "./db.query-keys";
import { dbService } from "./db.service";
import type {
GetTableColumnsArgs,
GetTableDataArgs,
GetTableForeignKeysArgs,
GetTableIndexesArgs,
GetTablesListArgs,
} from "./db.types";
export const useDatabasesListQuery = () => {
return useQuery({
queryKey: [DB_QUERY_KEYS.DATABASES.ALL],
queryFn: () => dbService.getDatabasesList(),
});
};
export const useTablesListQuery = (args: GetTablesListArgs) => {
return useQuery({
queryKey: [DB_QUERY_KEYS.TABLES.ALL, args],
queryFn: () => dbService.getTablesList(args),
enabled: !!args.dbName,
});
};
export const useTableDataQuery = (args: GetTableDataArgs) => {
return useQuery({
queryKey: [DB_QUERY_KEYS.TABLES.DATA, args],
queryFn: () => dbService.getTableData(args),
placeholderData: (previousData, previousQuery) => {
if (
typeof previousQuery?.queryKey[1] !== "string" &&
(previousQuery?.queryKey[1].dbName !== args.dbName ||
previousQuery?.queryKey[1].tableName !== args.tableName)
) {
return undefined;
}
return previousData;
},
enabled: !!args.tableName && !!args.dbName,
});
};
export const useTableColumnsQuery = (args: GetTableColumnsArgs) => {
return useQuery({
queryKey: [DB_QUERY_KEYS.TABLES.COLUMNS, args],
queryFn: () => dbService.getTableColumns(args),
placeholderData: (previousData, previousQuery) => {
if (
typeof previousQuery?.queryKey[1] !== "string" &&
(previousQuery?.queryKey[1].dbName !== args.dbName ||
previousQuery?.queryKey[1].tableName !== args.tableName)
) {
return undefined;
}
return previousData;
},
enabled: !!args.tableName && !!args.dbName,
});
};
export const useTableIndexesQuery = (args: GetTableIndexesArgs) => {
return useQuery({
queryKey: [DB_QUERY_KEYS.TABLES.INDEXES, args],
queryFn: () => dbService.getTableIndexes(args),
enabled: !!args.tableName && !!args.dbName,
});
};
export const useTableForeignKeysQuery = (args: GetTableForeignKeysArgs) => {
return useQuery({
queryKey: [DB_QUERY_KEYS.TABLES.FOREIGN_KEYS, args],
queryFn: () => dbService.getTableForeignKeys(args),
enabled: !!args.tableName && !!args.dbName,
});
};