import { createContext, useContext, useEffect } from 'react' import { NextPage, usePagination } from 'hooks/usePagination' import { useAuthentication } from 'tools/authentication' import { MemberWithPublicUser } from 'models/Member' import { GuildsChannelsPath } from 'components/Application' export interface Members { members: MemberWithPublicUser[] hasMore: boolean nextPage: NextPage } const defaultMembersContext = {} as any const MembersContext = createContext(defaultMembersContext) export interface MembersProviderProps { path: GuildsChannelsPath } export const MembersProviders: React.FC = (props) => { const { children, path } = props const { authentication } = useAuthentication() const { items: members, hasMore, nextPage, resetPagination } = usePagination({ api: authentication.api, url: `/guilds/${path.guildId}/members` }) useEffect(() => { resetPagination() nextPage() }, [nextPage, resetPagination]) return ( {children} ) } export const useMembers = (): Members => { const members = useContext(MembersContext) if (members === defaultMembersContext) { throw new Error('useMembers must be used within MembersProvider') } return members }