68 lines
1.3 KiB
TypeScript
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,
|
|
}
|
|
}
|