2024-07-14 21:07:46 -05:00
|
|
|
import {memo, useEffect, useState} from 'react';
|
2024-07-14 07:24:15 -05:00
|
|
|
|
2024-07-14 21:07:46 -05:00
|
|
|
import {useRadians} from '@/context/radians.js';
|
2024-07-14 07:24:15 -05:00
|
|
|
import {render} from '@/dialogue.js';
|
|
|
|
|
|
|
|
import styles from './message.module.css';
|
|
|
|
|
2024-07-14 21:07:46 -05:00
|
|
|
function Message({letters}) {
|
|
|
|
const radians = useRadians();
|
|
|
|
const [localRadians, setLocalRadians] = useState(radians);
|
|
|
|
const [isAnimating, setIsAnimating] = useState(true);
|
2024-07-14 07:24:15 -05:00
|
|
|
useEffect(() => {
|
2024-07-14 21:07:46 -05:00
|
|
|
const handle = setTimeout(() => {
|
|
|
|
setIsAnimating(false);
|
|
|
|
}, 2_000);
|
2024-07-14 07:24:15 -05:00
|
|
|
return () => {
|
2024-07-14 21:07:46 -05:00
|
|
|
clearTimeout(handle);
|
|
|
|
}
|
2024-07-14 07:24:15 -05:00
|
|
|
}, []);
|
2024-07-14 21:07:46 -05:00
|
|
|
useEffect(() => {
|
|
|
|
if (isAnimating) {
|
|
|
|
setLocalRadians(radians)
|
|
|
|
}
|
|
|
|
}, [isAnimating, radians]);
|
2024-07-14 07:24:15 -05:00
|
|
|
return (
|
|
|
|
<div className={styles.message}>
|
2024-07-14 21:07:46 -05:00
|
|
|
{render(letters, '')(letters.length - 1, localRadians)}
|
2024-07-14 07:24:15 -05:00
|
|
|
</div>
|
|
|
|
)
|
2024-07-14 21:07:46 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
export default memo(Message);
|