chunk-content.tsx 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import React, { type FC } from 'react'
  2. import cn from '@/utils/classnames'
  3. import { useSegmentListContext } from '..'
  4. import { Markdown } from '@/app/components/base/markdown'
  5. type ChunkContentProps = {
  6. detail: {
  7. answer?: string
  8. content: string
  9. sign_content: string
  10. }
  11. isFullDocMode: boolean
  12. className?: string
  13. }
  14. const ChunkContent: FC<ChunkContentProps> = ({
  15. detail,
  16. isFullDocMode,
  17. className,
  18. }) => {
  19. const { answer, content, sign_content } = detail
  20. const isCollapsed = useSegmentListContext(s => s.isCollapsed)
  21. if (answer) {
  22. return (
  23. <div className={className}>
  24. <div className='flex gap-x-1'>
  25. <div className='w-4 text-[13px] font-medium leading-[20px] text-text-tertiary shrink-0'>Q</div>
  26. <div
  27. className={cn('text-text-secondary body-md-regular',
  28. isCollapsed ? 'line-clamp-2' : 'line-clamp-20',
  29. )}>
  30. {content}
  31. </div>
  32. </div>
  33. <div className='flex gap-x-1'>
  34. <div className='w-4 text-[13px] font-medium leading-[20px] text-text-tertiary shrink-0'>A</div>
  35. <div className={cn('text-text-secondary body-md-regular',
  36. isCollapsed ? 'line-clamp-2' : 'line-clamp-20',
  37. )}>
  38. {answer}
  39. </div>
  40. </div>
  41. </div>
  42. )
  43. }
  44. return <Markdown
  45. className={cn('!text-text-secondary !mt-0.5',
  46. isFullDocMode ? 'line-clamp-3' : isCollapsed ? 'line-clamp-2' : 'line-clamp-20',
  47. className,
  48. )}
  49. content={sign_content || content || ''}
  50. />
  51. }
  52. export default React.memo(ChunkContent)