mirror of
https://github.com/supabase/supabase.git
synced 2026-06-14 14:08:31 +08:00
## I have read the [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) file. YES ## What kind of change does this PR introduce? Performance improvement / feature ## What is the current behavior? The Schema Designer fetches all tables in a single request via `useTablesQuery`. For schemas with 400+ tables this blocks first paint on a large payload. ## What is the new behavior? `SchemaGraph` uses `useInfiniteTablesQuery` (pageSize: 100) so the first 100 tables paint immediately. A "Load more tables" button appears above the legend whenever more pages remain, letting users load the rest on demand. ## Additional context <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added a "Find table…" selector and keyboard shortcut to quickly locate and focus tables; supports incremental loading and debounced name search (with literal wildcard handling). * Schema Graph shows a bottom "Load more tables" control with loading state and preserves view after loading more. * **Refactor** * Table listing switched to infinite/paginated retrieval and improved "no tables" logic; server-side name filtering supported. * **Tests** * E2E tests add a schema-visualizer wait helper and update flows to support the paginated visualizer. <!-- review_stack_entry_start --> [](https://app.coderabbit.ai/change-stack/supabase/supabase/pull/46402?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack) <!-- review_stack_entry_end --> <!-- end of auto-generated comment: release notes by coderabbit.ai -->
17 lines
893 B
TypeScript
17 lines
893 B
TypeScript
export const tableKeys = {
|
|
names: (projectRef: string | undefined) => ['projects', projectRef, 'table-names'] as const,
|
|
list: (projectRef: string | undefined, schema?: string, includeColumns?: boolean) =>
|
|
['projects', projectRef, 'tables', schema, includeColumns].filter(Boolean),
|
|
infiniteListPrefix: (projectRef: string | undefined, schema?: string) =>
|
|
['projects', projectRef, 'tables', 'infinite', schema].filter(
|
|
(part) => part !== undefined && part !== null && part !== ''
|
|
),
|
|
infiniteList: (
|
|
projectRef: string | undefined,
|
|
schema: string | undefined,
|
|
options: { includeColumns?: boolean; pageSize?: number; nameFilter?: string }
|
|
) => [...tableKeys.infiniteListPrefix(projectRef, schema), options],
|
|
retrieve: (projectRef: string | undefined, name: string, schema: string) =>
|
|
['projects', projectRef, 'table', schema, name].filter(Boolean),
|
|
}
|