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 | 1x 1x 7x 7x 7x 7x 7x 1x | import React, { createContext, useCallback, useContext, useState } from 'react';
import { MatchData } from '@sb/types';
import { matchStore } from '@sb/constants';
interface EventDetailContextType {
isDetailOpen: boolean;
eventId: string;
setDetailOpen: (isOpen: boolean) => void;
assignEventId: (eventId: string) => void;
fetchMatchDataMock: (eventId: string) => Promise<MatchData>;
}
const EventDetailContext = createContext<EventDetailContextType | undefined>(undefined);
export const EventDetailProvider = ({ children }: { children: React.ReactNode }) => {
const [isDetailOpen, setIsDetailOpen] = useState(false);
const [eventId, setEventId] = useState('');
const setDetailOpen = useCallback((isOpen: boolean) => {
setIsDetailOpen(isOpen);
}, []);
const assignEventId = useCallback((eventId: string) => {
setEventId(eventId);
}, []);
function fetchMatchDataMock(eventId: string): Promise<MatchData> {
return new Promise((resolve, reject) => {
setTimeout(() => {
const data = matchStore[eventId];
if (data) resolve(data);
else reject(new Error(`No match found for ${eventId}`));
}, 300);
});
}
return (
<EventDetailContext.Provider
value={{
isDetailOpen,
eventId,
setDetailOpen,
assignEventId,
fetchMatchDataMock: fetchMatchDataMock,
}}
>
{children}
</EventDetailContext.Provider>
);
};
export const useEventDetail = () => {
const context = useContext(EventDetailContext);
if (!context) {
throw new Error('useEventDetail must be used within a EventDetailProvider');
}
return context;
};
|