From 48c0578ff7eaa2e5d0dc2d0008af05bfba13d4f2 Mon Sep 17 00:00:00 2001 From: Saxon Fletcher Date: Wed, 27 Nov 2024 09:57:21 +1000 Subject: [PATCH] Feat/assistant triggers (#30665) * add assistant to triggers * adjust copy * remove console * Lint --------- Co-authored-by: Joshen Lim --- .../Triggers/TriggersList/TriggerList.tsx | 43 ++++++- .../TriggersList/TriggerList.utils.ts | 35 ++++++ .../Triggers/TriggersList/TriggersList.tsx | 117 +++++++++++------- .../layouts/ProjectLayout/ProjectLayout.tsx | 6 +- .../ui/AIAssistantPanel/AIAssistant.tsx | 5 +- 5 files changed, 154 insertions(+), 52 deletions(-) create mode 100644 apps/studio/components/interfaces/Database/Triggers/TriggersList/TriggerList.utils.ts diff --git a/apps/studio/components/interfaces/Database/Triggers/TriggersList/TriggerList.tsx b/apps/studio/components/interfaces/Database/Triggers/TriggersList/TriggerList.tsx index 3d745a7b792..8ca577424c5 100644 --- a/apps/studio/components/interfaces/Database/Triggers/TriggersList/TriggerList.tsx +++ b/apps/studio/components/interfaces/Database/Triggers/TriggersList/TriggerList.tsx @@ -17,7 +17,11 @@ import { useProjectContext } from 'components/layouts/ProjectLayout/ProjectConte import Table from 'components/to-be-cleaned/Table' import { useDatabaseTriggersQuery } from 'data/database-triggers/database-triggers-query' import { useCheckPermissions } from 'hooks/misc/useCheckPermissions' -import { Check, X, MoreVertical, Edit3, Trash } from 'lucide-react' +import { Check, X, MoreVertical, Edit3, Trash, Edit, Edit2 } from 'lucide-react' +import { useAppStateSnapshot } from 'state/app-state' +import { useIsAssistantV2Enabled } from 'components/interfaces/App/FeaturePreview/FeaturePreviewContext' +import { cn } from 'ui' +import { generateTriggerCreateSQL } from './TriggerList.utils' interface TriggerListProps { schema: string @@ -35,6 +39,8 @@ const TriggerList = ({ deleteTrigger, }: TriggerListProps) => { const { project } = useProjectContext() + const { setAiAssistantPanel } = useAppStateSnapshot() + const isAssistantV2Enabled = useIsAssistantV2Enabled() const { data: triggers } = useDatabaseTriggersQuery({ projectRef: project?.ref, @@ -135,13 +141,42 @@ const TriggerList = ({ - - {!canCreateTriggers && ( - - - -
- - You need additional permissions to create triggers - -
-
-
+ className="px-1 pointer-events-auto" + icon={ + + } + onClick={() => + setAiAssistantPanel({ + open: true, + initialInput: `Create a new trigger for the schema ${selectedSchema} that does ...`, + suggestions: { + title: + 'I can help you create a new trigger, here are a few example prompts to get you started:', + prompts: [ + 'Create a trigger that logs changes to the users table', + 'Create a trigger that updates updated_at timestamp', + 'Create a trigger that validates email format before insert', + ], + }, + }) + } + tooltip={{ + content: { + side: 'bottom', + text: !canCreateTriggers + ? 'You need additional permissions to create triggers' + : 'Create with Supabase Assistant', + }, + }} + /> )} - + )} diff --git a/apps/studio/components/layouts/ProjectLayout/ProjectLayout.tsx b/apps/studio/components/layouts/ProjectLayout/ProjectLayout.tsx index 204958a3349..acfd0705ee7 100644 --- a/apps/studio/components/layouts/ProjectLayout/ProjectLayout.tsx +++ b/apps/studio/components/layouts/ProjectLayout/ProjectLayout.tsx @@ -198,7 +198,11 @@ const ProjectLayout = forwardRef diff --git a/apps/studio/components/ui/AIAssistantPanel/AIAssistant.tsx b/apps/studio/components/ui/AIAssistantPanel/AIAssistant.tsx index 74c2d00d301..050323869e2 100644 --- a/apps/studio/components/ui/AIAssistantPanel/AIAssistant.tsx +++ b/apps/studio/components/ui/AIAssistantPanel/AIAssistant.tsx @@ -394,8 +394,9 @@ export const AIAssistant = ({ {suggestions.title &&

{suggestions.title}

}
- {suggestions?.prompts?.map((prompt) => ( + {suggestions?.prompts?.map((prompt, idx) => (