import { useParams } from 'common' import { noop } from 'lodash' import Link from 'next/link' import { useRouter } from 'next/router' import { useState } from 'react' import { Button, CommandGroup_Shadcn_, CommandItem_Shadcn_, CommandList_Shadcn_, Command_Shadcn_, IconCheck, IconChevronDown, IconLoader, IconPlus, PopoverContent_Shadcn_, PopoverTrigger_Shadcn_, Popover_Shadcn_, ScrollArea, cn, } from 'ui' import { useReadReplicasQuery } from 'data/read-replicas/replicas-query' import { formatDatabaseID, formatDatabaseRegion } from 'data/read-replicas/replicas.utils' import { useDatabaseSelectorStateSnapshot } from 'state/database-selector' interface DatabaseSelectorProps { variant?: 'regular' | 'connected-on-right' | 'connected-on-left' | 'connected-on-both' additionalOptions?: { id: string; name: string }[] onSelectId?: (id: string) => void // Optional callback } const DatabaseSelector = ({ variant = 'regular', additionalOptions = [], onSelectId = noop, }: DatabaseSelectorProps) => { const router = useRouter() const { ref: projectRef } = useParams() const [open, setOpen] = useState(false) const state = useDatabaseSelectorStateSnapshot() const selectedDatabaseId = state.selectedDatabaseId const { data, isLoading, isSuccess } = useReadReplicasQuery({ projectRef }) const databases = data ?? [] const sortedDatabases = databases .sort((a, b) => (a.inserted_at > b.inserted_at ? 1 : 0)) .sort((database) => (database.identifier === projectRef ? -1 : 0)) const selectedDatabase = databases.find((db) => db.identifier === selectedDatabaseId) const selectedDatabaseRegion = formatDatabaseRegion(selectedDatabase?.region ?? '') const formattedDatabaseId = formatDatabaseID(selectedDatabaseId ?? '') const selectedAdditionalOption = additionalOptions.find((x) => x.id === selectedDatabaseId) return (
{additionalOptions.length > 0 && ( {additionalOptions.map((option) => ( { state.setSelectedDatabaseId(option.id) setOpen(false) }} onClick={() => { state.setSelectedDatabaseId(option.id) setOpen(false) }} >

{option.name}

{option.id === selectedDatabaseId && }
))}
)} 7 ? 'h-[210px]' : ''}> {sortedDatabases?.map((database) => { const region = formatDatabaseRegion(database.region) const id = formatDatabaseID(database.identifier) return ( { state.setSelectedDatabaseId(database.identifier) setOpen(false) onSelectId(database.identifier) }} onClick={() => { state.setSelectedDatabaseId(database.identifier) setOpen(false) onSelectId(database.identifier) }} >

{database.identifier === projectRef ? 'Primary database' : `Read replica (${region} - ${id})`}

{database.identifier === selectedDatabaseId && }
) })}
{ setOpen(false) router.push(`/project/${projectRef}/settings/infrastructure`) }} onClick={() => setOpen(false)} > setOpen(false)} className="w-full flex items-center gap-2" >

Create a new read replica

) } export default DatabaseSelector