turash/bugulma/frontend/hooks/api/useAnalyticsAPI.ts

106 lines
2.8 KiB
TypeScript

import type {
ConnectionStatistics,
DashboardStatistics,
ImpactMetrics,
MatchingStatistics,
OrganizationStatistics,
PlatformStatistics,
ResourceFlowStatistics,
SupplyDemandAnalysis,
} from '@/services/analytics-api.ts';
import * as analyticsApi from '@/services/analytics-api.ts';
import { useQuery } from '@tanstack/react-query';
/**
* Get connection statistics
* Returns validated data from API or error state
*/
export function useConnectionStatistics() {
return useQuery<ConnectionStatistics>({
queryKey: ['analytics', 'connections'],
queryFn: analyticsApi.getConnectionStatistics,
staleTime: 5 * 60 * 1000, // Cache for 5 minutes
});
}
/**
* Get supply and demand analysis
* Returns validated data from API or error state
*/
export function useSupplyDemandAnalysis() {
return useQuery<SupplyDemandAnalysis>({
queryKey: ['analytics', 'supply-demand'],
queryFn: analyticsApi.getSupplyDemandAnalysis,
staleTime: 5 * 60 * 1000, // Cache for 5 minutes
});
}
/**
* Get dashboard statistics
* Returns validated data from API or error state
*/
export function useDashboardStatistics() {
return useQuery<DashboardStatistics>({
queryKey: ['analytics', 'dashboard'],
queryFn: analyticsApi.getDashboardStatistics,
staleTime: 2 * 60 * 1000, // Cache for 2 minutes
});
}
/**
* Get platform statistics
*/
export function usePlatformStatistics() {
return useQuery<PlatformStatistics>({
queryKey: ['analytics', 'platform'],
queryFn: analyticsApi.getPlatformStatistics,
staleTime: 5 * 60 * 1000, // Cache for 5 minutes
});
}
/**
* Get matching statistics
*/
export function useMatchingStatistics() {
return useQuery<MatchingStatistics>({
queryKey: ['analytics', 'matching'],
queryFn: analyticsApi.getMatchingStatistics,
staleTime: 5 * 60 * 1000, // Cache for 5 minutes
});
}
/**
* Get resource flow statistics
*/
export function useResourceFlowStatistics() {
return useQuery<ResourceFlowStatistics>({
queryKey: ['analytics', 'resource-flow'],
queryFn: analyticsApi.getResourceFlowStatistics,
staleTime: 5 * 60 * 1000, // Cache for 5 minutes
});
}
/**
* Get impact metrics
*/
export function useImpactMetrics() {
return useQuery<ImpactMetrics>({
queryKey: ['analytics', 'impact'],
queryFn: analyticsApi.getImpactMetrics,
staleTime: 5 * 60 * 1000, // Cache for 5 minutes
});
}
/**
* Get organization statistics
* Returns validated data from API or error state
*/
export function useOrganizationStatistics(organizationId: string | undefined) {
return useQuery<OrganizationStatistics>({
queryKey: ['analytics', 'organization', organizationId, 'stats'],
queryFn: () => analyticsApi.getOrganizationStatistics(organizationId!),
enabled: !!organizationId,
staleTime: 2 * 60 * 1000, // Cache for 2 minutes
});
}