import { Plus, Search } from 'lucide-react' import { useState } from 'react' import { useParams } from 'common' import Table from 'components/to-be-cleaned/Table' import AlertError from 'components/ui/AlertError' import { useReplicationDestinationsQuery } from 'data/replication/destinations-query' import { useReplicationPipelinesQuery } from 'data/replication/pipelines-query' import { useReplicationSourcesQuery } from 'data/replication/sources-query' import { Button, cn, Input_Shadcn_ } from 'ui' import { GenericSkeletonLoader } from 'ui-patterns' import NewDestinationPanel from './DestinationPanel' import { DestinationRow } from './DestinationRow' import { PIPELINE_ERROR_MESSAGES } from './Pipeline.utils' export const Destinations = () => { const [showNewDestinationPanel, setShowNewDestinationPanel] = useState(false) const [filterString, setFilterString] = useState('') const { ref: projectRef } = useParams() const { data: sourcesData, error: sourcesError, isLoading: isSourcesLoading, isError: isSourcesError, } = useReplicationSourcesQuery({ projectRef, }) const sourceId = sourcesData?.sources.find((s) => s.name === projectRef)?.id const { data: destinationsData, error: destinationsError, isLoading: isDestinationsLoading, isError: isDestinationsError, isSuccess: isDestinationsSuccess, } = useReplicationDestinationsQuery({ projectRef, }) const { data: pipelinesData, error: pipelinesError, isLoading: isPipelinesLoading, isError: isPipelinesError, isSuccess: isPipelinesSuccess, } = useReplicationPipelinesQuery({ projectRef, }) const anyDestinations = isDestinationsSuccess && destinationsData.destinations.length > 0 const filteredDestinations = filterString.length === 0 ? destinationsData?.destinations ?? [] : (destinationsData?.destinations ?? []).filter((destination) => destination.name.toLowerCase().includes(filterString.toLowerCase()) ) return ( <>
setFilterString(e.target.value)} />
{(isSourcesLoading || isDestinationsLoading) && } {(isSourcesError || isDestinationsError) && ( )} {anyDestinations ? ( Name, Type, Status, Publication, , ]} body={filteredDestinations.map((destination) => { const pipeline = pipelinesData?.pipelines.find( (p) => p.destination_id === destination.id ) return ( ) })} >
) : ( !isSourcesLoading && !isDestinationsLoading && !isSourcesError && !isDestinationsError && (

Send data to your first destination

Use destinations to improve performance or run analysis on your data via integrations like BigQuery

) )}
{!isSourcesLoading && !isDestinationsLoading && filteredDestinations.length === 0 && anyDestinations && (

No destinations match "{filterString}"

)} setShowNewDestinationPanel(false)} /> ) }