import { useEffect, useState } from 'react' import toast from 'react-hot-toast' import { useParams } from 'common' import { useSqlTitleGenerateMutation } from 'data/ai/sql-title-mutation' import type { SqlSnippet } from 'data/content/sql-snippets-query' import { useOrgSubscriptionQuery } from 'data/subscriptions/org-subscription-query' import { useSelectedOrganization } from 'hooks/misc/useSelectedOrganization' import { useSqlEditorStateSnapshot } from 'state/sql-editor' import { AiIconAnimation, Button, Form, Input, Modal } from 'ui' import { subscriptionHasHipaaAddon } from '../Billing/Subscription/Subscription.utils' export interface RenameQueryModalProps { snippet: SqlSnippet visible: boolean onCancel: () => void onComplete: () => void } const RenameQueryModal = ({ snippet, visible, onCancel, onComplete }: RenameQueryModalProps) => { const { ref } = useParams() const organization = useSelectedOrganization() const snap = useSqlEditorStateSnapshot() const { data: subscription } = useOrgSubscriptionQuery({ orgSlug: organization?.slug }) // Customers on HIPAA plans should not have access to Supabase AI const hasHipaaAddon = subscriptionHasHipaaAddon(subscription) const { id, name, description } = snippet const [nameInput, setNameInput] = useState(name) const [descriptionInput, setDescriptionInput] = useState(description) useEffect(() => { setNameInput(name) }, [name]) const validate = () => { const errors: any = {} if (!nameInput) errors.name = 'Please enter a query name' return errors } const onSubmit = async (values: any, { setSubmitting }: any) => { if (!ref) return console.error('Project ref is required') if (!id) return console.error('Snippet ID is required') setSubmitting(true) try { snap.renameSnippet(id, nameInput, descriptionInput) if (onComplete) onComplete() return Promise.resolve() } catch (error: any) { toast.error(`Failed to rename query: ${error.message}`) } } const { mutate: titleSql, isLoading: isTitleGenerationLoading } = useSqlTitleGenerateMutation({ onSuccess: (data) => { const { title, description } = data setNameInput(title) if (!descriptionInput) setDescriptionInput(description) }, onError: (error) => { toast.error(`Failed to rename query: ${error.message}`) }, }) const isAiButtonVisible = !!snippet.content.sql return (
{({ isSubmitting }: { isSubmitting: boolean }) => ( <> setNameInput(e.target.value)} />
{!hasHipaaAddon && isAiButtonVisible && ( )}
setDescriptionInput(e.target.value)} />
)}
) } export default RenameQueryModal