diff options
Diffstat (limited to 'app/assets/javascripts/lib/apollo/suppress_network_errors_during_navigation_link.js')
-rw-r--r-- | app/assets/javascripts/lib/apollo/suppress_network_errors_during_navigation_link.js | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/app/assets/javascripts/lib/apollo/suppress_network_errors_during_navigation_link.js b/app/assets/javascripts/lib/apollo/suppress_network_errors_during_navigation_link.js new file mode 100644 index 00000000000..ad92bd4de42 --- /dev/null +++ b/app/assets/javascripts/lib/apollo/suppress_network_errors_during_navigation_link.js @@ -0,0 +1,36 @@ +import { Observable } from 'apollo-link'; +import { onError } from 'apollo-link-error'; +import { isNavigatingAway } from '~/lib/utils/is_navigating_away'; + +/** + * Returns an ApolloLink (or null if not enabled) which supresses network + * errors when the browser is navigating away. + * + * @returns {ApolloLink|null} + */ +export const getSuppressNetworkErrorsDuringNavigationLink = () => { + if (!gon.features?.suppressApolloErrorsDuringNavigation) { + return null; + } + + return onError(({ networkError }) => { + if (networkError && isNavigatingAway()) { + // Return an observable that will never notify any subscribers with any + // values, errors, or completions. This ensures that requests aborted due + // to navigating away do not trigger any failure behaviour. + // + // See '../utils/suppress_ajax_errors_during_navigation.js' for an axios + // interceptor that performs a similar role. + return new Observable(() => {}); + } + + // We aren't suppressing anything here, so simply do nothing. + // The onError helper will forward all values/errors/completions from the + // underlying request observable to the next link if you return a falsey + // value. + // + // Note that this return statement is technically redundant, but is kept + // for explicitness. + return undefined; + }); +}; |