FunctionEditor.tsx 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import { Maximize2, Minimize2 } from 'lucide-react'
  2. import { Button, cn, FormControl, Tooltip, TooltipContent, TooltipTrigger } from 'ui'
  3. import CodeEditor from '@/components/ui/CodeEditor/CodeEditor'
  4. export const FunctionEditor = ({
  5. field,
  6. language,
  7. focused,
  8. setFocused,
  9. }: {
  10. field: any
  11. language: string
  12. focused: boolean
  13. setFocused: (b: boolean) => void
  14. }) => {
  15. return (
  16. <div className={cn('rounded-md relative group grow')}>
  17. <FormControl>
  18. {language !== undefined && (
  19. <CodeEditor
  20. id="database-functions-editor"
  21. language="pgsql"
  22. placeholder={language === 'plpgsql' ? `BEGIN\n\nEND;` : undefined}
  23. value={field.value}
  24. onInputChange={field.onChange}
  25. />
  26. )}
  27. </FormControl>
  28. <div
  29. className={cn(
  30. 'absolute top-0 right-2 bg-surface-300 border border-strong rounded-sm h-[28px]',
  31. 'opacity-0 group-hover:opacity-100 group-hover:top-2 transition-all'
  32. )}
  33. >
  34. <Tooltip>
  35. <TooltipTrigger asChild>
  36. <Button
  37. type="text"
  38. size="tiny"
  39. className={cn(
  40. 'px-1.5 text-foreground-lighter hover:text-foreground',
  41. 'transition z-50'
  42. )}
  43. onClick={() => setFocused(!focused)}
  44. icon={focused ? <Minimize2 /> : <Maximize2 />}
  45. />
  46. </TooltipTrigger>
  47. <TooltipContent side="bottom">
  48. {focused ? 'Minimize editor' : 'Maximize editor'}
  49. </TooltipContent>
  50. </Tooltip>
  51. </div>
  52. </div>
  53. )
  54. }