DeleteTrigger.tsx62 lines · main
1import type { PGTrigger } from '@supabase/pg-meta'
2
3import { TextConfirmModal } from '@/components/ui/TextConfirmModalWrapper'
4import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject'
5
6interface DeleteTriggerProps {
7 trigger?: PGTrigger
8 visible: boolean
9 setVisible: (value: string | null) => void
10 onDelete: (params: {
11 projectRef: string
12 connectionString?: string | null
13 trigger: PGTrigger
14 }) => void
15 isLoading: boolean
16}
17
18export const DeleteTrigger = ({
19 trigger,
20 visible,
21 setVisible,
22 onDelete,
23 isLoading,
24}: DeleteTriggerProps) => {
25 const { data: project } = useSelectedProjectQuery()
26 const { name, schema } = trigger ?? {}
27
28 async function handleDelete() {
29 if (!project) return console.error('Project is required')
30 if (!trigger) return console.error('Trigger ID is required')
31
32 onDelete({
33 projectRef: project.ref,
34 connectionString: project.connectionString,
35 trigger,
36 })
37 }
38
39 return (
40 <TextConfirmModal
41 variant={'warning'}
42 visible={visible}
43 onCancel={() => setVisible('')}
44 onConfirm={handleDelete}
45 title="Delete this trigger"
46 loading={isLoading}
47 confirmLabel={`Delete trigger ${name}`}
48 confirmPlaceholder="Type in name of trigger"
49 confirmString={name ?? ''}
50 text={
51 <>
52 This will delete your trigger called{' '}
53 <span className="text-bold text-foreground">{name}</span> of schema{' '}
54 <span className="text-bold text-foreground">{schema}</span>
55 </>
56 }
57 alert={{
58 title: 'You cannot recover this trigger once deleted.',
59 }}
60 />
61 )
62}