import { useParams } from 'common' import { Check, Plus } from 'lucide-react' import Link from 'next/link' import { DropdownMenuItem, DropdownMenuSeparator, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, } from 'ui' import { useReadReplicasQuery } from '@/data/read-replicas/replicas-query' import { formatDatabaseID, formatDatabaseRegion } from '@/data/read-replicas/replicas.utils' import { useIsFeatureEnabled } from '@/hooks/misc/useIsFeatureEnabled' /** 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 { 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 = `/project/${projectRef}/database/replication?destinationType=Read+Replica` 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 && } ) })} {infrastructureReadReplicas && ( <> Create a new read replica )}
) }