Files
zkill-susser-frontend/src/hooks/useStatistics.ts
gpt-engineer-app[bot] 64f7791b7a Changes
2026-01-05 20:50:50 +00:00

68 lines
2.0 KiB
TypeScript

import { useQuery } from '@tanstack/react-query';
import { fetchStatistics, fetchItemNames, searchItems, fetchItemGroup } from '@/lib/api';
import { FilterState, FitStatistics, ItemCount } from '@/types/api';
import { useMemo } from 'react';
export function useStatistics(filters: FilterState) {
return useQuery({
queryKey: ['statistics', filters],
queryFn: () => fetchStatistics({
ship: filters.ship,
systems: filters.systems.length > 0 ? filters.systems : undefined,
modules: filters.modules.length > 0 ? filters.modules : undefined,
groups: filters.groups.length > 0 ? filters.groups : undefined,
}),
staleTime: 30000,
});
}
export function useItemNames(ids: number[]) {
return useQuery({
queryKey: ['itemNames', ids.sort().join(',')],
queryFn: () => fetchItemNames(ids),
enabled: ids.length > 0,
staleTime: Infinity, // Item names don't change
});
}
export function useSearch(query: string) {
return useQuery({
queryKey: ['search', query],
queryFn: () => searchItems(query),
enabled: query.length >= 2,
staleTime: 60000,
});
}
export function useItemGroup(itemId: number | null) {
return useQuery({
queryKey: ['itemGroup', itemId],
queryFn: () => fetchItemGroup(itemId!),
enabled: itemId !== null,
staleTime: Infinity, // Groups don't change
});
}
// Hook to extract all unique item IDs from statistics for batch name lookup
export function useStatisticsItemIds(stats: FitStatistics | undefined): number[] {
return useMemo(() => {
if (!stats) return [];
const ids = new Set<number>();
const addItems = (items: ItemCount[]) => {
items.forEach(item => ids.add(item.itemId));
};
addItems(stats.ships);
addItems(stats.systemBreakdown);
addItems(stats.highSlotModules);
addItems(stats.midSlotModules);
addItems(stats.lowSlotModules);
addItems(stats.rigs);
addItems(stats.drones);
return Array.from(ids);
}, [stats]);
}