Files
omnivore/packages/web/lib/networking/queries/useGetViewerQuery.tsx
2024-03-29 11:32:18 +08:00

68 lines
1.3 KiB
TypeScript

import { gql } from 'graphql-request'
import useSWR from 'swr'
import { Feature, featureFragment } from '../fragments/featureFragment'
import { publicGqlFetcher } from '../networkHelpers'
type ViewerQueryResponse = {
mutate: () => void
viewerData?: ViewerQueryResponseData
viewerDataError?: unknown
isLoading: boolean
}
export type ViewerQueryResponseData = {
me?: UserBasicData
}
export type UserBasicData = {
id: string
name: string
isFullUser?: boolean
profile: UserProfile
email: string
source: string
intercomHash: string
featureList: Feature[]
}
export type UserProfile = {
id: string
username: string
pictureUrl?: string
bio?: string
}
export function useGetViewerQuery(): ViewerQueryResponse {
const query = gql`
query Viewer {
me {
id
name
isFullUser
profile {
id
username
pictureUrl
bio
}
email
source
intercomHash
featureList {
...FeatureFields
}
}
}
${featureFragment}
`
const { data, error, mutate } = useSWR(query, publicGqlFetcher)
return {
mutate,
viewerData: data as ViewerQueryResponseData,
viewerDataError: error, // TODO: figure out error possibilities
isLoading: !error && !data,
}
}