chatContent.tsx 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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,
  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. <Divider key={item.id} className={PREFIX_DIVIDER}>
  25. <LocaleConsumer<Locale["Chat"]> componentName="Chat" >
  26. {(locale: Locale["Chat"]) => locale['clearContext']}
  27. </LocaleConsumer>
  28. </Divider> :
  29. <ChatBox
  30. previousMessage={index ? chats[index - 1] : undefined}
  31. toast={toast}
  32. align={align}
  33. mode={mode}
  34. key={item.id}
  35. message={item}
  36. roleConfig={roleConfig}
  37. onMessageBadFeedback={onMessageBadFeedback}
  38. onMessageCopy={onMessageCopy}
  39. onChatsChange={onChatsChange}
  40. onMessageDelete={onMessageDelete}
  41. onMessageGoodFeedback={onMessageGoodFeedback}
  42. onMessageReset={onMessageReset}
  43. lastChat={lastMessage}
  44. customMarkDownComponents={customMarkDownComponents}
  45. chatBoxRenderConfig={chatBoxRenderConfig}
  46. />;
  47. })}
  48. <div className={`${PREFIX}-toast`}>{contextHolder as any}</div>
  49. </>
  50. );
  51. });
  52. export default ChatContent;