edit payments history

This commit is contained in:
smanylov
2026-02-25 12:53:18 +07:00
parent 9da0a095cb
commit bc1d5d5337
5 changed files with 39 additions and 73 deletions
+9 -3
View File
@@ -192,12 +192,18 @@ export async function getUserPayments() {
const parsed = await response.json(); const parsed = await response.json();
console.log(parsed); console.log(parsed);
return parsed; return {
payments: parsed,
error: null
};
} else { } else {
return null throw 'error';
} }
} catch (error) { } catch (error) {
return null return {
payments: [],
error: 'error'
};
} }
} }
@@ -1,20 +1,19 @@
import { useQuery } from '@tanstack/react-query'; import { useQuery } from '@tanstack/react-query';
import {getUserPayments} from '@/app/actions/referralsActions'; import { getUserPayments } from '@/app/actions/referralsActions';
export interface PaymentsData { export interface ReferralPayments {
amount: number, amount: number,
cancellationReason: string | null, completedAt: string | null,
createdAt: string, createdAt: string,
id: number, id: number,
operationType: string, processAt: string | null
paymentUuid: string, rejectionReason: string | null,
status: string, status: string,
updatedAt: string, updatedAt: string,
} }
export interface UserReferralPayments {
export interface UserPayments { payments: ReferralPayments[],
payments: PaymentsData[],
error: string | null error: string | null
} }
@@ -22,17 +21,18 @@ export const useGetReferralPayments = () => {
return useQuery({ return useQuery({
queryKey: ['referralPayments'], queryKey: ['referralPayments'],
queryFn: getUserPayments, queryFn: getUserPayments,
select: (data): UserPayments => { select: (data): UserReferralPayments => {
/* console.log('referralPayments');
console.log(data); */
if (!data) { if (!data) {
return { return {
payments: [], payments: [],
error: null error: 'error'
} }
} }
return data; return {
payments: data.payments,
error: data.error
}
}, },
retry: false retry: false
}); });
+8
View File
@@ -1,5 +1,9 @@
// Форматирование даты из timestamp // Форматирование даты из timestamp
export const formatDate = (timestamp: number | string) => { export const formatDate = (timestamp: number | string) => {
if (!timestamp) {
return '---'
}
const date = new Date(timestamp); const date = new Date(timestamp);
const day = date.getDate().toString().padStart(2, '0'); const day = date.getDate().toString().padStart(2, '0');
const month = (date.getMonth() + 1).toString().padStart(2, '0'); const month = (date.getMonth() + 1).toString().padStart(2, '0');
@@ -9,6 +13,10 @@ export const formatDate = (timestamp: number | string) => {
}; };
export const formatDateTime = (timestamp: number | string) => { export const formatDateTime = (timestamp: number | string) => {
if (!timestamp) {
return '---'
}
const date = new Date(timestamp); const date = new Date(timestamp);
const hours = date.getHours().toString().padStart(2, '0'); const hours = date.getHours().toString().padStart(2, '0');
const minutes = date.getMinutes().toString().padStart(2, '0'); const minutes = date.getMinutes().toString().padStart(2, '0');
@@ -14,7 +14,6 @@ export default function IncomeAndPayments() {
return fetchReferralUserStats(); return fetchReferralUserStats();
}, },
select: (data) => { select: (data) => {
console.log(data);
if (data?.referralLink) { if (data?.referralLink) {
return data return data
} else { } else {
@@ -6,57 +6,12 @@ import { useReactTable, getCoreRowModel, getSortedRowModel, getPaginationRowMode
import { IconDoubleArrowRight, IconArrowRight, IconDoubleArrowLeft, IconArrowLeft, IconArrowUp, IconArrowDown, IconFilter } from '@/app/ui/icons/icons'; import { IconDoubleArrowRight, IconArrowRight, IconDoubleArrowLeft, IconArrowLeft, IconArrowUp, IconArrowDown, IconFilter } from '@/app/ui/icons/icons';
import { useTranslations, useLocale } from 'next-intl'; import { useTranslations, useLocale } from 'next-intl';
import DropDownList from '@/app/components/DropDownList'; import DropDownList from '@/app/components/DropDownList';
import { useQueryClient, useQuery } from '@tanstack/react-query';
import { pluralize } from '@/app/lib/pluralize'; import { pluralize } from '@/app/lib/pluralize';
import { fetchReferralInvitees } from '@/app/actions/referralsActions'; import { ReferralPayments } from '@/app/hooks/react-query/useGetReferralPayments';
import { formatDate } from '@/app/lib/formatDate';
type InviteesType = {
status?: string;
email?: string;
registrationData: string;
};
type InviteType = {
active?: string;
email?: string;
regDate: string;
};
export default function PaymentsHistory() { export default function PaymentsHistory() {
const { data: paymentsData, isLoading, isError, error, } = useGetReferralPayments();
const { data: paymentsData } = useGetReferralPayments();
useEffect(() => {
console.log(paymentsData);
}, [paymentsData]);
const {
data: referralInvitees,
isLoading,
isError,
error,
} = useQuery<InviteType[], Error, InviteesType[], ['referralInvitees']>({
queryKey: ['referralInvitees'],
queryFn: () => {
return fetchReferralInvitees();
},
select: (data: InviteType[]): InviteesType[] => {
if (!data) return [
];
return data.map((item: InviteType) => {
return {
status: item?.active ? 'active' : 'not-active',
email: item?.email,
registrationData: item?.regDate
};
});
},
});
const queryClient = useQueryClient();
// Состояния // Состояния
const [sorting, setSorting] = useState<SortingState>([]); const [sorting, setSorting] = useState<SortingState>([]);
@@ -72,7 +27,7 @@ export default function PaymentsHistory() {
const locale = useLocale(); const locale = useLocale();
// Определение колонок // Определение колонок
const columns = useMemo<ColumnDef<InviteesType>[]>( const columns = useMemo<ColumnDef<ReferralPayments>[]>(
() => [ () => [
{ {
accessorKey: 'amount', accessorKey: 'amount',
@@ -103,9 +58,7 @@ export default function PaymentsHistory() {
), ),
cell: ({ row }) => ( cell: ({ row }) => (
<div className="text-center table-item"> <div className="text-center table-item">
{/* {row.original.size !== undefined ? convertBytes(row.original.size) : '-'} */} {row.original.amount ?? '-'}
{/* {row.original.email} */}
---
</div> </div>
), ),
}, },
@@ -211,7 +164,7 @@ export default function PaymentsHistory() {
cell: ({ row }) => { cell: ({ row }) => {
return ( return (
<div className="text-center table-item"> <div className="text-center table-item">
{row.original.registrationData?.split('T')[0]} {formatDate(row.original.createdAt) ? formatDate(row.original.createdAt) : '---'}
</div> </div>
) )
}, },
@@ -247,7 +200,7 @@ export default function PaymentsHistory() {
cell: ({ row }) => { cell: ({ row }) => {
return ( return (
<div className="text-center table-item"> <div className="text-center table-item">
{row.original.registrationData?.split('T')[0]} {row.original.updatedAt ? formatDate(row.original.updatedAt) : '---'}
</div> </div>
) )
}, },
@@ -259,7 +212,7 @@ export default function PaymentsHistory() {
// Фильтрация по типу файла и дате // Фильтрация по типу файла и дате
const filteredData = useMemo(() => { const filteredData = useMemo(() => {
let result = referralInvitees; let result = paymentsData?.payments;
if (!result) { if (!result) {
return []; return [];
} }
@@ -315,7 +268,7 @@ export default function PaymentsHistory() {
} */ } */
return result; return result;
}, [referralInvitees, statusFilter, dateFilter]); }, [paymentsData, statusFilter, dateFilter]);
useEffect(() => { useEffect(() => {
const currentPageRows = table.getRowModel().rows; const currentPageRows = table.getRowModel().rows;