Files
omnivore/packages/web/lib/networking/subscriptions/useGetSubscriptions.tsx

72 lines
1.6 KiB
TypeScript

import { useQuery } from '@tanstack/react-query'
import { gqlFetcher } from '../networkHelpers'
import { gql } from 'graphql-request'
import {
Subscription,
SubscriptionType,
} from '../queries/useGetSubscriptionsQuery'
export function useGetSubscriptions(
variables: {
type?: SubscriptionType | undefined
sortBy?: string | undefined
},
enabled = true
) {
return useQuery({
queryKey: ['subscriptions'],
queryFn: async () => {
const response = (await gqlFetcher(GQL_GET_SUBSCRIPTIONS, {
type: variables.type,
sort: {
by: variables.sortBy ?? 'UPDATED_TIME',
},
})) as SubscriptionsData
if (response.subscriptions?.errorCodes?.length) {
throw new Error(response.subscriptions.errorCodes[0])
}
return response.subscriptions.subscriptions
},
enabled,
})
}
type SubscriptionsResult = {
errorCodes?: string[]
subscriptions: Subscription[]
}
type SubscriptionsData = {
subscriptions: SubscriptionsResult
}
const GQL_GET_SUBSCRIPTIONS = gql`
query GetSubscriptions($type: SubscriptionType, $sort: SortParams) {
subscriptions(type: $type, sort: $sort) {
... on SubscriptionsSuccess {
subscriptions {
id
name
type
newsletterEmail
url
icon
description
status
unsubscribeMailTo
unsubscribeHttpUrl
createdAt
updatedAt
lastFetchedAt
fetchContentType
mostRecentItemDate
failedAt
}
}
... on SubscriptionsError {
errorCodes
}
}
}
`