import { useState } from 'react' import { useReplicationSourcesQuery } from '@/data/replication/sources-query' import { useCheckEntitlements } from 'hooks/misc/useCheckEntitlements' import { useFlag, useParams } from 'common' import { cn, DialogSectionSeparator, Sheet, SheetContent, SheetDescription, SheetHeader, SheetSection, SheetTitle, } from 'ui' import { EnableReplicationCallout } from '../EnableReplicationCallout' import { DestinationForm } from './DestinationForm' import { DestinationType } from './DestinationPanel.types' import { DestinationTypeSelection } from './DestinationTypeSelection' import { ReadReplicaForm } from './ReadReplicaForm' 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 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 && replicationNotEnabled ? ( ) : ( )}
) }