TermItem.tsx 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. import { Button, Card, Dropdown, Space, Typography } from "antd";
  2. import { MoreOutlined, EditOutlined } from "@ant-design/icons";
  3. import { ITermDataResponse } from "../api/Term";
  4. import MdView from "../template/MdView";
  5. import UserName from "../auth/UserName";
  6. import TimeShow from "../general/TimeShow";
  7. import TermModal from "./TermModal";
  8. import { useState } from "react";
  9. import StudioName from "../auth/StudioName";
  10. const { Text } = Typography;
  11. interface IWidget {
  12. data?: ITermDataResponse;
  13. }
  14. const TermItemWidget = ({ data }: IWidget) => {
  15. const [openTermModal, setOpenTermModal] = useState(false);
  16. return (
  17. <>
  18. <Card
  19. title={
  20. <Space direction="vertical" size={3}>
  21. <Space>
  22. <Text strong>{data?.meaning}</Text>
  23. <Text type="secondary">{data?.other_meaning}</Text>
  24. </Space>
  25. <Space style={{ fontSize: "80%" }}>
  26. <StudioName data={data?.studio} />
  27. {data?.channel ? data.channel.name : ""}
  28. <Text type="secondary">
  29. <UserName {...data?.editor} />
  30. </Text>
  31. <TimeShow type="secondary" updatedAt={data?.updated_at} />
  32. </Space>
  33. </Space>
  34. }
  35. extra={
  36. <Dropdown
  37. key={1}
  38. trigger={["click"]}
  39. menu={{
  40. items: [
  41. {
  42. key: "edit",
  43. label: "edit",
  44. icon: <EditOutlined />,
  45. },
  46. {
  47. key: "translate",
  48. label: "translate",
  49. icon: <EditOutlined />,
  50. },
  51. ],
  52. onClick: (e) => {
  53. console.log("click ", e);
  54. switch (e.key) {
  55. case "edit":
  56. setOpenTermModal(true);
  57. break;
  58. default:
  59. break;
  60. }
  61. },
  62. }}
  63. placement="bottomRight"
  64. >
  65. <Button
  66. size="small"
  67. shape="circle"
  68. icon={<MoreOutlined />}
  69. ></Button>
  70. </Dropdown>
  71. }
  72. >
  73. <MdView html={data?.html} />
  74. </Card>
  75. <TermModal
  76. id={data?.guid}
  77. open={openTermModal}
  78. onClose={() => setOpenTermModal(false)}
  79. />
  80. </>
  81. );
  82. };
  83. export default TermItemWidget;