ChannelInfo.tsx 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import { Statistic, StatisticCard } from "@ant-design/pro-components";
  2. import { Modal } from "antd";
  3. import { useEffect, useState } from "react";
  4. import type { IItem } from "./ChannelPickerTable";
  5. interface IChannelInfoModal {
  6. sentenceCount: number;
  7. open?: boolean;
  8. channel?: IItem;
  9. onClose?: Function;
  10. }
  11. export const ChannelInfoModal = ({
  12. sentenceCount,
  13. open,
  14. channel,
  15. onClose,
  16. }: IChannelInfoModal) => {
  17. const [isModalOpen, setIsModalOpen] = useState(open);
  18. useEffect(() => setIsModalOpen(open), [open]);
  19. return (
  20. <Modal
  21. destroyOnHidden={true}
  22. width={300}
  23. title="统计"
  24. open={isModalOpen}
  25. onCancel={(_e: React.MouseEvent<HTMLElement, MouseEvent>) => {
  26. setIsModalOpen(false);
  27. if (typeof onClose !== "undefined") {
  28. onClose();
  29. }
  30. }}
  31. footer={<></>}
  32. >
  33. <ChannelInfoWidget sentenceCount={sentenceCount} channel={channel} />
  34. </Modal>
  35. );
  36. };
  37. interface IWidget {
  38. sentenceCount: number;
  39. channel?: IItem;
  40. }
  41. const ChannelInfoWidget = ({ sentenceCount, channel }: IWidget) => {
  42. let totalStrLen = 0;
  43. let finalStrLen = 0;
  44. let finalSent = 0;
  45. channel?.final?.forEach((value) => {
  46. totalStrLen += value[0];
  47. if (value[1]) {
  48. finalStrLen += value[0];
  49. finalSent++;
  50. }
  51. });
  52. const final = channel?.final ? (finalSent * 100) / channel?.final?.length : 0;
  53. return (
  54. <>
  55. <StatisticCard
  56. title={"版本:" + channel?.title}
  57. statistic={{
  58. value: sentenceCount,
  59. suffix: "句",
  60. description: (
  61. <Statistic title="完成度" value={Math.round(final) + "%"} />
  62. ),
  63. }}
  64. chart={<></>}
  65. footer={
  66. <>
  67. <Statistic
  68. value={totalStrLen}
  69. title="巴利字符"
  70. layout="horizontal"
  71. />
  72. <Statistic
  73. value={finalStrLen}
  74. title="译文字符"
  75. layout="horizontal"
  76. />
  77. <Statistic
  78. value={channel?.content_created_at}
  79. title="创建于"
  80. layout="horizontal"
  81. />
  82. <Statistic
  83. value={channel?.content_updated_at}
  84. title="最近更新"
  85. layout="horizontal"
  86. />
  87. </>
  88. }
  89. />
  90. </>
  91. );
  92. };
  93. export default ChannelInfoWidget;