DestinationRow() — supabase Function Reference
Architecture documentation for the DestinationRow() function in DestinationRow.tsx from the supabase codebase.
Entity Profile
Dependency Diagram
graph TD 39b822e5_1e9c_b1af_0ea3_a181423b6554["DestinationRow()"] ad7996f0_8f4c_16e7_8b83_e7a2b844257a["useDestinationInformation()"] 39b822e5_1e9c_b1af_0ea3_a181423b6554 -->|calls| ad7996f0_8f4c_16e7_8b83_e7a2b844257a style 39b822e5_1e9c_b1af_0ea3_a181423b6554 fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
apps/studio/components/interfaces/Database/Replication/DestinationRow.tsx lines 40–240
export const DestinationRow = ({ destinationId }: DestinationRowProps) => {
const { ref: projectRef } = useParams()
const [showDeleteDestinationForm, setShowDeleteDestinationForm] = useState(false)
const [isDeleting, setIsDeleting] = useState(false)
const [showUpdateVersionModal, setShowUpdateVersionModal] = useState(false)
const { type, statusName, destination, pipeline, pipelineStatus, pipelineFetcher } =
useDestinationInformation({
id: destinationId,
})
const {
error: pipelineError,
isPending: isPipelineLoading,
isError: isPipelineError,
isSuccess: isPipelineSuccess,
} = pipelineFetcher
const destinationName = destination?.name ?? ''
const {
error: pipelineStatusError,
isPending: isPipelineStatusLoading,
isError: isPipelineStatusError,
isSuccess: isPipelineStatusSuccess,
} = useReplicationPipelineStatusQuery(
{
projectRef,
pipelineId: pipeline?.id,
},
{ refetchInterval: STATUS_REFRESH_FREQUENCY_MS }
)
const { getRequestStatus, updatePipelineStatus } = usePipelineRequestStatus()
const requestStatus = pipeline?.id
? getRequestStatus(pipeline.id)
: PipelineStatusRequestStatus.None
const { mutateAsync: stopPipeline } = useStopPipelineMutation()
const { mutateAsync: deleteDestinationPipeline } = useDeleteDestinationPipelineMutation({})
// Fetch table-level replication status to surface errors in list view
const { data: replicationStatusData } = useReplicationPipelineReplicationStatusQuery(
{ projectRef, pipelineId: pipeline?.id },
{ refetchInterval: STATUS_REFRESH_FREQUENCY_MS }
)
const tableStatuses = replicationStatusData?.table_statuses ?? []
const errorCount = tableStatuses.filter((t) => t.state?.name === 'error').length
// Only show errors when pipeline is running (not when stopped or restarting)
const isPipelineStopped = statusName === PipelineStatusName.STOPPED
const isRestarting = requestStatus === PipelineStatusRequestStatus.RestartRequested
const hasTableErrors = errorCount > 0 && !isPipelineStopped && !isRestarting
// Check if a newer pipeline version is available (one-time check cached for session)
const { data: versionData } = useReplicationPipelineVersionQuery({
projectRef,
pipelineId: pipeline?.id,
})
const hasUpdate = Boolean(versionData?.new_version)
const onDeleteClick = async () => {
if (!projectRef) {
return console.error('Project ref is required')
}
if (!pipeline) {
return toast.error(PIPELINE_ERROR_MESSAGES.NO_PIPELINE_FOUND)
}
try {
setIsDeleting(true)
await stopPipeline({ projectRef, pipelineId: pipeline.id })
await deleteDestinationPipeline({
projectRef,
destinationId: destinationId,
pipelineId: pipeline.id,
})
// Close dialog after successful deletion
setShowDeleteDestinationForm(false)
toast.success(`Deleted destination "${destinationName}"`)
} catch (error) {
toast.error(PIPELINE_ERROR_MESSAGES.DELETE_DESTINATION)
} finally {
setIsDeleting(false)
}
}
useEffect(() => {
if (pipeline?.id) {
updatePipelineStatus(pipeline.id, statusName)
}
}, [pipeline?.id, statusName, updatePipelineStatus])
return (
<>
{isPipelineError && (
<AlertError error={pipelineError} subject={PIPELINE_ERROR_MESSAGES.RETRIEVE_PIPELINE} />
)}
{isPipelineSuccess && (
<TableRow>
<TableCell>
{type === 'BigQuery' ? (
<BigQuery size={18} className="text-foreground-light" />
) : type === 'Analytics Bucket' ? (
<AnalyticsBucket size={18} className="text-foreground-light" />
) : (
<Database size={18} className="text-foreground-light" />
)}
</TableCell>
<TableCell className="max-w-[180px]">
{isPipelineLoading ? (
<ShimmeringLoader />
) : (
<div>
<p>
{type} (ID: {pipeline?.id})
</p>
<p className="text-foreground-lighter">{destinationName}</p>
</div>
)}
</TableCell>
<TableCell>
{isPipelineLoading || !pipeline ? (
<ShimmeringLoader />
) : (
<PipelineStatus
pipelineStatus={pipelineStatus?.status}
error={pipelineStatusError}
isLoading={isPipelineStatusLoading}
isError={isPipelineStatusError}
isSuccess={isPipelineStatusSuccess}
requestStatus={requestStatus}
pipelineId={pipeline?.id}
/>
)}
</TableCell>
<TableCell>
<Minus size={18} className="text-foreground-lighter" />
</TableCell>
<TableCell>
{isPipelineLoading || !pipeline ? (
<ShimmeringLoader />
) : (
pipeline.config.publication_name
)}
</TableCell>
<TableCell>
<div className="flex items-center justify-end gap-x-2">
{hasTableErrors && (
<Tooltip>
<TooltipTrigger>
<WarningIcon />
</TooltipTrigger>
<TooltipContent side="bottom">
{errorCount} table{errorCount === 1 ? '' : 's'} encountered replication errors
</TooltipContent>
</Tooltip>
)}
<Button asChild type="default" className="relative">
<Link href={`/project/${projectRef}/database/replication/${pipeline?.id}`}>
View replication
</Link>
</Button>
<RowMenu
destinationId={destinationId}
pipeline={pipeline}
pipelineStatus={pipelineStatus?.status}
error={pipelineStatusError}
isLoading={isPipelineStatusLoading}
isError={isPipelineStatusError}
onDeleteClick={() => setShowDeleteDestinationForm(true)}
hasUpdate={hasUpdate}
onUpdateClick={() => setShowUpdateVersionModal(true)}
/>
</div>
</TableCell>
</TableRow>
)}
<DeleteDestination
visible={showDeleteDestinationForm}
setVisible={setShowDeleteDestinationForm}
onDelete={onDeleteClick}
isLoading={isDeleting}
name={destinationName}
/>
<UpdateVersionModal
visible={showUpdateVersionModal}
pipeline={pipeline}
onClose={() => setShowUpdateVersionModal(false)}
confirmLabel={
statusName === PipelineStatusName.STARTED || statusName === PipelineStatusName.FAILED
? 'Update and restart'
: 'Update version'
}
/>
</>
)
}
Domain
Subdomains
Source
Frequently Asked Questions
What does DestinationRow() do?
DestinationRow() is a function in the supabase codebase.
What does DestinationRow() call?
DestinationRow() calls 1 function(s): useDestinationInformation.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free