LoadingTable.tsx 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  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. color: theme.palette.text.primary,
  9. backgroundColor: theme.palette.background.paper,
  10. },
  11. skeleton: {
  12. transform: 'scale(1)',
  13. background: `linear-gradient(90deg, ${theme.palette.divider} 0%, ${theme.palette.divider} 50%)`,
  14. },
  15. tr: {
  16. display: 'grid',
  17. gridTemplateColumns: '10% 89%',
  18. gap: '1%',
  19. marginTop: theme.spacing(3),
  20. },
  21. }));
  22. const LoadingTable = (props: { wrapperClass?: string; count: number }) => {
  23. const { wrapperClass = '', count } = props;
  24. const classes = getStyles();
  25. const rows = Array(count || 5).fill(1);
  26. return (
  27. <div className={`${classes.wrapper} ${wrapperClass}`}>
  28. {rows.map((row, index) => (
  29. <div key={index} className={classes.tr} role="skeleton">
  30. <Skeleton height={16} classes={{ root: classes.skeleton }} />
  31. <Skeleton height={16} classes={{ root: classes.skeleton }} />
  32. </div>
  33. ))}
  34. </div>
  35. );
  36. };
  37. export default LoadingTable;