Files
omnivore/packages/web/lib/networking/queries/useGetIntegrationQuery.tsx
2024-06-10 18:15:10 +08:00

72 lines
1.4 KiB
TypeScript

import { gql } from 'graphql-request'
import useSWR from 'swr'
import { makeGqlFetcher } from '../networkHelpers'
import { Integration } from './useGetIntegrationsQuery'
interface IntegrationQueryResponse {
isValidating: boolean
integration: Integration
revalidate: () => void
}
interface IntegrationQueryResponseData {
integration: {
integration: Integration
errorCodes?: string[]
}
}
export function useGetIntegrationQuery(name: string): IntegrationQueryResponse {
const query = gql`
query GetIntegration($name: String!) {
integration(name: $name) {
... on IntegrationSuccess {
integration {
id
name
type
token
enabled
createdAt
updatedAt
taskName
settings
}
}
... on IntegrationError {
errorCodes
}
}
}
`
const { data, mutate, isValidating } = useSWR(
query,
makeGqlFetcher(query, { name }),
{}
)
if (!data) {
return {
isValidating,
integration: {} as Integration,
revalidate: () => {
mutate()
},
}
}
const result = data as IntegrationQueryResponseData
const error = result.integration.errorCodes?.find(() => true)
if (error) {
throw error
}
return {
isValidating,
integration: result.integration.integration,
revalidate: () => {
mutate()
},
}
}