import { createContext, useContext, useEffect, useState } from 'react' import { Guild } from 'models/Guild' import { Member } from 'models/Member' import { GuildsChannelsPath } from 'components/Application' import { useAuthentication } from 'tools/authentication' export interface GuildMember { guild: Guild member: Member } export interface GuildMemberProps { guildMember: GuildMember path: GuildsChannelsPath } const defaultGuildMemberContext = {} as any const GuildMemberContext = createContext(defaultGuildMemberContext) export const GuildMemberProvider: React.FC = (props) => { const [guildMember, setGuildMember] = useState(props.guildMember) const { authentication } = useAuthentication() useEffect(() => { const fetchGuildMember = async (): Promise => { const { data } = await authentication.api.get( `/guilds/${props.path.guildId}` ) setGuildMember(data) } fetchGuildMember().catch((error) => { console.error(error) }) }, [props.path, authentication.api]) return ( {props.children} ) } export const useGuildMember = (): GuildMember => { const guildMember = useContext(GuildMemberContext) if (guildMember === defaultGuildMemberContext) { throw new Error('useGuildMember must be used within GuildMemberProvider') } return guildMember }