Skip to content
This repository was archived by the owner on Feb 15, 2025. It is now read-only.

Commit f19d185

Browse files
committed
fixed endless bouncer
1 parent f8479a3 commit f19d185

File tree

3 files changed

+34
-15
lines changed

3 files changed

+34
-15
lines changed

src/_pages/LandingPage/components/HeaderView/components/Astronaut/astronauts/AstronautDark.tsx

+5-3
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
import React from 'react';
22

33
type Props = {
4-
onMouseEnter: (event: React.MouseEvent<SVGGElement, MouseEvent>) => void;
4+
onMouseEnter?: (event: React.MouseEvent<SVGGElement, MouseEvent>) => void;
5+
onMouseLeave?: (event: React.MouseEvent<SVGGElement, MouseEvent>) => void;
56
className?: string;
67
};
78

89
const AstronautDark: React.FC<Props> = (props) => {
9-
const { onMouseEnter, className } = props;
10+
const { onMouseEnter, onMouseLeave, className } = props;
1011
return (
1112
<svg
1213
className={className}
@@ -20,7 +21,8 @@ const AstronautDark: React.FC<Props> = (props) => {
2021
</defs>
2122
<g
2223
clipPath="url(#_clipPath_DJqdLJjPMCQuZbt7zMmdGqTw0kfPk0A5)"
23-
onMouseEnter={onMouseEnter}>
24+
onMouseEnter={onMouseEnter}
25+
onMouseLeave={onMouseLeave}>
2426
<path
2527
fill="none"
2628
stroke="#A2C1E4"

src/_pages/LandingPage/components/HeaderView/components/Astronaut/astronauts/AstronautLight.tsx

+5-3
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
import React from 'react';
22

33
type Props = {
4-
onMouseEnter: (event: React.MouseEvent<SVGGElement, MouseEvent>) => void;
4+
onMouseEnter?: (event: React.MouseEvent<SVGGElement, MouseEvent>) => void;
5+
onMouseLeave?: (event: React.MouseEvent<SVGGElement, MouseEvent>) => void;
56
className?: string;
67
};
78

89
const AstronautLight: React.FC<Props> = (props) => {
9-
const { onMouseEnter, className } = props;
10+
const { onMouseEnter, onMouseLeave, className } = props;
1011
return (
1112
<svg
1213
className={className}
@@ -20,7 +21,8 @@ const AstronautLight: React.FC<Props> = (props) => {
2021
</defs>
2122
<g
2223
clipPath="url(#_clipPath_STwyEDuuaNbGIKbAX7KqxcyghTzV9bZj)"
23-
onMouseEnter={onMouseEnter}>
24+
onMouseEnter={onMouseEnter}
25+
onMouseLeave={onMouseLeave}>
2426
<path
2527
fill="none"
2628
stroke="#A2C1E4"

src/_pages/LandingPage/components/HeaderView/components/Astronaut/index.tsx

+24-9
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ type Props = { className?: string };
1212
const Astronaut: React.FC<Props> = (props) => {
1313
const { className } = props;
1414
const [timing] = useState(200);
15-
const [isRaised, setIsRaised] = React.useState(false);
15+
const [isRaised, setIsRaised] = useState(false);
16+
const [isOnAstronaut, setIsOnAstronaut] = useState(false);
1617
const animated_Astronaut = useSpring({
1718
transform: isRaised ? `translateY(-${30}px)` : `translateY(0px)`,
1819
config: {
@@ -24,9 +25,7 @@ const Astronaut: React.FC<Props> = (props) => {
2425
const dark = useAgile(core.ui.ASTRONAUT_DARK);
2526

2627
useEffect(() => {
27-
if (!isRaised) {
28-
return;
29-
}
28+
if (!isRaised) return;
3029

3130
const timeoutId = setTimeout(() => {
3231
core.ui.toggleAstronautColor(!dark);
@@ -36,19 +35,35 @@ const Astronaut: React.FC<Props> = (props) => {
3635
return () => clearTimeout(timeoutId);
3736
}, [isRaised, timing]);
3837

39-
function trigger() {
40-
setIsRaised(true);
41-
}
38+
const onMouseEnter = () => {
39+
if (!isOnAstronaut) {
40+
setIsOnAstronaut(true);
41+
setIsRaised(true);
42+
}
43+
};
44+
45+
const onMouseLeave = () => {
46+
// to prevent endless bouncer
47+
setTimeout(() => {
48+
setIsOnAstronaut(false);
49+
}, 1100);
50+
};
4251

4352
return (
4453
<div className={clsx(styles.Container, className)}>
4554
<animated.div
4655
style={animated_Astronaut}
4756
className={styles.ImageContainer}>
4857
{dark ? (
49-
<AstronautDark onMouseEnter={trigger} />
58+
<AstronautDark
59+
onMouseEnter={onMouseEnter}
60+
onMouseLeave={onMouseLeave}
61+
/>
5062
) : (
51-
<AstronautLight onMouseEnter={trigger} />
63+
<AstronautLight
64+
onMouseEnter={onMouseEnter}
65+
onMouseLeave={onMouseLeave}
66+
/>
5267
)}
5368
</animated.div>
5469
<div className={styles.Text}>Poke me 👆 to mutate my color State.</div>

0 commit comments

Comments
 (0)