upgrade.tsx 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import React, { useState, useEffect, ReactElement } from 'react';
  2. import ReactMarkdown from 'react-markdown';
  3. import { Table, Typography } from 'antd';
  4. import { getGithubRelease } from '../../utils/apis';
  5. import { AdminLayout } from '../../components/layouts/AdminLayout';
  6. const { Title } = Typography;
  7. const AssetTable = assets => {
  8. const data = Object.values(assets) as object[];
  9. const columns = [
  10. {
  11. title: 'Name',
  12. dataIndex: 'name',
  13. key: 'name',
  14. render: (text, entry) => <a href={entry.browser_download_url}>{text}</a>,
  15. },
  16. {
  17. title: 'Size',
  18. dataIndex: 'size',
  19. key: 'size',
  20. render: text => `${(text / 1024 / 1024).toFixed(2)} MB`,
  21. },
  22. ];
  23. return (
  24. <Table
  25. dataSource={data}
  26. columns={columns}
  27. rowKey={record => record.id}
  28. size="large"
  29. pagination={false}
  30. />
  31. );
  32. };
  33. const Logs = () => {
  34. const [release, setRelease] = useState({
  35. html_url: '',
  36. name: '',
  37. created_at: null,
  38. body: '',
  39. assets: [],
  40. });
  41. const getRelease = async () => {
  42. try {
  43. const result = await getGithubRelease();
  44. setRelease(result);
  45. } catch (error) {
  46. console.log('==== error', error);
  47. }
  48. };
  49. useEffect(() => {
  50. getRelease();
  51. }, []);
  52. if (!release) {
  53. return null;
  54. }
  55. return (
  56. <div className="upgrade-page">
  57. <Title level={2}>
  58. <a href={release.html_url}>{release.name}</a>
  59. </Title>
  60. <Title level={5}>{new Date(release.created_at).toDateString()}</Title>
  61. <ReactMarkdown>{release.body}</ReactMarkdown>
  62. <h3>Downloads</h3>
  63. <AssetTable {...release.assets} />
  64. </div>
  65. );
  66. };
  67. Logs.getLayout = function getLayout(page: ReactElement) {
  68. return <AdminLayout page={page} />;
  69. };
  70. export default Logs;