mirror of https://github.com/status-im/consul.git
ui: Reuse repo.reconcile and restartWhenAvailable (#7703)
This commit is contained in:
parent
3d9a55c28b
commit
b2b6543157
|
@ -25,9 +25,7 @@ export default Service.extend({
|
||||||
type: 'message',
|
type: 'message',
|
||||||
data: result,
|
data: result,
|
||||||
};
|
};
|
||||||
if (repo.reconcile === 'function') {
|
repo.reconcile(get(event, 'data.meta'));
|
||||||
repo.reconcile(get(event, 'data.meta') || {});
|
|
||||||
}
|
|
||||||
return event;
|
return event;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,41 +1,27 @@
|
||||||
import { inject as service } from '@ember/service';
|
import { inject as service } from '@ember/service';
|
||||||
import { get } from '@ember/object';
|
import { get } from '@ember/object';
|
||||||
|
|
||||||
|
import { restartWhenAvailable } from 'consul-ui/services/client/http';
|
||||||
import LazyProxyService from 'consul-ui/services/lazy-proxy';
|
import LazyProxyService from 'consul-ui/services/lazy-proxy';
|
||||||
|
|
||||||
import { cache as createCache, BlockingEventSource } from 'consul-ui/utils/dom/event-source';
|
import { cache as createCache, BlockingEventSource } from 'consul-ui/utils/dom/event-source';
|
||||||
|
|
||||||
const createProxy = function(repo, find, settings, cache, serialize = JSON.stringify) {
|
const createProxy = function(repo, find, settings, cache, serialize = JSON.stringify) {
|
||||||
const client = this.client;
|
const client = this.client;
|
||||||
const store = this.store;
|
|
||||||
// custom createEvent, here used to reconcile the ember-data store for each tick
|
// custom createEvent, here used to reconcile the ember-data store for each tick
|
||||||
const createEvent = function(result, configuration) {
|
let createEvent;
|
||||||
|
if (typeof repo.reconcile === 'function') {
|
||||||
|
createEvent = function(result = {}, configuration) {
|
||||||
const event = {
|
const event = {
|
||||||
type: 'message',
|
type: 'message',
|
||||||
data: result,
|
data: result,
|
||||||
};
|
};
|
||||||
const meta = get(event.data || {}, 'meta') || {};
|
if (repo.reconcile === 'function') {
|
||||||
if (typeof meta.date !== 'undefined') {
|
repo.reconcile(get(event, 'data.meta'));
|
||||||
// unload anything older than our current sync date/time
|
|
||||||
const checkNspace = meta.nspace !== '';
|
|
||||||
store.peekAll(repo.getModelName()).forEach(function(item) {
|
|
||||||
const dc = get(item, 'Datacenter');
|
|
||||||
if (dc === meta.dc) {
|
|
||||||
if (checkNspace) {
|
|
||||||
const nspace = get(item, 'Namespace');
|
|
||||||
if (nspace !== meta.namespace) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const date = get(item, 'SyncTime');
|
|
||||||
if (typeof date !== 'undefined' && date != meta.date) {
|
|
||||||
store.unloadRecord(item);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
return event;
|
return event;
|
||||||
};
|
};
|
||||||
|
}
|
||||||
// proxied find*..(id, dc)
|
// proxied find*..(id, dc)
|
||||||
return function() {
|
return function() {
|
||||||
const key = `${repo.getModelName()}.${find}.${serialize([...arguments])}`;
|
const key = `${repo.getModelName()}.${find}.${serialize([...arguments])}`;
|
||||||
|
@ -58,18 +44,7 @@ const createProxy = function(repo, find, settings, cache, serialize = JSON.strin
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
})
|
})
|
||||||
.catch(function(e) {
|
.catch(restartWhenAvailable(client));
|
||||||
// setup the aborted connection restarting
|
|
||||||
// this should happen here to avoid cache deletion
|
|
||||||
const status = get(e, 'errors.firstObject.status');
|
|
||||||
if (status === '0') {
|
|
||||||
// Any '0' errors (abort) should possibly try again, depending upon the circumstances
|
|
||||||
// whenAvailable returns a Promise that resolves when the client is available
|
|
||||||
// again
|
|
||||||
return client.whenAvailable(e);
|
|
||||||
}
|
|
||||||
throw e;
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: key,
|
key: key,
|
||||||
|
@ -85,9 +60,7 @@ const createProxy = function(repo, find, settings, cache, serialize = JSON.strin
|
||||||
let cache = null;
|
let cache = null;
|
||||||
let cacheMap = null;
|
let cacheMap = null;
|
||||||
export default LazyProxyService.extend({
|
export default LazyProxyService.extend({
|
||||||
store: service('store'),
|
|
||||||
settings: service('settings'),
|
settings: service('settings'),
|
||||||
wait: service('timeout'),
|
|
||||||
client: service('client/http'),
|
client: service('client/http'),
|
||||||
init: function() {
|
init: function() {
|
||||||
this._super(...arguments);
|
this._super(...arguments);
|
||||||
|
|
Loading…
Reference in New Issue