import { createContext, useContext, useEffect } from 'react' import { NextPage, usePagination } from 'hooks/usePagination' import { useAuthentication } from 'tools/authentication' import { Channel } from 'models/Channel' import { GuildsChannelsPath } from 'components/Application' export interface Channels { channels: Channel[] hasMore: boolean nextPage: NextPage } const defaultChannelsContext = {} as any const ChannelsContext = createContext(defaultChannelsContext) export interface ChannelsProviderProps { path: GuildsChannelsPath } export const ChannelsProvider: React.FC = (props) => { const { path, children } = props const { authentication } = useAuthentication() const { items: channels, hasMore, nextPage, resetPagination } = usePagination({ api: authentication.api, url: `/guilds/${path.guildId}/channels` }) useEffect(() => { resetPagination() nextPage() }, [nextPage, resetPagination]) return ( {children} ) } export const useChannels = (): Channels => { const channels = useContext(ChannelsContext) if (channels === defaultChannelsContext) { throw new Error('useChannels must be used within ChannelsProvider') } return channels }