You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

agent-log-detail-modal.tsx 2.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import MessageItem from '@/components/next-message-item';
  2. import { Modal } from '@/components/ui/modal/modal';
  3. import { useFetchAgent } from '@/hooks/use-agent-request';
  4. import { useFetchUserInfo } from '@/hooks/user-setting-hooks';
  5. import { IAgentLogMessage } from '@/interfaces/database/agent';
  6. import { IReferenceObject, Message } from '@/interfaces/database/chat';
  7. import { buildMessageUuidWithRole } from '@/utils/chat';
  8. import React, { useMemo } from 'react';
  9. import { IMessage } from '../chat/interface';
  10. interface CustomModalProps {
  11. isOpen: boolean;
  12. onClose: () => void;
  13. message: IAgentLogMessage[];
  14. reference: IReferenceObject;
  15. }
  16. export const AgentLogDetailModal: React.FC<CustomModalProps> = ({
  17. isOpen,
  18. onClose,
  19. message: derivedMessages,
  20. reference,
  21. }) => {
  22. const { data: userInfo } = useFetchUserInfo();
  23. const { data: canvasInfo } = useFetchAgent();
  24. const shortMessage = useMemo(() => {
  25. if (derivedMessages?.length) {
  26. const content = derivedMessages[0]?.content || '';
  27. const chineseCharCount = (content.match(/[\u4e00-\u9fa5]/g) || []).length;
  28. const totalLength = content.length;
  29. if (chineseCharCount > 0) {
  30. if (totalLength > 15) {
  31. return content.substring(0, 15) + '...';
  32. }
  33. } else {
  34. if (totalLength > 30) {
  35. return content.substring(0, 30) + '...';
  36. }
  37. }
  38. return content;
  39. } else {
  40. return '';
  41. }
  42. }, [derivedMessages]);
  43. return (
  44. <Modal
  45. open={isOpen}
  46. onCancel={onClose}
  47. showfooter={false}
  48. footer={null}
  49. title={shortMessage || ''}
  50. className="!w-[900px]"
  51. >
  52. <div className="flex items-start mb-4 flex-col gap-4 justify-start">
  53. <div className="w-full">
  54. {derivedMessages?.map((message, i) => {
  55. return (
  56. <MessageItem
  57. key={buildMessageUuidWithRole(
  58. message as Partial<Message | IMessage>,
  59. )}
  60. nickname={userInfo.nickname}
  61. avatar={userInfo.avatar}
  62. avatarDialog={canvasInfo.avatar}
  63. item={message as IMessage}
  64. reference={reference}
  65. index={i}
  66. showLikeButton={false}
  67. showLog={false}
  68. ></MessageItem>
  69. );
  70. })}
  71. </div>
  72. </div>
  73. </Modal>
  74. );
  75. };