-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathuse-intro-animation.js
48 lines (43 loc) · 1.26 KB
/
use-intro-animation.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import { useEffect } from 'react';
import { usePose, useVisiblePose } from 'utils/hooks';
import { devAndProd } from 'utils/dev-prod';
import sequence from 'utils/sequence';
const useIntroAnimation = (showInDev = true, isAnimationDone) => {
// poses
const { pose: homePose, setPose: setHomePose } = usePose('hidden', ['hidden', 'middle', 'normal']);
const [fabPose, setFabPose] = useVisiblePose(false);
const [menuBarPose, setMenubarPose] = useVisiblePose(false);
useEffect(() => {
//always show animation in prod, but toggle it in dev
const showAnimation = isAnimationDone.value === false && devAndProd(showInDev, true);
if (showAnimation) {
sequence([
0,
() => setHomePose('hiddenCenter'),
500,
() => setHomePose('middle'),
2000,
() => setHomePose('normal'),
500,
() => setFabPose(true),
500,
() => {
setMenubarPose(true);
isAnimationDone.setTrue();
}
]);
} else {
setHomePose('normal');
setFabPose(true);
setMenubarPose(true);
isAnimationDone.setTrue();
}
}, []);
return {
homePose,
fabPose,
menuBarPose,
isAnimationDone: isAnimationDone.value
};
};
export default useIntroAnimation;