All files / widgets/EventDataTable/context EventDetailProvider.tsx

40% Statements 8/20
0% Branches 0/4
14.28% Functions 1/7
42.1% Lines 8/19

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;
};