import React, { FC, useState, useEffect, useCallback, memo, } from '../../lib/teact/teact'; import { STICKER_SIZE_AUTH, STICKER_SIZE_AUTH_MOBILE, STICKER_SIZE_TWO_FA } from '../../config'; import { IS_SINGLE_COLUMN_LAYOUT } from '../../util/environment'; import getAnimationData from './helpers/animatedAssets'; import AnimatedSticker from './AnimatedSticker'; import './PasswordMonkey.scss'; type OwnProps = { code: string; codeLength: number; trackingDirection: number; isTracking: boolean; isBig?: boolean; }; const TRACKING_START_FRAME = 15; const TRACKING_END_FRAME = 180; const STICKER_SIZE = IS_SINGLE_COLUMN_LAYOUT ? STICKER_SIZE_AUTH_MOBILE : STICKER_SIZE_AUTH; const TrackingMonkey: FC = ({ code, codeLength, trackingDirection, isTracking, isBig, }) => { const [idleMonkeyData, setIdleMonkeyData] = useState(); const [trackingMonkeyData, setTrackingMonkeyData] = useState(); const [isFirstMonkeyLoaded, setIsFirstMonkeyLoaded] = useState(false); const TRACKING_FRAMES_PER_SYMBOL = (TRACKING_END_FRAME - TRACKING_START_FRAME) / codeLength; useEffect(() => { if (!idleMonkeyData) { getAnimationData('MonkeyIdle').then(setIdleMonkeyData); } }, [idleMonkeyData]); useEffect(() => { if (!trackingMonkeyData) { getAnimationData('MonkeyTracking').then(setTrackingMonkeyData); } }, [trackingMonkeyData]); const handleFirstMonkeyLoad = useCallback(() => setIsFirstMonkeyLoaded(true), []); function getTrackingFrames(): [number, number] { const startFrame = (code && code.length > 1) || trackingDirection < 0 ? TRACKING_START_FRAME + TRACKING_FRAMES_PER_SYMBOL * (code.length - 1) : 0; const endFrame = code.length === codeLength ? TRACKING_END_FRAME : TRACKING_START_FRAME + TRACKING_FRAMES_PER_SYMBOL * code.length; if (trackingDirection < 1) { return [ endFrame, startFrame, ]; } return [ startFrame, endFrame, ]; } return (
{!isFirstMonkeyLoaded && (
)} {idleMonkeyData && ( )} {trackingMonkeyData && ( )}
); }; export default memo(TrackingMonkey);