/**
* SeatDataContext
* Provides seat data from the GraphQL API to visualizer components
*/
'use client';
import React, { createContext, useContext, ReactNode } from 'react';
import { useSeatData } from '@/hooks/useSeatData';
import { ProvinceSeatData } from '@/lib/visualizer/seatData';
interface SeatDataContextType {
seatData: Record<string, ProvinceSeatData>;
nationalTotals: Record<string, number>;
totalSeats: number;
loading: boolean;
error: Error | undefined;
getSeatBreakdown: (provinceCode: string) => { party: string; seats: number }[];
getDominantParty: (provinceCode: string) => string;
getProvinceSeatData: (provinceCode: string) => ProvinceSeatData | undefined;
}
const SeatDataContext = createContext<SeatDataContextType | null>(null);
export function SeatDataProvider({ children }: { children: ReactNode }) {
const seatDataValue = useSeatData();
return (
<SeatDataContext.Provider value={seatDataValue}>
{children}
</SeatDataContext.Provider>
);
}
export function useSeatDataContext() {
const context = useContext(SeatDataContext);
if (!context) {
throw new Error('useSeatDataContext must be used within a SeatDataProvider');
}
return context;
}