From ad2ce11b0a8fc4346a9f6c5debdc993c20eebe41 Mon Sep 17 00:00:00 2001 From: Guillaume Chau Date: Sat, 22 Apr 2017 21:10:50 +0200 Subject: [PATCH] Better loading state handling --- src/smart-apollo.js | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/smart-apollo.js b/src/smart-apollo.js index 2f41ea6..92c7c78 100644 --- a/src/smart-apollo.js +++ b/src/smart-apollo.js @@ -149,6 +149,7 @@ export class SmartQuery extends SmartApollo { 'throttle', 'debounce', ] + loading = false constructor (vm, key, options, autostart = true) { // Options object callback @@ -196,15 +197,19 @@ export class SmartQuery extends SmartApollo { }) } + this.maySetLoading() + + super.executeApollo(variables) + } + + maySetLoading (force = false) { const currentResult = this.observer.currentResult() - if (currentResult.loading) { + if (force || currentResult.loading) { if (!this.loading) { this.applyLoadingModifier(1) } this.loading = true } - - super.executeApollo(variables) } nextResult (result) { @@ -253,6 +258,7 @@ export class SmartQuery extends SmartApollo { fetchMore (...args) { if (this.observer) { + this.maySetLoading(true) return this.observer.fetchMore(...args) } } @@ -268,21 +274,27 @@ export class SmartQuery extends SmartApollo { refetch (variables) { variables && (this.options.variables = variables) if (this.observer) { - return this.observer.refetch(variables) + const result = this.observer.refetch(variables) + this.maySetLoading() + return result } } setVariables (variables, tryFetch) { this.options.variables = variables if (this.observer) { - return this.observer.setVariables(variables, tryFetch) + const result = this.observer.setVariables(variables, tryFetch) + this.maySetLoading() + return result } } setOptions (options) { Object.assign(this.options, options) if (this.observer) { - return this.observer.setOptions(options) + const result = this.observer.setOptions(options) + this.maySetLoading() + return result } }