mirror of
https://github.com/status-im/consul.git
synced 2025-01-09 21:35:52 +00:00
2b0b1e61d2
The WithEventSource mixin was responsible for catching EventSource errors and cleaning up events sources then the user left a Controller. As we are trying to avoid mixin usage, we moved this all to an `EventSource` component, which can clean up when the component is removed from the page, and also fires an onerror event. Moving to a component firing an onerror event means we can also remove all of our custom computed property work that we were using previously to catch errors (thrown when a service etc. is removed)
39 lines
975 B
JavaScript
39 lines
975 B
JavaScript
import Component from '@ember/component';
|
|
import { inject as service } from '@ember/service';
|
|
|
|
export default Component.extend({
|
|
tagName: '',
|
|
dom: service('dom'),
|
|
logger: service('logger'),
|
|
closeOnDestroy: true,
|
|
onerror: function(e) {
|
|
this.logger.execute(e.error);
|
|
},
|
|
init: function() {
|
|
this._super(...arguments);
|
|
this._listeners = this.dom.listeners();
|
|
},
|
|
willDestroyElement: function() {
|
|
if (this.closeOnDestroy && typeof (this.src || {}).close === 'function') {
|
|
this.src.close();
|
|
this.src.willDestroy();
|
|
}
|
|
this._listeners.remove();
|
|
this._super(...arguments);
|
|
},
|
|
didReceiveAttrs: function() {
|
|
this._listeners.remove();
|
|
if (typeof (this.src || {}).addEventListener === 'function') {
|
|
this._listeners.add(this.src, {
|
|
error: e => {
|
|
try {
|
|
this.onerror(e);
|
|
} catch (err) {
|
|
this.logger.execute(e.error);
|
|
}
|
|
},
|
|
});
|
|
}
|
|
},
|
|
});
|