41 lines
1.5 KiB
TypeScript
41 lines
1.5 KiB
TypeScript
import { useQuery } from '@tanstack/react-query';
|
|
import { useInject } from '@/lib/di/hooks/useInject';
|
|
import { TEAM_SERVICE_TOKEN, DRIVER_SERVICE_TOKEN } from '@/lib/di/tokens';
|
|
import { enhanceQueryResult } from '@/lib/di/hooks/useReactQueryWithApiError';
|
|
import type { TeamMemberViewModel } from '@/lib/view-models/TeamMemberViewModel';
|
|
|
|
interface TeamRosterMember {
|
|
driver: any;
|
|
role: string;
|
|
joinedAt: string;
|
|
rating: number | null;
|
|
overallRank: number | null;
|
|
}
|
|
|
|
export function useTeamRoster(memberships: TeamMemberViewModel[]) {
|
|
const teamService = useInject(TEAM_SERVICE_TOKEN);
|
|
const driverService = useInject(DRIVER_SERVICE_TOKEN);
|
|
|
|
const queryResult = useQuery({
|
|
queryKey: ['teamRoster', memberships],
|
|
queryFn: async () => {
|
|
// Get driver details for each membership
|
|
const membersWithDetails = await Promise.all(
|
|
memberships.map(async (m) => {
|
|
const driver = await driverService.findById(m.driverId);
|
|
return {
|
|
driver: driver || { id: m.driverId, name: 'Unknown Driver', country: 'Unknown', position: 'N/A', races: '0', impressions: '0', team: 'None' },
|
|
role: m.role,
|
|
joinedAt: m.joinedAt,
|
|
rating: null, // DriverDTO doesn't include rating
|
|
overallRank: null, // DriverDTO doesn't include overallRank
|
|
};
|
|
})
|
|
);
|
|
return membersWithDetails;
|
|
},
|
|
enabled: memberships.length > 0,
|
|
});
|
|
|
|
return enhanceQueryResult(queryResult);
|
|
} |