diff options
Diffstat (limited to 'app/assets/javascripts/vue_realtime_listener/index.js')
-rw-r--r-- | app/assets/javascripts/vue_realtime_listener/index.js | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/app/assets/javascripts/vue_realtime_listener/index.js b/app/assets/javascripts/vue_realtime_listener/index.js new file mode 100644 index 00000000000..30f6680a673 --- /dev/null +++ b/app/assets/javascripts/vue_realtime_listener/index.js @@ -0,0 +1,29 @@ +/* eslint-disable no-param-reassign */ + +((gl) => { + gl.VueRealtimeListener = (removeIntervals, startIntervals) => { + const removeAll = () => { + removeIntervals(); + window.removeEventListener('beforeunload', removeIntervals); + window.removeEventListener('focus', startIntervals); + window.removeEventListener('blur', removeIntervals); + document.removeEventListener('beforeunload', removeAll); + }; + + window.addEventListener('beforeunload', removeIntervals); + window.addEventListener('focus', startIntervals); + window.addEventListener('blur', removeIntervals); + document.addEventListener('beforeunload', removeAll); + + // add removeAll methods to stack + const stack = gl.VueRealtimeListener.reset; + gl.VueRealtimeListener.reset = () => { + gl.VueRealtimeListener.reset = stack; + removeAll(); + stack(); + }; + }; + + // remove all event listeners and intervals + gl.VueRealtimeListener.reset = () => undefined; // noop +})(window.gl || (window.gl = {})); |