- Tiptap Node extension (database-view) with attrs tableId/viewId/viewType/bridgeUrl - NodeViewWrapper dispatches on viewType: grid/table -> TableRenderer, other -> PlaceholderRenderer - TableRenderer (HTML table, TanStack Table v8 migration-ready - dep not yet installed) - InsertDatabaseModal (Mantine, 2-step: table -> view selection) - useDatabaseRealtimeUpdates SSE hook (EventSource + exponential backoff + React Query invalidation) - bridge-client.ts (axios wrapper, per-origin singleton, cookie Bearer passthrough) - Slash command /database registered in menu-items CommandGroups - DatabaseViewExtension wired in mainExtensions array - i18n: 22 keys added in en-US and fr-FR - 41 Vitest tests across 5 suites (extension schema, component dispatch, renderer states, modal steps, SSE hook) Upstream patches: extensions.ts (+2 lines), menu-items.ts (+4 lines), 2 translation files Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
30 lines
1,011 B
TypeScript
30 lines
1,011 B
TypeScript
import { useQuery } from "@tanstack/react-query";
|
|
import { getBridgeClient, resolveBridgeUrl } from "../services/bridge-client";
|
|
import type { BridgeView } from "../types/database-view.types";
|
|
|
|
export const viewsQueryKey = (tableId: string, bridgeUrl: string) =>
|
|
["bridge-views", tableId, bridgeUrl] as const;
|
|
|
|
/**
|
|
* Fetches the list of views for a given table.
|
|
* Used in the insert-database-modal step 2.
|
|
*/
|
|
export function useViews(
|
|
tableId: string | null | undefined,
|
|
bridgeUrl?: string | null,
|
|
) {
|
|
const url = resolveBridgeUrl(bridgeUrl);
|
|
|
|
return useQuery<BridgeView[]>({
|
|
queryKey: viewsQueryKey(tableId ?? "", url),
|
|
enabled: Boolean(tableId),
|
|
queryFn: async () => {
|
|
const client = getBridgeClient(url);
|
|
const res = await (client.get(
|
|
`/api/v1/views/table/${tableId}`,
|
|
) as unknown as Promise<{ data: BridgeView[] } | BridgeView[]>);
|
|
return Array.isArray(res) ? res : (res as { data: BridgeView[] }).data ?? [];
|
|
},
|
|
staleTime: 30_000,
|
|
});
|
|
}
|