'use client'; import { AffiliateDialog, AffiliateDialogRef, } from '@/components/affiliate/components/AffiliateDialog'; import CopyShortenedLink from '@/components/CopyShortenedLink/CopyShortenedLink'; import { Display } from '@/components/display'; import useGlobalStore from '@/config/use-global'; import { querySubscribeList } from '@/services/user/subscribe'; import { queryUserAffiliate, queryUserAffiliateList } from '@/services/user/user'; import { useQuery } from '@tanstack/react-query'; import { Button } from '@workspace/airo-ui/components/button'; import { Card, CardContent } from '@workspace/airo-ui/components/card'; import { Input } from '@workspace/airo-ui/components/input'; import { default as Airo_Empty } from '@workspace/airo-ui/custom-components/empty'; import { formatDate } from '@workspace/airo-ui/utils'; import { useTranslations } from 'next-intl'; import { useRef, useState } from 'react'; export default function Affiliate() { const t = useTranslations('affiliate'); const { user, common } = useGlobalStore(); const [sum, setSum] = useState(); const { data } = useQuery({ queryKey: ['queryUserAffiliate'], queryFn: async () => { const response = await queryUserAffiliate(); return response.data.data; }, }); const { data: inviteListData } = useQuery({ queryKey: ['queryUserAffiliateList'], queryFn: async () => { const response = await queryUserAffiliateList({ page: 1, size: 3, }); return response.data.data; }, }); const { data: proPlan } = useQuery({ queryKey: ['querySubscribeList'], queryFn: async () => { const { data } = await querySubscribeList(); const list = data.data?.list?.filter((v) => v.unit_time === 'Month') || []; return list.find((v) => v.name.includes('Pro')) ?? []; }, }); const dialogRef = useRef(null); return (
{t('totalCommission')}
{t('commissionInfo')}
{t('historicalRecommendedUsers')} {inviteListData?.total}

{t('totalCommission')}

{t('commissionInviteCode')}

{user?.refer_code}

{t('inviteRecords')}

dialogRef.current?.open()} > {t('more')}
{inviteListData?.list?.length ? (
{inviteListData?.list?.map((invite) => { return (
{t('userIdentifier')}
{invite.identifier}
{t('time')}
{formatDate(invite.registered_at)}
); })}
) : ( )}

{t('commissionCalculation')}

{t('commissionCalculationInfo')}
{(() => { // Pro plan: $60/month, $576/year const MONTHLY_PRICE = proPlan?.unit_price; const discountItem = proPlan?.discount?.find((v) => v.quantity === 12); const YEARLY_PRICE = proPlan?.unit_price * ((discountItem?.discount || 100) / 100) * 12; const { common: { invite }, } = useGlobalStore(); const [count, setCount] = useState(10); const clamp = (n: number) => Math.max(0, Math.min(10000, Math.floor(n))); const firstMonth = count * MONTHLY_PRICE * (invite.first_purchase_percentage / 100); // 50% const firstYear = count * YEARLY_PRICE * (invite.first_yearly_purchase_percentage / 100); // 30% const recurMonth = count * MONTHLY_PRICE * (invite.non_first_purchase_percentage / 100); // 20% const recurYear = count * YEARLY_PRICE * (invite.non_first_purchase_percentage / 100); // 20% return (
{/* Calculator panel container */}
{/* Left: row headers (Monthly Plan / Yearly Plan) */}
{t('monthlyPackage')}
{t('annualPackage')}
{/* Middle: First-time top-up users (double rounded corners + three rows) */}
{t('firstTimeTopUpUser')}
50%
up to{' '}
30%
up to{' '}
{/* Blue shadow block */}
{/* Right: Repeat top-up users (gray card + three rows) */}
{t('repeatTopUpUser')}
20%
up to{' '} {' '} {t('perMonth')}
20%
up to{' '} {' '} {t('perYear')}
{/* User count adjustment */}
setCount(clamp(Number(e.target.value) || 0))} className='h-6 border-0 p-0 text-center text-sm focus-visible:ring-0 sm:h-8' style={{ width: `${Math.max(3, String(count).length + 1)}ch` }} /> users
); })()}
); }