'use client'; import React, { useState } from 'react'; import { useTranslations } from 'next-intl'; import { ArrowRight, Download } from 'lucide-react'; import { HistoryTableRowProps } from '../lib/types'; import { formatDate } from '../lib/utils'; import { useRouter } from '@/shared/config/i18n/navigation'; import { useMutation } from '@tanstack/react-query'; import { apiRequest } from '@/shared/request/apiRequest'; import { links } from '@/shared/request/links'; import { toast } from 'react-toastify'; import { PaymentModal } from '@/features/modals/paymentModal/ui/Paymentmodal'; import { PLAGIAT_SERVICE_FEE, SERTIFICATE_PRICE } from '@/shared/lib/metadata'; // ─── State badge ─────────────────────────────────────────────────────────────── export const StateBadge: React.FC<{ state: 'paid' | 'unpaid' }> = ({ state, }) => { const isPaid = state === 'paid'; const t = useTranslations(); return ( {isPaid ? t('Cabinet.paid') : t('Cabinet.unpaid')} ); }; // ─── Row ─────────────────────────────────────────────────────────────────────── export const HistoryTableRow: React.FC< HistoryTableRowProps & { index: number } > = ({ item, index }) => { const router = useRouter(); const tUnknown = useTranslations(); const [isPaymentOpen, setIsPaymentOpen] = useState(false); const payment = useMutation({ mutationKey: ['payment', item.order_id], mutationFn: ({ order_id }: { order_id: number }) => apiRequest<{ payment_link: string }>('POST', links.payment(order_id)), onSuccess: (res) => { window.open(res.data.payment_link, '_self'); setIsPaymentOpen(false); }, onError: (err) => { toast.error(err instanceof Error ? err.message : 'Xatolik yuz berdi'); setIsPaymentOpen(false); }, }); const price = item.price_calculation ?? { service_fee: item.state === 'unpaid' ? PLAGIAT_SERVICE_FEE : 0, discount: 0, certificate: item.certificate ? SERTIFICATE_PRICE : 0, total_price: 41200, currency: 'UZS', }; return ( <> {/* # */} {String(index).padStart(2, '0')} {/* Sarlavha */} {item.title || '—'} {/* Fayl */} {item.file ? ( {tUnknown('file')} ) : ( )} {/* Sana */} {formatDate(item.created_at)} {/* Holat */} { if (item.state === 'unpaid') setIsPaymentOpen(true); }} className={item.state === 'unpaid' ? 'cursor-pointer' : ''} > {/* Amal */} setIsPaymentOpen(false)} price={price} onConfirmPayment={() => payment.mutate({ order_id: Number(item.order_id) }) } isLoading={payment.isPending} hasSertificate={item.certificate} /> ); };