39 lines
843 B
JavaScript
39 lines
843 B
JavaScript
import { h } from 'preact'
|
|
import { useRef, useState } from 'preact/hooks'
|
|
import { useInterval, useTimeout } from '../../hooks/timerHooks'
|
|
import { colours } from '../../assets/theme'
|
|
import { H1 } from '../Text'
|
|
|
|
// const symbols = ['⌏', '⌎', '⌌', '⌍']
|
|
|
|
const Loader = ({
|
|
active = true,
|
|
offset = 0,
|
|
animation = [':..', '.:.', '..:', '...'],
|
|
}) => {
|
|
const [text, setText] = useState('.')
|
|
const arrayPosition = useRef(offset)
|
|
const rate = 350
|
|
|
|
useInterval(
|
|
() => {
|
|
setText(animation[arrayPosition.current])
|
|
|
|
if (arrayPosition.current === animation.length - 1) {
|
|
arrayPosition.current = 0
|
|
} else {
|
|
arrayPosition.current += 1
|
|
}
|
|
},
|
|
active ? rate : null
|
|
)
|
|
|
|
return (
|
|
<H1 as="span" colour={colours.midnightDarker}>
|
|
{text}
|
|
</H1>
|
|
)
|
|
}
|
|
|
|
export default Loader
|