30 lines
966 B
TypeScript
30 lines
966 B
TypeScript
import React from 'react';
|
|
import { usePollStats } from '../polling/usePollStats';
|
|
|
|
type EventStatsContextValue = ReturnType<typeof usePollStats> & {
|
|
slug: string;
|
|
};
|
|
|
|
const EventStatsContext = React.createContext<EventStatsContextValue | undefined>(undefined);
|
|
|
|
export function EventStatsProvider({ slug, children }: { slug: string; children: React.ReactNode }) {
|
|
const stats = usePollStats(slug);
|
|
const value = React.useMemo<EventStatsContextValue>(
|
|
() => ({ slug, ...stats }),
|
|
[slug, stats.onlineGuests, stats.tasksSolved, stats.latestPhotoAt, stats.loading]
|
|
);
|
|
return <EventStatsContext.Provider value={value}>{children}</EventStatsContext.Provider>;
|
|
}
|
|
|
|
export function useEventStats() {
|
|
const ctx = React.useContext(EventStatsContext);
|
|
if (!ctx) {
|
|
throw new Error('useEventStats must be used within an EventStatsProvider');
|
|
}
|
|
return ctx;
|
|
}
|
|
|
|
export function useOptionalEventStats() {
|
|
return React.useContext(EventStatsContext);
|
|
}
|