import { useParams } from 'common' import { useState } from 'react' import { toast } from 'sonner' import { Button, Dialog, DialogContent, DialogFooter, DialogHeader, DialogSection, DialogSectionSeparator, DialogTitle, DialogTrigger, } from 'ui' import { Admonition } from 'ui-patterns/Admonition' import { DestinationType } from './DestinationPanel/DestinationPanel.types' import { InlineLink } from '@/components/ui/InlineLink' import { UpgradePlanButton } from '@/components/ui/UpgradePlanButton' import { useCreateTenantSourceMutation } from '@/data/replication/create-tenant-source-mutation' import { useCheckEntitlements } from '@/hooks/misc/useCheckEntitlements' import { DOCS_URL } from '@/lib/constants' type EnablePipelinesModalProps = | { open: boolean; onOpenChange: (open: boolean) => void } | { open?: never; onOpenChange?: never } export const EnablePipelinesModal = ({ open: extOpen, onOpenChange, }: EnablePipelinesModalProps) => { const { ref: projectRef } = useParams() const [_open, _setOpen] = useState(false) const open = extOpen ?? _open const setOpen = onOpenChange ?? _setOpen const hideTrigger = extOpen !== undefined && onOpenChange !== undefined const { hasAccess } = useCheckEntitlements('replication.etl') const { mutate: createTenantSource, isPending: creatingTenantSource } = useCreateTenantSourceMutation({ onSuccess: () => { toast.success('Pipelines enabled') setOpen(false) }, onError: (error) => { toast.error(`Failed to enable Pipelines: ${error.message}`) }, }) const onEnablePipelines = async () => { if (!projectRef) return console.error('Project ref is required') createTenantSource({ projectRef }) } return ( {!hideTrigger && ( )} Enable Pipelines {hasAccess ? ( <>

Pipelines bills for configured pipeline hours and Postgres row data processed during initial sync and ongoing replication. Review{' '} Pipelines pricing {' '} before enabling.

Pipelines is in public alpha and may change.

) : (

Pipelines requires the Pro plan.

)}
{hasAccess ? ( ) : ( )}
) } export const EnablePipelinesCallout = ({ type }: { type?: DestinationType | null }) => { const { hasAccess } = useCheckEntitlements('replication.etl') return ( ) : ( ) } /> ) }