-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add team context, update user/episode context (#679)
- Loading branch information
Showing
17 changed files
with
235 additions
and
79 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
import { createContext, useContext } from "react"; | ||
import { type TeamPrivate } from "../utils/types"; | ||
|
||
export enum TeamStateEnum { | ||
// the current user is not part of a team (or is not logged in) | ||
NO_TEAM = "no_team", | ||
// the current user is part of a team | ||
IN_TEAM = "has_team", | ||
} | ||
|
||
interface CurrentTeamContextType { | ||
teamState: TeamStateEnum; | ||
team?: TeamPrivate; | ||
} | ||
|
||
export const CurrentTeamContext = createContext<CurrentTeamContextType | null>( | ||
null, | ||
); | ||
|
||
export const useCurrentTeam = (): CurrentTeamContextType => { | ||
const currentTeamContext = useContext(CurrentTeamContext); | ||
|
||
if (currentTeamContext === null) { | ||
throw new Error( | ||
"useCurrentTeam has to be used within <CurrentTeamProvider>", | ||
); | ||
} | ||
|
||
return currentTeamContext; | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
import React, { useState, useEffect } from "react"; | ||
import { type TeamPrivate } from "../utils/types"; | ||
import { AuthStateEnum, useCurrentUser } from "../contexts/CurrentUserContext"; | ||
import { CurrentTeamContext, TeamStateEnum } from "./CurrentTeamContext"; | ||
import { useEpisodeId } from "./EpisodeContext"; | ||
import { retrieveTeam } from "../utils/api/team"; | ||
|
||
export const CurrentTeamProvider: React.FC<{ children: React.ReactNode }> = ({ | ||
children, | ||
}) => { | ||
const [teamData, setTeamData] = useState<{ | ||
team?: TeamPrivate; | ||
teamState: TeamStateEnum; | ||
}>({ | ||
teamState: TeamStateEnum.NO_TEAM, | ||
}); | ||
const { authState } = useCurrentUser(); | ||
const { episodeId } = useEpisodeId(); | ||
|
||
useEffect(() => { | ||
const loadTeam = async (): Promise<void> => { | ||
try { | ||
const team = await retrieveTeam(episodeId); | ||
setTeamData({ team, teamState: TeamStateEnum.IN_TEAM }); | ||
} catch { | ||
setTeamData({ teamState: TeamStateEnum.NO_TEAM }); | ||
} | ||
}; | ||
|
||
if (authState === AuthStateEnum.AUTHENTICATED) { | ||
void loadTeam(); | ||
} else { | ||
setTeamData({ | ||
teamState: TeamStateEnum.NO_TEAM, | ||
}); | ||
} | ||
}, [authState, episodeId]); | ||
|
||
return ( | ||
<CurrentTeamContext.Provider value={teamData}> | ||
{children} | ||
</CurrentTeamContext.Provider> | ||
); | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,10 +1,29 @@ | ||
import { createContext } from "react"; | ||
import { DEFAULT_EPISODE } from "../utils/constants"; | ||
|
||
export const EpisodeContext = createContext({ | ||
// the default episode. | ||
episodeId: DEFAULT_EPISODE, | ||
setEpisodeId: (episodeId: string) => { | ||
console.log("default episode"); | ||
}, | ||
}); | ||
import { createContext, useContext } from "react"; | ||
import { type Episode } from "../utils/types"; | ||
import { type Maybe } from "../utils/utilTypes"; | ||
|
||
interface EpisodeIdContextType { | ||
episodeId: string; | ||
setEpisodeId: (episodeId: string) => void; | ||
} | ||
|
||
export const EpisodeContext = createContext<Maybe<Episode>>(undefined); | ||
export const EpisodeIdContext = createContext<EpisodeIdContextType | null>( | ||
null, | ||
); | ||
|
||
// Use this function to retrieve full episode information. If the api call to | ||
// retrieve full episode information has not completed, then | ||
// episodeContext.episode will be undefined. | ||
export const useEpisode = (): Maybe<Episode> => { | ||
return useContext(EpisodeContext); | ||
}; | ||
|
||
// Use this function to retrieve and update the episodeId. | ||
export const useEpisodeId = (): EpisodeIdContextType => { | ||
const episodeIdContext = useContext(EpisodeIdContext); | ||
if (episodeIdContext === null) { | ||
throw new Error("useEpisodeId has to be used within <EpisodeProvider>"); | ||
} | ||
return episodeIdContext; | ||
}; |
Oops, something went wrong.