rwadurian/frontend/mining-admin-web/src/features/system-accounts/hooks/use-system-accounts.ts

107 lines
2.8 KiB
TypeScript

import { useQuery } from '@tanstack/react-query';
import { systemAccountsApi, categorizeAccounts } from '../api/system-accounts.api';
import { useMemo } from 'react';
/**
* Hook to fetch all system accounts
*/
export function useSystemAccounts() {
return useQuery({
queryKey: ['system-accounts'],
queryFn: systemAccountsApi.getList,
});
}
/**
* Hook to fetch system accounts summary (includes mining config and circulation pool)
*/
export function useSystemAccountsSummary() {
return useQuery({
queryKey: ['system-accounts', 'summary'],
queryFn: systemAccountsApi.getSummary,
});
}
/**
* Hook to get categorized system accounts for display
*/
export function useCategorizedAccounts() {
const { data, ...rest } = useSystemAccounts();
const categorized = useMemo(() => {
if (!data?.accounts) {
return {
mainPools: [],
systemAccounts: [],
fixedAccounts: [],
otherAccounts: [],
};
}
return categorizeAccounts(data.accounts);
}, [data?.accounts]);
return {
...rest,
data: categorized,
total: data?.total ?? 0,
};
}
/**
* Hook to fetch system account mining records
*/
export function useSystemAccountMiningRecords(
accountType: string,
page: number = 1,
pageSize: number = 20
) {
return useQuery({
queryKey: ['system-accounts', accountType, 'records', page, pageSize],
queryFn: () => systemAccountsApi.getMiningRecords(accountType, page, pageSize),
enabled: !!accountType,
});
}
/**
* Hook to fetch system account transactions
*/
export function useSystemAccountTransactions(
accountType: string,
page: number = 1,
pageSize: number = 20,
referenceType?: string | null,
) {
return useQuery({
queryKey: ['system-accounts', accountType, 'transactions', page, pageSize, referenceType],
queryFn: () => systemAccountsApi.getTransactions(accountType, page, pageSize, referenceType),
enabled: !!accountType,
});
}
/**
* Hook to fetch system account contribution records (算力来源明细)
*/
export function useSystemAccountContributionRecords(
accountType: string,
regionCode: string | null,
page: number = 1,
pageSize: number = 20
) {
return useQuery({
queryKey: ['system-accounts', accountType, regionCode, 'contributions', page, pageSize],
queryFn: () => systemAccountsApi.getContributionRecords(accountType, regionCode, page, pageSize),
enabled: !!accountType,
});
}
/**
* Hook to fetch system account contribution stats (算力明细统计)
*/
export function useSystemAccountContributionStats(accountType: string, regionCode: string | null) {
return useQuery({
queryKey: ['system-accounts', accountType, regionCode, 'contribution-stats'],
queryFn: () => systemAccountsApi.getContributionStats(accountType, regionCode),
enabled: !!accountType,
});
}