Update AdminUsers.tsx

This commit is contained in:
Egor
2026-01-17 06:07:07 +03:00
committed by GitHub
parent 8d2b5b8711
commit d6d013cb09

View File

@@ -60,18 +60,6 @@ const MinusIcon = () => (
</svg> </svg>
) )
const BanIcon = () => (
<svg className="w-5 h-5" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth={2}>
<path strokeLinecap="round" strokeLinejoin="round" d="M18.364 18.364A9 9 0 005.636 5.636m12.728 12.728A9 9 0 015.636 5.636m12.728 12.728L5.636 5.636" />
</svg>
)
const CheckIcon = () => (
<svg className="w-5 h-5" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth={2}>
<path strokeLinecap="round" strokeLinejoin="round" d="M4.5 12.75l6 6 9-13.5" />
</svg>
)
const SyncIcon = ({ className = "w-5 h-5" }: { className?: string }) => ( const SyncIcon = ({ className = "w-5 h-5" }: { className?: string }) => (
<svg className={className} fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth={2}> <svg className={className} fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth={2}>
<path strokeLinecap="round" strokeLinejoin="round" d="M7.5 21L3 16.5m0 0L7.5 12M3 16.5h13.5m0-13.5L21 7.5m0 0L16.5 12M21 7.5H7.5" /> <path strokeLinecap="round" strokeLinejoin="round" d="M7.5 21L3 16.5m0 0L7.5 12M3 16.5h13.5m0-13.5L21 7.5m0 0L16.5 12M21 7.5H7.5" />
@@ -133,10 +121,10 @@ function StatusBadge({ status }: { status: string }) {
interface UserRowProps { interface UserRowProps {
user: UserListItem user: UserListItem
onSelect: (user: UserListItem) => void onSelect: (user: UserListItem) => void
formatMoney: (kopeks: number) => string formatAmount: (rubAmount: number) => string
} }
function UserRow({ user, onSelect, formatMoney }: UserRowProps) { function UserRow({ user, onSelect, formatAmount }: UserRowProps) {
return ( return (
<div <div
onClick={() => onSelect(user)} onClick={() => onSelect(user)}
@@ -169,7 +157,7 @@ function UserRow({ user, onSelect, formatMoney }: UserRowProps) {
{/* Balance */} {/* Balance */}
<div className="text-right shrink-0"> <div className="text-right shrink-0">
<div className="font-medium text-dark-100">{formatMoney(user.balance_kopeks)}</div> <div className="font-medium text-dark-100">{formatAmount(user.balance_rubles)}</div>
<div className="text-xs text-dark-500"> <div className="text-xs text-dark-500">
{user.purchase_count > 0 ? `${user.purchase_count} покупок` : 'Нет покупок'} {user.purchase_count > 0 ? `${user.purchase_count} покупок` : 'Нет покупок'}
</div> </div>
@@ -189,8 +177,7 @@ interface UserDetailModalProps {
} }
function UserDetailModal({ userId, onClose, onUpdate }: UserDetailModalProps) { function UserDetailModal({ userId, onClose, onUpdate }: UserDetailModalProps) {
const { t } = useTranslation() const { formatWithCurrency } = useCurrency()
const { formatMoney } = useCurrency()
const [user, setUser] = useState<UserDetailResponse | null>(null) const [user, setUser] = useState<UserDetailResponse | null>(null)
const [loading, setLoading] = useState(true) const [loading, setLoading] = useState(true)
const [activeTab, setActiveTab] = useState<'info' | 'subscription' | 'balance' | 'sync'>('info') const [activeTab, setActiveTab] = useState<'info' | 'subscription' | 'balance' | 'sync'>('info')
@@ -457,7 +444,7 @@ function UserDetailModal({ userId, onClose, onUpdate }: UserDetailModalProps) {
</div> </div>
<div className="p-3 bg-dark-900/50 rounded-xl"> <div className="p-3 bg-dark-900/50 rounded-xl">
<div className="text-xs text-dark-500 mb-1">Всего потрачено</div> <div className="text-xs text-dark-500 mb-1">Всего потрачено</div>
<div className="text-dark-100">{formatMoney(user.total_spent_kopeks)}</div> <div className="text-dark-100">{formatWithCurrency(user.total_spent_kopeks / 100)}</div>
</div> </div>
<div className="p-3 bg-dark-900/50 rounded-xl"> <div className="p-3 bg-dark-900/50 rounded-xl">
<div className="text-xs text-dark-500 mb-1">Покупок</div> <div className="text-xs text-dark-500 mb-1">Покупок</div>
@@ -474,7 +461,7 @@ function UserDetailModal({ userId, onClose, onUpdate }: UserDetailModalProps) {
<div className="text-xs text-dark-500">Рефералов</div> <div className="text-xs text-dark-500">Рефералов</div>
</div> </div>
<div> <div>
<div className="text-lg font-bold text-dark-100">{formatMoney(user.referral.total_earnings_kopeks)}</div> <div className="text-lg font-bold text-dark-100">{formatWithCurrency(user.referral.total_earnings_kopeks / 100)}</div>
<div className="text-xs text-dark-500">Заработано</div> <div className="text-xs text-dark-500">Заработано</div>
</div> </div>
<div> <div>
@@ -622,7 +609,7 @@ function UserDetailModal({ userId, onClose, onUpdate }: UserDetailModalProps) {
{/* Current balance */} {/* Current balance */}
<div className="p-4 bg-gradient-to-r from-blue-500/20 to-purple-500/20 rounded-xl border border-blue-500/30"> <div className="p-4 bg-gradient-to-r from-blue-500/20 to-purple-500/20 rounded-xl border border-blue-500/30">
<div className="text-sm text-dark-400 mb-1">Текущий баланс</div> <div className="text-sm text-dark-400 mb-1">Текущий баланс</div>
<div className="text-3xl font-bold text-dark-100">{formatMoney(user.balance_kopeks)}</div> <div className="text-3xl font-bold text-dark-100">{formatWithCurrency(user.balance_rubles)}</div>
</div> </div>
{/* Add/subtract form */} {/* Add/subtract form */}
@@ -671,7 +658,7 @@ function UserDetailModal({ userId, onClose, onUpdate }: UserDetailModalProps) {
<div className="text-xs text-dark-500">{formatDate(tx.created_at)}</div> <div className="text-xs text-dark-500">{formatDate(tx.created_at)}</div>
</div> </div>
<div className={tx.amount_kopeks >= 0 ? 'text-emerald-400' : 'text-rose-400'}> <div className={tx.amount_kopeks >= 0 ? 'text-emerald-400' : 'text-rose-400'}>
{tx.amount_kopeks >= 0 ? '+' : ''}{formatMoney(tx.amount_kopeks)} {tx.amount_kopeks >= 0 ? '+' : ''}{formatWithCurrency(tx.amount_rubles)}
</div> </div>
</div> </div>
))} ))}
@@ -772,8 +759,7 @@ function UserDetailModal({ userId, onClose, onUpdate }: UserDetailModalProps) {
// ============ Main Page ============ // ============ Main Page ============
export default function AdminUsers() { export default function AdminUsers() {
const { t } = useTranslation() const { formatWithCurrency } = useCurrency()
const { formatMoney } = useCurrency()
const [users, setUsers] = useState<UserListItem[]>([]) const [users, setUsers] = useState<UserListItem[]>([])
const [stats, setStats] = useState<UsersStatsResponse | null>(null) const [stats, setStats] = useState<UsersStatsResponse | null>(null)
@@ -918,7 +904,7 @@ export default function AdminUsers() {
key={user.id} key={user.id}
user={user} user={user}
onSelect={(u) => setSelectedUserId(u.id)} onSelect={(u) => setSelectedUserId(u.id)}
formatMoney={formatMoney} formatAmount={(amount) => formatWithCurrency(amount)}
/> />
)) ))
)} )}