import React from 'react'; import { Box } from '@chakra-ui/react'; import { RainbowText } from './rainbowText'; export const TextAnimation1 = (props) => { const texts = React.useMemo(() => { if (props?.texts?.length) { return props?.texts; } return [ 'Thingtime', 'Vibrant', 'Infinite', 'Creative', 'Powerful', 'Magical', 'Inspiring', 'Love' // 'tt' ]; }, [props?.texts]); const [titleText, setTitleText] = React.useState(texts[0]); const [usedTexts, setUsedTexts] = React.useState(['Thingtime']); const state: any = React.useRef({}); React.useEffect(() => { state.current = { titleText, texts, usedTexts }; }, [titleText, texts, usedTexts]); React.useEffect(() => { const newTimeout = Math.random() * 1500 + 2500 + (titleText === 'thingtime' ? 750 : 0); const timeout = setTimeout(() => { // choose an unused text or pick texts[0] const usedTexts = state.current?.usedTexts; const unusedTexts = texts.filter((text) => !usedTexts.includes(text)); // pick a random unused text const randomIdx = Math.floor(Math.random() * unusedTexts.length); const wasThingtime = false && titleText === 'Thingtime'; const newText = wasThingtime ? 'is' : unusedTexts.length > 0 ? unusedTexts[randomIdx] : texts[0]; console.log('nik newText', newText); console.log('nik wasThingtime', wasThingtime); console.log('nik usedTexts', usedTexts); if (!unusedTexts.length) { setUsedTexts(['Thingtime']); } else { setUsedTexts([...usedTexts, newText]); } setTitleText(newText); }, newTimeout); return () => { // cleanup clearTimeout(timeout); }; }, [titleText]); return {titleText}; };