import { useParams } from 'common' import { toast } from 'sonner' import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, } from 'ui' import { PipelineStatusName } from './Replication.constants' import { useRollbackTablesMutation } from '@/data/replication/rollback-tables-mutation' interface RestartTableDialogProps { open: boolean onOpenChange: (open: boolean) => void tableId: number tableName: string pipelineStatusName?: PipelineStatusName onRestartStart?: () => void onRestartComplete?: () => void } export const RestartTableDialog = ({ open, onOpenChange, tableId, tableName, pipelineStatusName, onRestartStart, onRestartComplete, }: RestartTableDialogProps) => { const { ref: projectRef, pipelineId: _pipelineId } = useParams() const pipelineId = Number(_pipelineId) const { mutate: rollbackTables, isPending: isResetting } = useRollbackTablesMutation({ onSuccess: () => { toast.success( `Restarting replication for "${tableName}". Pipeline will ${pipelineStatusName === PipelineStatusName.STOPPED ? 'start' : 'restart'} automatically.` ) }, onSettled: () => { onRestartComplete?.() onOpenChange(false) }, onError: (error) => { toast.error(`Failed to restart replication: ${error.message}`) }, }) const handleReset = () => { if (!projectRef) return toast.error('Project ref is required') if (!pipelineId) return toast.error('Pipeline ID is required') onRestartStart?.() rollbackTables({ projectRef, pipelineId, target: { type: 'single_table', table_id: tableId }, rollbackType: 'full', pipelineStatusName, }) } return ( Restart replication for {tableName}

This will restart replication for{' '} {tableName} from scratch:

  • The table copy will be re-initialized. All data will be copied again from the source.
  • Existing downstream data will be deleted. Any replicated data for this table will be removed.
  • All other tables remain untouched. Only this table is affected.
  • The pipeline will restart automatically. This is required to apply this change.
Cancel {isResetting ? 'Restarting replication...' : 'Restart replication'}
) }