Skip to content

Commit dbb1c09

Browse files
author
Guillaume Chau
committed
fix: loading tracking not cleanup correctly on component unmount
1 parent 9c4b6b0 commit dbb1c09

File tree

1 file changed

+18
-23
lines changed

1 file changed

+18
-23
lines changed

packages/vue-apollo-composable/src/util/loadingTracking.ts

Lines changed: 18 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Ref, watch, onUnmounted, ref, getCurrentInstance } from '@vue/composition-api'
1+
import { Ref, watch, onUnmounted, ref, getCurrentInstance, onBeforeUnmount } from '@vue/composition-api'
22

33
export interface LoadingTracking {
44
queries: Ref<number>
@@ -58,38 +58,33 @@ export function getCurrentTracking () {
5858
}
5959
}
6060

61-
export function trackQuery (loading: Ref<boolean>) {
61+
function track (loading: Ref<boolean>, type: keyof LoadingTracking) {
6262
const { appTracking, tracking } = getCurrentTracking()
6363

6464
watch(loading, (value, oldValue) => {
65-
if (oldValue != null) {
65+
if (oldValue != null && value !== oldValue) {
6666
const mod = value ? 1 : -1
67-
tracking.queries.value += mod
68-
appTracking.queries.value += mod
67+
tracking[type].value += mod
68+
appTracking[type].value += mod
6969
}
7070
})
71-
}
72-
73-
export function trackMutation (loading: Ref<boolean>) {
74-
const { appTracking, tracking } = getCurrentTracking()
7571

76-
watch(loading, (value, oldValue) => {
77-
if (oldValue != null) {
78-
const mod = value ? 1 : -1
79-
tracking.mutations.value += mod
80-
appTracking.mutations.value += mod
72+
onBeforeUnmount(() => {
73+
if (loading.value) {
74+
tracking[type].value--
75+
appTracking[type].value--
8176
}
8277
})
8378
}
8479

85-
export function trackSubscription (loading: Ref<boolean>) {
86-
const { appTracking, tracking } = getCurrentTracking()
80+
export function trackQuery (loading: Ref<boolean>) {
81+
track(loading, 'queries')
82+
}
8783

88-
watch(loading, (value, oldValue) => {
89-
if (oldValue != null) {
90-
const mod = value ? 1 : -1
91-
tracking.subscriptions.value += mod
92-
appTracking.subscriptions.value += mod
93-
}
94-
})
84+
export function trackMutation (loading: Ref<boolean>) {
85+
track(loading, 'mutations')
86+
}
87+
88+
export function trackSubscription (loading: Ref<boolean>) {
89+
track(loading, 'subscriptions')
9590
}

0 commit comments

Comments
 (0)