Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

98 строки
3.4 KiB

  1. // material-ui
  2. import RemoveCircleOutlineIcon from '@mui/icons-material/RemoveCircleOutline';
  3. import * as React from 'react';
  4. import { useEffect } from "react";
  5. import {
  6. Box,
  7. IconButton,
  8. Stack,
  9. Table,
  10. TableBody,
  11. TableCell,
  12. TableHead,
  13. TableRow,
  14. Typography
  15. } from '@mui/material';
  16. import { FormattedMessage, useIntl } from "react-intl";
  17. // ==============================|| EVENT TABLE ||============================== //
  18. export default function UploadFileTable({ recordList, setUpdateRows, }) {
  19. const [rows, setRows] = React.useState(recordList);
  20. const intl = useIntl();
  21. useEffect(() => {
  22. setRows(recordList);
  23. }, [recordList]);
  24. const handleCancelClick = (id) => {
  25. setRows((prevRows) => {
  26. const newRows = prevRows.filter((row) => row.id !== id);
  27. setUpdateRows(newRows);
  28. return newRows;
  29. });
  30. };
  31. const formatFileSize = (size) => `${Math.ceil(size / 1024)} KB`;
  32. if (rows.length === 0) {
  33. return (
  34. <Box
  35. sx={{
  36. height: '200px',
  37. width: '100%',
  38. border: 1,
  39. borderColor: 'divider',
  40. display: 'flex',
  41. alignItems: 'center',
  42. justifyContent: 'center',
  43. }}
  44. >
  45. <Typography variant="h6">
  46. <FormattedMessage id="noFile"/>
  47. </Typography>
  48. </Box>
  49. );
  50. }
  51. return (
  52. <Box sx={{ height: '200px', width: '100%', border: 1, borderColor: 'divider', overflow: 'auto' }}>
  53. <Table size="small" aria-label={intl.formatMessage({ id: 'fileName' })}>
  54. <TableHead>
  55. <TableRow>
  56. <TableCell padding="checkbox" sx={{ width: 48 }} />
  57. <TableCell>{intl.formatMessage({ id: 'fileName' })}</TableCell>
  58. <TableCell align="right">{intl.formatMessage({ id: 'fileSize' })}</TableCell>
  59. </TableRow>
  60. </TableHead>
  61. <TableBody>
  62. {rows.map((row) => (
  63. <TableRow key={row.id}>
  64. <TableCell padding="checkbox">
  65. <IconButton
  66. size="small"
  67. color="error"
  68. role="button"
  69. aria-label={intl.formatMessage({ id: 'delete' })}
  70. onClick={() => handleCancelClick(row.id)}
  71. >
  72. <RemoveCircleOutlineIcon fontSize="small" />
  73. </IconButton>
  74. </TableCell>
  75. <TableCell>
  76. <Stack direction="row" alignItems="center">
  77. <Typography variant="body2">{row.name}</Typography>
  78. </Stack>
  79. </TableCell>
  80. <TableCell align="right">
  81. <Typography variant="body2">{formatFileSize(row.size)}</Typography>
  82. </TableCell>
  83. </TableRow>
  84. ))}
  85. </TableBody>
  86. </Table>
  87. </Box>
  88. );
  89. }