LoadingTable.tsx 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import { makeStyles, Theme } from '@material-ui/core';
  2. import { Skeleton } from '@material-ui/lab';
  3. const getStyles = makeStyles((theme: Theme) => ({
  4. wrapper: {
  5. padding: theme.spacing(2),
  6. paddingTop: 0,
  7. backgroundColor: '#fff',
  8. borderRadius: '4px',
  9. },
  10. skeleton: {
  11. transform: 'scale(1)',
  12. background: 'linear-gradient(90deg, #f0f4f9 0%, #f9f9f9 50%)',
  13. borderRadius: '2px',
  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).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;