LoadingTable.tsx 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. import { Theme } from '@mui/material';
  2. import { Skeleton } from '@mui/material';
  3. import { makeStyles } from '@mui/styles';
  4. const getStyles = makeStyles((theme: Theme) => ({
  5. wrapper: {
  6. padding: theme.spacing(2),
  7. paddingTop: 0,
  8. backgroundColor: '#fff',
  9. },
  10. skeleton: {
  11. transform: 'scale(1)',
  12. background: 'linear-gradient(90deg, #f0f4f9 0%, #f4f4f4 50%)',
  13. },
  14. tr: {
  15. display: 'grid',
  16. gridTemplateColumns: '10% 89%',
  17. gap: '1%',
  18. marginTop: theme.spacing(3),
  19. },
  20. }));
  21. const LoadingTable = (props: { wrapperClass?: string; count: number }) => {
  22. const { wrapperClass = '', count } = props;
  23. const classes = getStyles();
  24. const rows = Array(count || 5).fill(1);
  25. return (
  26. <div className={`${classes.wrapper} ${wrapperClass}`}>
  27. {rows.map((row, index) => (
  28. <div key={index} className={classes.tr} role="skeleton">
  29. <Skeleton height={16} classes={{ root: classes.skeleton }} />
  30. <Skeleton height={16} classes={{ root: classes.skeleton }} />
  31. </div>
  32. ))}
  33. </div>
  34. );
  35. };
  36. export default LoadingTable;