import { Button } from '@chakra-ui/button' import { Box, Center, Text } from '@chakra-ui/layout' import { Image, Skeleton } from '@chakra-ui/react' import QRCode from 'qrcode.react' import React, { useCallback, useEffect, useState } from 'react' import { QRCodeIcon } from '../../../constants' import { useModal } from '../../../hooks/useModal' import { useAppDispatch, useAppSelector } from '../../../state/hooks' import { userActions } from '../../../state/user' import { selectUserLoading } from '../../../state/user/selectors' import CustomModal from '../CustomModal' interface IQRCodeModalProps { account?: string qrCode?: string } const QRCodeModal: React.FunctionComponent = ({ account = '', qrCode = '' }) => { const { isOpen, onOpen, onClose } = useModal() const dispatch = useAppDispatch() const [countdown, setCountdown] = useState(60) const [mounted, setMounted] = useState(false) const { loadingRefreshQRCode } = useAppSelector(selectUserLoading) const timer = useCallback(() => { window.setTimeout(() => { if (countdown >= 1 && mounted) { setCountdown((prev) => prev - 1) } }, 1000) }, [countdown, mounted]) const handleRefreshQRCode = (isShowToast = true) => { window.clearTimeout(timer as any) setCountdown(60) dispatch( userActions.refreshQRCode({ isShowToast, }), ) } const handleOnOpen = () => { if (countdown <= 0 || mounted === false) { handleRefreshQRCode(false) } onOpen() setMounted(true) } useEffect(() => { timer() return () => window.clearTimeout(timer as any) }, [timer]) return ( <> My QR Code
{'qr
This QR code will expire in{' '} {countdown} {' '} seconds DO NOT share this QR code to anyone
) } export default React.memo(QRCodeModal)