output-panel.tsx 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. 'use client'
  2. import type { FC } from 'react'
  3. import CodeEditor from '@/app/components/workflow/nodes/_base/components/editor/code-editor'
  4. import { CodeLanguage } from '@/app/components/workflow/nodes/code/types'
  5. import { Markdown } from '@/app/components/base/markdown'
  6. import LoadingAnim from '@/app/components/base/chat/chat/loading-anim'
  7. type OutputPanelProps = {
  8. isRunning?: boolean
  9. outputs?: any
  10. error?: string
  11. height?: number
  12. }
  13. const OutputPanel: FC<OutputPanelProps> = ({
  14. isRunning,
  15. outputs,
  16. error,
  17. height,
  18. }) => {
  19. return (
  20. <div className='bg-gray-50 py-2'>
  21. {isRunning && (
  22. <div className='pt-4 pl-[26px]'>
  23. <LoadingAnim type='text' />
  24. </div>
  25. )}
  26. {!isRunning && error && (
  27. <div className='px-4'>
  28. <div className='px-3 py-[10px] rounded-lg !bg-[#fef3f2] border-[0.5px] border-[rbga(0,0,0,0.05)] shadow-xs'>
  29. <div className='text-xs leading-[18px] text-[#d92d20]'>{error}</div>
  30. </div>
  31. </div>
  32. )}
  33. {!isRunning && !outputs && (
  34. <div className='px-4 py-2'>
  35. <Markdown content='No Output' />
  36. </div>
  37. )}
  38. {outputs && Object.keys(outputs).length === 1 && (
  39. <div className='px-4 py-2'>
  40. <Markdown content={outputs[Object.keys(outputs)[0]] || ''} />
  41. </div>
  42. )}
  43. {outputs && Object.keys(outputs).length > 1 && height! > 0 && (
  44. <div className='px-4 py-2 flex flex-col gap-2'>
  45. <CodeEditor
  46. readOnly
  47. title={<div></div>}
  48. language={CodeLanguage.json}
  49. value={outputs}
  50. isJSONStringifyBeauty
  51. height={height}
  52. />
  53. </div>
  54. )}
  55. </div>
  56. )
  57. }
  58. export default OutputPanel