import React, { useEffect, useState } from 'react'; import { Button, Form, Grid, Header, Card, Statistic, Divider, } from 'semantic-ui-react'; import { API, showError, showInfo, showSuccess } from '../../helpers'; import { renderQuota } from '../../helpers/render'; import { useTranslation } from 'react-i18next'; const TopUp = () => { const { t } = useTranslation(); const [redemptionCode, setRedemptionCode] = useState(''); const [topUpLink, setTopUpLink] = useState(''); const [userQuota, setUserQuota] = useState(0); const [isSubmitting, setIsSubmitting] = useState(false); const [user, setUser] = useState({}); const topUp = async () => { if (redemptionCode === '') { showInfo(t('topup.redeem_code.empty_code')); return; } setIsSubmitting(true); try { const res = await API.post('/api/user/topup', { key: redemptionCode, }); const { success, message, data } = res.data; if (success) { showSuccess(t('topup.redeem_code.success')); setUserQuota((quota) => { return quota + data; }); setRedemptionCode(''); } else { showError(message); } } catch (err) { showError(t('topup.redeem_code.request_failed')); } finally { setIsSubmitting(false); } }; const openTopUpLink = () => { if (!topUpLink) { showError(t('topup.redeem_code.no_link')); return; } let url = new URL(topUpLink); let username = user.username; let user_id = user.id; url.searchParams.append('username', username); url.searchParams.append('user_id', user_id); url.searchParams.append('transaction_id', crypto.randomUUID()); window.open(url.toString(), '_blank'); }; const getUserQuota = async () => { let res = await API.get(`/api/user/self`); const { success, message, data } = res.data; if (success) { setUserQuota(data.quota); setUser(data); } else { showError(message); } }; useEffect(() => { let status = localStorage.getItem('status'); if (status) { status = JSON.parse(status); if (status.top_up_link) { setTopUpLink(status.top_up_link); } } getUserQuota().then(); }, []); return (