Skip to content

Commit

Permalink
fix(useQuery): resubscribe after error
Browse files Browse the repository at this point in the history
  • Loading branch information
Guillaume Chau committed Dec 1, 2019
1 parent d7f14b3 commit 8fcf54d
Showing 1 changed file with 26 additions and 0 deletions.
26 changes: 26 additions & 0 deletions packages/vue-apollo-composable/src/useQuery.ts
Expand Up @@ -7,6 +7,7 @@ import { useApolloClient } from './useApolloClient'
import { ReactiveFunction } from './util/ReactiveFunction'
import { paramToRef } from './util/paramToRef'
import { paramToReactive } from './util/paramToReactive'
import { useEventHook } from './util/useEventHook'
// import { trackQuery } from './util/loadingTracking'

export interface UseQueryOptions<
Expand Down Expand Up @@ -80,6 +81,18 @@ export function useQuery<
...currentOptions.value,
})

startQuerySubscription()

for (const item of subscribeToMoreItems) {
addSubscribeToMore(item)
}
}

function startQuerySubscription () {
if (observer && !observer.closed) return
if (!query.value) return

// Create subscription
observer = query.value.subscribe({
next: onNextResult,
error: onError,
Expand Down Expand Up @@ -111,13 +124,26 @@ export function useQuery<
function onError (queryError: any) {
processNextResult(query.value.currentResult() as ApolloQueryResult<TResult>)
processError(queryError)
// The observable closes the sub if an error occurs
resubscribeToQuery()
}

function processError (queryError: any) {
error.value = queryError
loading.value = false
networkStatus.value = 8
errorEvent.trigger(queryError)
}

function resubscribeToQuery () {
if (!query.value) return
const lastError = query.value.getLastError()
const lastResult = query.value.getLastResult()
query.value.resetLastResults()
startQuerySubscription()
Object.assign(query.value, { lastError, lastResult })
}

let onStopHandlers: (() => void)[] = []

/**
Expand Down

0 comments on commit 8fcf54d

Please sign in to comment.