CreateTriggerButtons.tsx94 lines · main
1import { Plus } from 'lucide-react'
2import { AiIconAnimation } from 'ui'
3
4import { SIDEBAR_KEYS } from '@/components/layouts/ProjectLayout/LayoutSidebar/LayoutSidebarProvider'
5import { ButtonTooltip } from '@/components/ui/ButtonTooltip'
6import { useAiAssistantStateSnapshot } from '@/state/ai-assistant-state'
7import { useSidebarManagerSnapshot } from '@/state/sidebar-manager-state'
8
9interface CreateTriggerButtonsProps {
10 hasTables: boolean
11 canCreateTriggers: boolean
12 selectedSchema: string
13 onCreateTrigger: () => void
14 showPlusIcon?: boolean
15 buttonType?: 'default'
16}
17
18export const CreateTriggerButtons = ({
19 hasTables,
20 canCreateTriggers,
21 selectedSchema,
22 onCreateTrigger,
23 showPlusIcon = true,
24 buttonType,
25}: CreateTriggerButtonsProps) => {
26 const aiSnap = useAiAssistantStateSnapshot()
27 const { openSidebar } = useSidebarManagerSnapshot()
28
29 return (
30 <div className="flex items-center gap-x-2">
31 <ButtonTooltip
32 type={buttonType}
33 disabled={!hasTables || !canCreateTriggers}
34 onClick={onCreateTrigger}
35 className="grow"
36 icon={showPlusIcon ? <Plus /> : undefined}
37 tooltip={{
38 content: {
39 side: 'bottom',
40 text: !hasTables
41 ? 'Create a table first before creating triggers'
42 : !canCreateTriggers
43 ? 'You need additional permissions to create triggers'
44 : undefined,
45 },
46 }}
47 >
48 New trigger
49 </ButtonTooltip>
50
51 {hasTables && (
52 <ButtonTooltip
53 type="default"
54 disabled={!hasTables || !canCreateTriggers}
55 className="px-1 pointer-events-auto"
56 icon={<AiIconAnimation size={16} />}
57 onClick={() => {
58 openSidebar(SIDEBAR_KEYS.AI_ASSISTANT)
59 aiSnap.newChat({
60 name: 'Create new trigger',
61 initialInput: `Create a new trigger for the schema ${selectedSchema} that does ...`,
62 suggestions: {
63 title:
64 'I can help you create a new trigger, here are a few example prompts to get you started:',
65 prompts: [
66 {
67 label: 'Log Changes',
68 description: 'Create a trigger that logs changes to the users table',
69 },
70 {
71 label: 'Update Timestamp',
72 description: 'Create a trigger that updates updated_at timestamp',
73 },
74 {
75 label: 'Validate Email',
76 description: 'Create a trigger that validates email format before insert',
77 },
78 ],
79 },
80 })
81 }}
82 tooltip={{
83 content: {
84 side: 'bottom',
85 text: !canCreateTriggers
86 ? 'You need additional permissions to create triggers'
87 : 'Create with Briven Assistant',
88 },
89 }}
90 />
91 )}
92 </div>
93 )
94}