Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | 'use client' import { useQuery } from '@tanstack/react-query' import type { StudentStakeholders, ViewerRelationshipSummary } from '@/types/student' /** * Response from the stakeholders API */ interface StakeholdersResponse { stakeholders: StudentStakeholders viewerRelationship: ViewerRelationshipSummary } /** * Query key factory for stakeholders queries */ export const stakeholdersKeys = { all: ['stakeholders'] as const, player: (playerId: string) => [...stakeholdersKeys.all, playerId] as const, } /** * Fetch stakeholders data for a player */ async function fetchStakeholders(playerId: string): Promise<StakeholdersResponse> { const response = await fetch(`/api/players/${playerId}/stakeholders`) if (!response.ok) { throw new Error('Failed to fetch stakeholders') } return response.json() } /** * Hook to get complete stakeholder information for a student * * Returns: * - stakeholders: All parents, classrooms, pending requests, presence * - viewerRelationship: Summary of the current user's relationship to this student * * @param playerId - The player/student ID * @param options - React Query options */ export function useStudentStakeholders( playerId: string | null | undefined, options?: { enabled?: boolean staleTime?: number refetchInterval?: number | false } ) { return useQuery({ queryKey: stakeholdersKeys.player(playerId ?? ''), queryFn: () => fetchStakeholders(playerId!), enabled: !!playerId && options?.enabled !== false, staleTime: options?.staleTime ?? 30_000, // 30 seconds refetchInterval: options?.refetchInterval, }) } /** * Simplified hook that only returns stakeholders (without loading/error states) * Useful for components that only need the data when available */ export function useStakeholdersData(playerId: string | null | undefined) { const { data } = useStudentStakeholders(playerId) return { stakeholders: data?.stakeholders ?? null, viewerRelationship: data?.viewerRelationship ?? null, } } |