import { useQueryClient } from '@tanstack/react-query' import { useParams } from 'common' import { toast } from 'sonner' import ConfirmationModal from 'ui-patterns/Dialogs/ConfirmationModal' import { REPLICA_STATUS } from './InstanceConfiguration.constants' import { replicaKeys } from '@/data/read-replicas/keys' import { useReadReplicaRemoveMutation } from '@/data/read-replicas/replica-remove-mutation' import type { Database } from '@/data/read-replicas/replicas-query' import { formatDatabaseID } from '@/data/read-replicas/replicas.utils' interface DropReplicaConfirmationModalProps { selectedReplica?: Database onSuccess: () => void onCancel: () => void } export const DropReplicaConfirmationModal = ({ selectedReplica, onSuccess, onCancel, }: DropReplicaConfirmationModalProps) => { const { ref: projectRef } = useParams() const queryClient = useQueryClient() const formattedId = formatDatabaseID(selectedReplica?.identifier ?? '') const { mutate: removeReadReplica, isPending: isRemoving } = useReadReplicaRemoveMutation({ onSuccess: () => { toast.success(`Tearing down read replica (ID: ${formattedId})`) // [Joshen] Temporarily optimistic rendering until API supports immediate status update queryClient.setQueriesData( { queryKey: replicaKeys.list(projectRef) }, (old: Database[] | undefined) => { const updatedReplicas = old?.map((x) => { if (x.identifier === selectedReplica?.identifier) { return { ...x, status: REPLICA_STATUS.GOING_DOWN } } return x }) return updatedReplicas } ) onSuccess() onCancel() }, }) const onConfirmRemove = async () => { if (!projectRef) return console.error('Project is required') if (selectedReplica === undefined) return toast.error('No replica selected') removeReadReplica({ projectRef, identifier: selectedReplica.identifier, invalidateReplicaQueries: true, }) } return ( onCancel()} onConfirm={() => onConfirmRemove()} alert={{ title: 'This action cannot be undone', description: 'You may still deploy a new replica in this region thereafter', }} >

Before deleting this replica, consider:

) }