import { IS_PLATFORM, useParams } from 'common' import { Check, Plus } from 'lucide-react' import Link from 'next/link' import { DropdownMenuItem, DropdownMenuSeparator, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, } from 'ui' import { getAddReadReplicaPath } from '@/components/interfaces/Settings/Infrastructure/Infrastructure.utils' import { useReadReplicasQuery } from '@/data/read-replicas/replicas-query' import { formatDatabaseID, formatDatabaseRegion } from '@/data/read-replicas/replicas.utils' import { useIsFeatureEnabled } from '@/hooks/misc/useIsFeatureEnabled' import { useIsHighAvailability } from '@/hooks/misc/useSelectedProject' /** The label a database row/summary shows: the primary, or a replica by region + id. */ function databaseLabel(identifier: string, region: string, projectRef: string | undefined) { if (identifier === projectRef) return 'Primary database' return `Read replica (${formatDatabaseRegion(region)} - ${formatDatabaseID(identifier)})` } export const DatabaseParametersSubMenu = ({ identifier, onIdentifierChange, }: { identifier?: string onIdentifierChange: (identifier: string) => void }) => { const { ref: projectRef } = useParams() const isHighAvailability = useIsHighAvailability() const { infrastructureReadReplicas } = useIsFeatureEnabled(['infrastructure:read_replicas']) const { data } = useReadReplicasQuery({ projectRef }) const databases = (data ?? []) .slice() .sort((a, b) => (a.inserted_at > b.inserted_at ? 1 : 0)) .sort((database) => (database.identifier === projectRef ? -1 : 0)) const selectedDatabaseId = identifier ?? projectRef const selectedDatabase = databases.find((db) => db.identifier === selectedDatabaseId) const newReplicaURL = getAddReadReplicaPath(projectRef) return (
Database {selectedDatabase ? databaseLabel(selectedDatabase.identifier, selectedDatabase.region, projectRef) : 'Primary database'}
{databases.map((database) => { const isUnhealthy = database.status !== 'ACTIVE_HEALTHY' return ( onIdentifierChange(database.identifier)} > {databaseLabel(database.identifier, database.region, projectRef)} {database.identifier === selectedDatabaseId && } ) })} {IS_PLATFORM && infrastructureReadReplicas && !isHighAvailability && ( <> Create a new read replica )}
) }