2
2
mirror of https://github.com/Thream/website.git synced 2024-07-21 09:28:32 +02:00
website/contexts/Guilds.tsx
2021-10-24 05:19:39 +02:00

59 lines
1.3 KiB
TypeScript

import { createContext, useContext } from 'react'
import { NextPage, PaginationData, usePagination } from 'hooks/usePagination'
import { useAuthentication } from 'utils/authentication'
export interface Guild {
id: number
name: string
description: string
icon: string
isPublic: boolean
createdAt: string
updatedAt: string
}
interface PaginationGuild {
id: number
isOwner: boolean
lastVisitedChannelId: number
userId: number
guildId: number
createdAt: string
updatedAt: string
guild: Guild
}
export type Guilds = PaginationData<PaginationGuild>
export interface GuildsValue {
guilds: Guilds
nextPage: NextPage
}
export interface GuildsProviderProps {
guilds: Guilds
}
const defaultGuildsContext: GuildsValue = {} as any
const GuildsContext = createContext<GuildsValue>(defaultGuildsContext)
export const GuildsProvider: React.FC<GuildsProviderProps> = (props) => {
const { authentication } = useAuthentication()
const { data: guilds, nextPage } = usePagination<PaginationGuild>({
api: authentication.api,
url: '/guilds',
defaultPaginationData: props.guilds
})
return (
<GuildsContext.Provider value={{ guilds, nextPage }}>
{props.children}
</GuildsContext.Provider>
)
}
export const useGuilds = (): GuildsValue => {
return useContext(GuildsContext)
}