Files
omni-tools/src/components/Loading.tsx

48 lines
1009 B
TypeScript
Raw Normal View History

2024-06-21 20:06:07 +01:00
import Typography from '@mui/material/Typography'
import { useState } from 'react'
import Box from '@mui/material/Box'
import { useTimeout } from '../hooks'
2024-06-19 21:18:35 +01:00
export type FuseLoadingProps = {
delay?: number;
className?: string;
};
/**
* FuseLoading displays a loading state with an optional delay
*/
function FuseLoading(props: FuseLoadingProps) {
2024-06-21 20:06:07 +01:00
const { delay = 0, className } = props
const [showLoading, setShowLoading] = useState(!delay)
2024-06-19 21:18:35 +01:00
useTimeout(() => {
2024-06-21 20:06:07 +01:00
setShowLoading(true)
}, delay)
2024-06-19 21:18:35 +01:00
return (
<div
>
<Typography
className="-mb-16 text-13 font-medium sm:text-20"
color="text.secondary"
>
2024-06-21 20:06:07 +01:00
Loading
2024-06-19 21:18:35 +01:00
</Typography>
<Box
id="spinner"
sx={{
2024-06-21 20:06:07 +01:00
'& > div': {
backgroundColor: 'palette.secondary.main'
}
2024-06-19 21:18:35 +01:00
}}
>
2024-06-21 20:06:07 +01:00
<div className="bounce1" />
<div className="bounce2" />
<div className="bounce3" />
2024-06-19 21:18:35 +01:00
</Box>
</div>
2024-06-21 20:06:07 +01:00
)
2024-06-19 21:18:35 +01:00
}
2024-06-21 20:06:07 +01:00
export default FuseLoading