mirror of
https://github.com/supabase/supabase.git
synced 2026-10-09 03:15:06 +03:00
Hides the "Multigres" term from user-facing surfaces — it's the tech powering High Availability projects, but "High Availability" is the only term users should see for now (per Slack discussion with Saxon/Ivan). **Changed:** - High Availability badge hover card (project overview) no longer says "Driven by Multigres" - Project creation HA toggle description drops the Multigres name + multigres.com link, keeps the informational copy - All schema dropdowns now hide the `multigres` schema on HA projects, by wiring in the previously-unused `filterSchemasForHighAvailability` helper: - `SchemaSelector` (shared — Table Editor, Functions, Indexes, Triggers, Schema Visualizer, etc.) - `ExposedSchemaSelector` (API settings → exposed schemas) - `EnableExtensionModal`, `CreateIndexSidePanel`, `ForeignKeySelector`, `WrapperTableEditor`, Integrations install sheet `AdvancedSettings` - SQL editor schema autocomplete (`useAddDefinitions`) - Schema list computations in the touched components are now memoized (incl. stabilizing `SchemaSelector`'s `excludedSchemas` default so the memo actually holds) **Added:** - Unit tests for `filterSchemasForHighAvailability` / `resolveHighAvailability` - MSW component test for `SchemaSelector` asserting `multigres` is hidden on HA projects and still shown on non-HA projects The filter is HA-gated on purpose: a self-hosted/non-HA user with their own schema named `multigres` still sees it. The flag-gated Multigres option in Logs is intentionally untouched — that exposure is kept for the Multigres team's debugging (separate track). ## To test - On an HA project (`high_availability: true`): hover the High Availability badge on project overview — no "Multigres" mention; open schema dropdowns in Table Editor / Database pages / SQL editor autocomplete — no `multigres` schema - Project creation with HA entitlement: toggle description has no Multigres wording/link - On a non-HA project: schema dropdowns behave as before <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Improvements** * Made schema dropdowns and related selectors high-availability aware across extensions, indexes, integrations, SQL editing, API exposed schemas, and relationship editors. * Updated project high-availability UI text and badge hover description to remove outdated branding and clarify horizontally scalable Postgres architecture. * **Tests** * Added coverage to ensure the schema “multigres” option is hidden/shown correctly based on high availability, and validated high-availability value handling. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Alaister Young <10985857+alaister@users.noreply.github.com>
116 lines
4.0 KiB
TypeScript
116 lines
4.0 KiB
TypeScript
import { Monaco } from '@monaco-editor/react'
|
|
import { LOCAL_STORAGE_KEYS } from 'common'
|
|
import type { IDisposable } from 'monaco-editor'
|
|
import { useEffect, useRef } from 'react'
|
|
|
|
import getPgsqlCompletionProvider from '@/components/ui/CodeEditor/Providers/PgSQLCompletionProvider'
|
|
import getPgsqlSignatureHelpProvider from '@/components/ui/CodeEditor/Providers/PgSQLSignatureHelpProvider'
|
|
import { useDatabaseFunctionsQuery } from '@/data/database-functions/database-functions-query'
|
|
import { useKeywordsQuery } from '@/data/database/keywords-query'
|
|
import { useSchemasQuery } from '@/data/database/schemas-query'
|
|
import { useTableColumnsQuery } from '@/data/database/table-columns-query'
|
|
import { useSchemasFilteredForHighAvailability } from '@/hooks/misc/useHighAvailability'
|
|
import { useLocalStorageQuery } from '@/hooks/misc/useLocalStorage'
|
|
import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject'
|
|
import { formatSql } from '@/lib/formatSql'
|
|
import { useSqlEditorV2StateSnapshot } from '@/state/sql-editor/sql-editor-state'
|
|
|
|
export const useAddDefinitions = (id: string, monaco: Monaco | null) => {
|
|
const { data: project } = useSelectedProjectQuery()
|
|
const snapV2 = useSqlEditorV2StateSnapshot()
|
|
|
|
const [intellisenseEnabled] = useLocalStorageQuery(
|
|
LOCAL_STORAGE_KEYS.SQL_EDITOR_INTELLISENSE,
|
|
true
|
|
)
|
|
|
|
const { data: keywords, isSuccess: isKeywordsSuccess } = useKeywordsQuery(
|
|
{
|
|
projectRef: project?.ref,
|
|
connectionString: project?.connectionString,
|
|
},
|
|
{ enabled: intellisenseEnabled }
|
|
)
|
|
const { data: functions, isSuccess: isFunctionsSuccess } = useDatabaseFunctionsQuery(
|
|
{
|
|
projectRef: project?.ref,
|
|
connectionString: project?.connectionString,
|
|
},
|
|
{ enabled: intellisenseEnabled }
|
|
)
|
|
const { data: schemas, isSuccess: isSchemasSuccess } = useSchemasQuery(
|
|
{
|
|
projectRef: project?.ref,
|
|
connectionString: project?.connectionString,
|
|
},
|
|
{ enabled: intellisenseEnabled }
|
|
)
|
|
const { data: tableColumns, isSuccess: isTableColumnsSuccess } = useTableColumnsQuery(
|
|
{
|
|
projectRef: project?.ref,
|
|
connectionString: project?.connectionString,
|
|
},
|
|
{ enabled: intellisenseEnabled }
|
|
)
|
|
|
|
const pgInfoRef = useRef<any>(null)
|
|
|
|
const filteredSchemas = useSchemasFilteredForHighAvailability(schemas)
|
|
|
|
const isPgInfoReady =
|
|
intellisenseEnabled &&
|
|
isTableColumnsSuccess &&
|
|
isSchemasSuccess &&
|
|
isKeywordsSuccess &&
|
|
isFunctionsSuccess
|
|
|
|
if (isPgInfoReady) {
|
|
if (pgInfoRef.current === null) {
|
|
pgInfoRef.current = {}
|
|
}
|
|
pgInfoRef.current.tableColumns = tableColumns
|
|
pgInfoRef.current.schemas = filteredSchemas
|
|
pgInfoRef.current.keywords = keywords
|
|
pgInfoRef.current.functions = functions
|
|
}
|
|
|
|
// Enable pgsql format
|
|
useEffect(() => {
|
|
if (monaco) {
|
|
const formatProvider = monaco.languages.registerDocumentFormattingEditProvider('pgsql', {
|
|
async provideDocumentFormattingEdits(model) {
|
|
const value = model.getValue()
|
|
const formatted = formatSql(value)
|
|
if (id) snapV2.setSql({ id, sql: formatted })
|
|
return [{ range: model.getFullModelRange(), text: formatted }]
|
|
},
|
|
})
|
|
return () => formatProvider.dispose()
|
|
}
|
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
}, [monaco])
|
|
|
|
// Register auto completion item provider for pgsql
|
|
useEffect(() => {
|
|
let completeProvider: IDisposable | null = null
|
|
let signatureHelpProvider: IDisposable | null = null
|
|
|
|
if (isPgInfoReady) {
|
|
if (monaco && isPgInfoReady) {
|
|
completeProvider = monaco.languages.registerCompletionItemProvider(
|
|
'pgsql',
|
|
getPgsqlCompletionProvider(monaco, pgInfoRef)
|
|
)
|
|
signatureHelpProvider = monaco.languages.registerSignatureHelpProvider(
|
|
'pgsql',
|
|
getPgsqlSignatureHelpProvider(monaco, pgInfoRef)
|
|
)
|
|
}
|
|
}
|
|
return () => {
|
|
completeProvider?.dispose()
|
|
signatureHelpProvider?.dispose()
|
|
}
|
|
}, [isPgInfoReady, monaco])
|
|
}
|