chatContent.tsx 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import React from "react";
  2. import Divider from '../divider';
  3. import ChatBox from './chatBox';
  4. import type { CommonChatsProps } from "./interface";
  5. import { cssClasses, strings } from "@douyinfe/semi-foundation/chat/constants";
  6. import LocaleConsumer from "../locale/localeConsumer";
  7. import { Locale } from "../locale/interface";
  8. import { Toast } from '../index';
  9. const { PREFIX_DIVIDER, PREFIX } = cssClasses;
  10. const { ROLE } = strings;
  11. interface ChatContentProps extends CommonChatsProps {}
  12. const ChatContent = React.memo((props: ChatContentProps) => {
  13. const { chats, onMessageBadFeedback, onMessageCopy, mode,
  14. onChatsChange, onMessageDelete, onMessageGoodFeedback,
  15. onMessageReset, roleConfig, chatBoxRenderConfig, align,
  16. customMarkDownComponents, renderDivider, markdownRenderProps
  17. } = props;
  18. const [toast, contextHolder] = Toast.useToast();
  19. return (
  20. <>
  21. {chats.map((item, index) => {
  22. const lastMessage = index === chats.length - 1;
  23. return item.role === ROLE.DIVIDER ? (
  24. renderDivider ? renderDivider(item) :
  25. <Divider key={item.id} className={PREFIX_DIVIDER}>
  26. <LocaleConsumer<Locale["Chat"]> componentName="Chat" >
  27. {(locale: Locale["Chat"]) => locale['clearContext']}
  28. </LocaleConsumer>
  29. </Divider>) :
  30. <ChatBox
  31. previousMessage={index ? chats[index - 1] : undefined}
  32. toast={toast}
  33. align={align}
  34. mode={mode}
  35. key={item.id}
  36. message={item}
  37. roleConfig={roleConfig}
  38. onMessageBadFeedback={onMessageBadFeedback}
  39. onMessageCopy={onMessageCopy}
  40. onChatsChange={onChatsChange}
  41. onMessageDelete={onMessageDelete}
  42. onMessageGoodFeedback={onMessageGoodFeedback}
  43. onMessageReset={onMessageReset}
  44. lastChat={lastMessage}
  45. customMarkDownComponents={customMarkDownComponents}
  46. chatBoxRenderConfig={chatBoxRenderConfig}
  47. markdownRenderProps={markdownRenderProps}
  48. />;
  49. })}
  50. <div className={`${PREFIX}-toast`}>{contextHolder as any}</div>
  51. </>
  52. );
  53. });
  54. export default ChatContent;