CreateTriggerButtons.tsx 3.0 KB

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