From bcbe64807b02dcab29879285598bb80f2f0a5d88 Mon Sep 17 00:00:00 2001 From: smanylov Date: Mon, 16 Feb 2026 12:28:24 +0700 Subject: [PATCH] add sorting for comission levels --- .../ui/referral-page/commission-levels.tsx | 67 +++++++++++++++---- 1 file changed, 53 insertions(+), 14 deletions(-) diff --git a/src/app/ui/referral-page/commission-levels.tsx b/src/app/ui/referral-page/commission-levels.tsx index 9b5496d..8100367 100644 --- a/src/app/ui/referral-page/commission-levels.tsx +++ b/src/app/ui/referral-page/commission-levels.tsx @@ -2,24 +2,69 @@ import { useQuery } from '@tanstack/react-query'; 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() { + const { data: referralsLevels, isLoading, isError, error - } = useQuery({ + } = useQuery({ queryKey: ['referralsLevels'], - queryFn: () => { - return fetchReferralsLevels(); - }, + queryFn: () => fetchReferralsLevels(), select: (data) => { if (data?.referrals) { - return data?.referrals + const itemsMap = new Map(); + 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 { - return [] + return []; } } }); @@ -76,13 +121,7 @@ export default function CommissionLevels() {
{ - referralsLevels.map((item: { - id: string, - share: string, - name: string, - minInvitee: number, - maxInvitee: number - }) => { + referralsLevels.map((item: ReferralLevel) => { return (