import React, { useEffect, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { useTheme } from '@mui/material/styles'; import { useHistory } from 'react-router-dom'; import { Badge, Button, CircularProgress, Dialog, DialogContent, Divider, FormControlLabel, Grid, IconButton, List, ListItemAvatar, ListItemButton, ListItemText, ListItem, ListItemIcon, Switch, TextField, Tooltip, Typography, LinearProgress, } from '@mui/material'; import { EnableTelegramDialog } from '.'; import BoltIcon from '@mui/icons-material/Bolt'; import SendIcon from '@mui/icons-material/Send'; import NumbersIcon from '@mui/icons-material/Numbers'; import PasswordIcon from '@mui/icons-material/Password'; import ContentCopy from '@mui/icons-material/ContentCopy'; import PersonAddAltIcon from '@mui/icons-material/PersonAddAlt'; import EmojiEventsIcon from '@mui/icons-material/EmojiEvents'; import { UserNinjaIcon, BitcoinIcon } from '../Icons'; import { systemClient } from '../../services/System'; import { getHost, getWebln } from '../../utils'; import RobotAvatar from '../RobotAvatar'; import { apiClient } from '../../services/api'; import { Robot } from '../../models'; import { Page } from '../../basic/NavBar'; interface Props { open: boolean; onClose: () => void; robot: Robot; setRobot: (state: Robot) => void; setPage: (state: Page) => void; setCurrentOrder: (state: number) => void; baseUrl: string; } const ProfileDialog = ({ open = false, baseUrl, onClose, robot, setRobot, setPage, setCurrentOrder, }: Props): JSX.Element => { const { t } = useTranslation(); const history = useHistory(); const theme = useTheme(); const host = getHost(); const [rewardInvoice, setRewardInvoice] = useState(''); const [showRewards, setShowRewards] = useState(false); const [showRewardsSpinner, setShowRewardsSpinner] = useState(false); const [withdrawn, setWithdrawn] = useState(false); const [badInvoice, setBadInvoice] = useState(''); const [openClaimRewards, setOpenClaimRewards] = useState(false); const [weblnEnabled, setWeblnEnabled] = useState(false); const [openEnableTelegram, setOpenEnableTelegram] = useState(false); useEffect(() => { getWebln().then((webln) => { setWeblnEnabled(webln !== undefined); }); }, [showRewards]); const copyTokenHandler = () => { const robotToken = systemClient.getCookie('robot_token'); if (robotToken) { systemClient.copyToClipboard(robotToken); setRobot({ ...robot, copiedToken: true }); } }; const copyReferralCodeHandler = () => { systemClient.copyToClipboard(`http://${host}/ref/${robot.referralCode}`); }; const handleWeblnInvoiceClicked = async (e: any) => { e.preventDefault(); if (robot.earnedRewards) { const webln = await getWebln(); const invoice = webln.makeInvoice(robot.earnedRewards).then(() => { if (invoice) { handleSubmitInvoiceClicked(e, invoice.paymentRequest); } }); } }; const handleSubmitInvoiceClicked = (e: any, rewardInvoice: string) => { setBadInvoice(''); setShowRewardsSpinner(true); apiClient .post(baseUrl, '/api/reward/', { invoice: rewardInvoice, }) .then((data: any) => { setBadInvoice(data.bad_invoice ?? ''); setShowRewardsSpinner(false); setWithdrawn(data.successful_withdrawal); setOpenClaimRewards(!data.successful_withdrawal); setRobot({ ...robot, earnedRewards: data.successful_withdrawal ? 0 : robot.earnedRewards }); }); e.preventDefault(); }; const handleClickEnableTelegram = () => { window.open('https://t.me/' + robot.tgBotName + '?start=' + robot.tgToken, '_blank').focus(); setOpenEnableTelegram(false); }; const setStealthInvoice = (wantsStealth: boolean) => { apiClient .put(baseUrl, '/api/stealth/', { wantsStealth }) .then((data) => setRobot({ ...robot, stealthInvoices: data?.wantsStealth })); }; return (
{t('Your Profile')} {robot.nickname ? ( ) : null} {robot.activeOrderId ? ( { history.push('/order/' + robot.activeOrderId); setPage('order'); setCurrentOrder(robot.activeOrderId); onClose(); }} > ) : robot.lastOrderId ? ( { history.push('/order/' + robot.lastOrderId); setPage('order'); setCurrentOrder(robot.lastOrderId); onClose(); }} > ) : ( )} {systemClient.getCookie('robot_token') ? ( ), }} /> ) : ( t('Cannot remember') )} setOpenEnableTelegram(false)} tgBotName={robot.tgBotName} tgToken={robot.tgToken} onClickEnable={handleClickEnableTelegram} /> {robot.tgEnabled ? ( {t('Telegram enabled')} ) : ( )} setStealthInvoice(!robot.stealthInvoices)} /> } /> {t('Rewards and compensations')} } control={ setShowRewards(!showRewards)} /> } /> {showRewards && ( <> ), }} /> {!openClaimRewards ? ( {`${robot.earnedRewards} Sats`} ) : (
{ setRewardInvoice(e.target.value); }} /> {weblnEnabled && ( )}
)}
{showRewardsSpinner && (
)} {withdrawn && (
{t('There it goes, thank you!🥇')}
)} )}
); }; export default ProfileDialog;