import { useFlag, useParams } from 'common' import { useCheckEntitlements } from 'hooks/misc/useCheckEntitlements' import { ArrowUpRight } from 'lucide-react' import Link from 'next/link' import { useState } from 'react' import { Button, DialogSectionSeparator, Sheet, SheetContent, SheetDescription, SheetHeader, SheetSection, SheetTitle, cn, } from 'ui' import { EnableReplicationCallout } from '../EnableReplicationCallout' import { useIsETLPrivateAlpha } from '../useIsETLPrivateAlpha' import { DestinationForm } from './DestinationForm' import { DestinationType } from './DestinationPanel.types' import { DestinationTypeSelection } from './DestinationTypeSelection' import { ReadReplicaForm } from './ReadReplicaForm' import { DocsButton } from '@/components/ui/DocsButton' import { useReplicationSourcesQuery } from '@/data/replication/sources-query' import { DOCS_URL } from '@/lib/constants' interface DestinationPanelProps { visible: boolean type?: DestinationType existingDestination?: { sourceId?: number destinationId: number pipelineId?: number enabled: boolean statusName?: string } onClose: () => void onSuccessCreateReadReplica?: () => void } export const DestinationPanel = ({ visible, type, existingDestination, onClose, onSuccessCreateReadReplica, }: DestinationPanelProps) => { const { ref: projectRef } = useParams() const enablePgReplicate = useIsETLPrivateAlpha() const unifiedReplication = useFlag('unifiedReplication') const { hasAccess: hasETLReplicationAccess } = useCheckEntitlements('replication.etl') const [selectedType, setSelectedType] = useState( type || (unifiedReplication ? 'Read Replica' : 'BigQuery') ) const editMode = !!existingDestination const { data: sourcesData, isSuccess: isSourcesSuccess } = useReplicationSourcesQuery({ projectRef, }) const sourceId = sourcesData?.sources.find((s) => s.name === projectRef)?.id const replicationNotEnabled = isSourcesSuccess && !sourceId return ( <>
{editMode ? 'Edit destination' : 'Create a new destination'} {editMode ? 'Update the configuration for this destination' : 'A destination is an external platform that automatically receives your database changes in real time.'} {selectedType === 'Read Replica' ? ( onSuccessCreateReadReplica?.()} /> ) : unifiedReplication && !enablePgReplicate ? (

Replicate data to external destinations in real-time

We are currently in private alpha and slowly onboarding new customers to ensure stable data pipelines. Request access below to join the waitlist. Read replicas are available now.

) : unifiedReplication && replicationNotEnabled ? ( ) : ( )}
) }