add sorting for comission levels

This commit is contained in:
smanylov
2026-02-16 12:28:24 +07:00
parent 198c8b452d
commit bcbe64807b
+53 -14
View File
@@ -2,24 +2,69 @@
import { useQuery } from '@tanstack/react-query'; import { useQuery } from '@tanstack/react-query';
import { fetchReferralsLevels, fetchReferralUserStats } from '@/app/actions/referralsActions'; import { fetchReferralsLevels, fetchReferralUserStats } from '@/app/actions/referralsActions';
import { useEffect } from 'react';
interface ReferralLevel {
name: string;
id: string;
next: string | null;
share: number;
maxInvitee: number;
minInvitee: number;
}
interface ReferralsData {
referrals: ReferralLevel[];
}
export default function CommissionLevels() { export default function CommissionLevels() {
const { const {
data: referralsLevels, data: referralsLevels,
isLoading, isLoading,
isError, isError,
error error
} = useQuery({ } = useQuery<ReferralsData, Error, ReferralLevel[]>({
queryKey: ['referralsLevels'], queryKey: ['referralsLevels'],
queryFn: () => { queryFn: () => fetchReferralsLevels(),
return fetchReferralsLevels();
},
select: (data) => { select: (data) => {
if (data?.referrals) { if (data?.referrals) {
return data?.referrals const itemsMap = new Map<string, ReferralLevel>();
data.referrals.forEach(item => {
itemsMap.set(item.id, item);
});
const referencedIds = new Set(
data.referrals
.map(item => item.next)
.filter((next): next is string => next !== null)
);
const firstItem = data.referrals.find(item => !referencedIds.has(item.id));
if (!firstItem) {
return [];
}
const sortedReferrals: ReferralLevel[] = [];
let currentItem = firstItem;
while (currentItem) {
sortedReferrals.push(currentItem);
if (currentItem.next === null) {
break;
}
currentItem = itemsMap.get(currentItem.next)!;
if (sortedReferrals.includes(currentItem)) {
break;
}
}
return sortedReferrals;
} else { } else {
return [] return [];
} }
} }
}); });
@@ -76,13 +121,7 @@ export default function CommissionLevels() {
</h3> </h3>
<div className="commission-levels"> <div className="commission-levels">
{ {
referralsLevels.map((item: { referralsLevels.map((item: ReferralLevel) => {
id: string,
share: string,
name: string,
minInvitee: number,
maxInvitee: number
}) => {
return ( return (
<div <div
className={ className={