question.tsx 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import type {
  2. FC,
  3. ReactNode,
  4. } from 'react'
  5. import {
  6. memo,
  7. } from 'react'
  8. import type { ChatItem } from '../types'
  9. import { QuestionTriangle } from '@/app/components/base/icons/src/vender/solid/general'
  10. import { User } from '@/app/components/base/icons/src/public/avatar'
  11. import { Markdown } from '@/app/components/base/markdown'
  12. import ImageGallery from '@/app/components/base/image-gallery'
  13. type QuestionProps = {
  14. item: ChatItem
  15. questionIcon?: ReactNode
  16. }
  17. const Question: FC<QuestionProps> = ({
  18. item,
  19. questionIcon,
  20. }) => {
  21. const {
  22. content,
  23. message_files,
  24. } = item
  25. const imgSrcs = message_files?.length ? message_files.map(item => item.url) : []
  26. return (
  27. <div className='flex justify-end mb-2 last:mb-0 pl-10'>
  28. <div className='group relative mr-4'>
  29. <QuestionTriangle className='absolute -right-2 top-0 w-2 h-3 text-[#D1E9FF]/50' />
  30. <div className='px-4 py-3 bg-[#D1E9FF]/50 rounded-b-2xl rounded-tl-2xl text-sm text-gray-900'>
  31. {
  32. !!imgSrcs.length && (
  33. <ImageGallery srcs={imgSrcs} />
  34. )
  35. }
  36. <Markdown content={content} />
  37. </div>
  38. <div className='mt-1 h-[18px]' />
  39. </div>
  40. <div className='shrink-0 w-10 h-10'>
  41. {
  42. questionIcon || (
  43. <div className='w-full h-full rounded-full border-[0.5px] border-black/5'>
  44. <User className='w-full h-full' />
  45. </div>
  46. )
  47. }
  48. </div>
  49. </div>
  50. )
  51. }
  52. export default memo(Question)