SentHistoryItem.tsx 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import { Space, Tooltip, Typography } from "antd";
  2. import { type Change, diffChars } from "diff"
  3. import User from "../auth/User";
  4. import TimeShow from "../general/TimeShow";
  5. import type { ISentHistoryData } from "./SentHistory"
  6. const { Text, Paragraph } = Typography;
  7. interface IWidget {
  8. data?: ISentHistoryData;
  9. oldContent?: string;
  10. }
  11. const SentHistoryItemWidget = ({ data, oldContent }: IWidget) => {
  12. let content = <Text>{data?.content}</Text>;
  13. if (data?.content && oldContent) {
  14. const diff: Change[] = diffChars(oldContent, data.content);
  15. const diffResult = diff.map((item, id) => {
  16. return (
  17. <Text
  18. key={id}
  19. type={item.added ? "success" : item.removed ? "danger" : "secondary"}
  20. delete={item.removed ? true : undefined}
  21. >
  22. {item.value}
  23. </Text>
  24. );
  25. });
  26. content = <Tooltip title={data.content}>{diffResult}</Tooltip>;
  27. }
  28. return (
  29. <Paragraph style={{ paddingLeft: 12 }}>
  30. <blockquote>
  31. {content}
  32. <div>
  33. <Space style={{ fontSize: "80%" }}>
  34. <User {...data?.editor} showAvatar={false} />
  35. <TimeShow type="secondary" createdAt={data?.created_at} />
  36. </Space>
  37. </div>
  38. </blockquote>
  39. </Paragraph>
  40. );
  41. };
  42. export default SentHistoryItemWidget;