SentCart.tsx 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import { Badge, Button, List, Popover, Tooltip, Typography } from "antd";
  2. import { useEffect, useState } from "react";
  3. import { ShoppingCartOutlined, DeleteOutlined } from "@ant-design/icons";
  4. const { Text } = Typography;
  5. const SentCartWidget = () => {
  6. const [count, setCount] = useState<number>();
  7. const [sentences, setSentences] = useState<string[]>();
  8. const query = () => {
  9. const cartText = localStorage.getItem("cart/text");
  10. if (cartText) {
  11. const sent: string[] = JSON.parse(cartText);
  12. setCount(sent.length);
  13. setSentences(sent);
  14. } else {
  15. setCount(0);
  16. }
  17. };
  18. useEffect(() => {
  19. let timer = setInterval(query, 1000 * 2);
  20. return () => {
  21. clearInterval(timer);
  22. };
  23. }, []);
  24. return (
  25. <>
  26. <Popover
  27. placement="bottomRight"
  28. arrowPointAtCenter
  29. destroyTooltipOnHide
  30. getTooltipContainer={(node: HTMLElement) =>
  31. document.getElementsByClassName("toolbar_center")[0] as HTMLElement
  32. }
  33. content={
  34. <div>
  35. <div style={{ display: "flex", justifyContent: "space-between" }}>
  36. <div></div>
  37. <div>
  38. <Text copyable={{ text: sentences?.join("\n") }} />
  39. <Tooltip title="清空列表保留剪贴板数据">
  40. <Button
  41. type="link"
  42. danger
  43. icon={<DeleteOutlined />}
  44. onClick={() => {
  45. localStorage.removeItem("cart/text");
  46. setSentences(undefined);
  47. setCount(0);
  48. }}
  49. />
  50. </Tooltip>
  51. </div>
  52. </div>
  53. <div style={{ width: 350, height: 300, overflowY: "auto" }}>
  54. <List
  55. size="small"
  56. dataSource={sentences}
  57. renderItem={(item) => <List.Item>{item}</List.Item>}
  58. />
  59. </div>
  60. </div>
  61. }
  62. trigger="click"
  63. >
  64. <Badge style={{ cursor: "pointer" }} count={count} size="small">
  65. <span style={{ color: "white", cursor: "pointer" }}>
  66. <ShoppingCartOutlined />
  67. </span>
  68. </Badge>
  69. </Popover>
  70. </>
  71. );
  72. };
  73. export default SentCartWidget;