1
0
Fork 0
mirror of https://github.com/FrankerFaceZ/FrankerFaceZ.git synced 2025-09-15 17:46:55 +00:00

Attempt at fixing caching issues with Apollo for the stream up-time display, as well as adding a re-usable function for grabbing data from Apollo.

This commit is contained in:
SirStendec 2017-11-17 03:12:08 -05:00
parent 863eafd32f
commit d2b4dcbce4
2 changed files with 62 additions and 15 deletions

View file

@ -6,7 +6,7 @@
// ============================================================================
import Module from 'utilities/module';
import {has} from 'utilities/object';
import {has, get} from 'utilities/object';
export default class Apollo extends Module {
constructor(...args) {
@ -264,6 +264,65 @@ export default class Apollo extends Module {
return query && query.observableQuery;
}
ensureQuery(operation, predicate, delay = 500, retry_wait = 120000) {
const query = this.getQuery(operation);
if ( query ) {
const result = query.lastResult;
let passed;
if ( ! result )
passed = false;
else if ( result.loading )
passed = true;
else if ( typeof predicate === 'function' )
passed = predicate(result);
else
passed = get(predicate, result) !== undefined;
if ( ! passed && Date.now() - (query._ffz_last_retry || 0) >= retry_wait ) {
query._ffz_last_retry = Date.now();
if ( delay === 0 )
query.refetch();
else if ( delay > 0 )
setTimeout(() => query.refetch(), delay);
}
}
return query;
}
getFromQuery(operation, predicate, delay = 500, retry_wait = 120000) {
const query = this.getQuery(operation),
result = query && query.lastResult;
if ( ! query )
return undefined;
let out;
if ( result ) {
if ( typeof predicate === 'function' )
out = predicate(result);
else
out = get(predicate, result)
if ( result.loading )
return undefined;
}
if ( out === undefined && Date.now() - (query._ffz_last_retry || 0) >= retry_wait ) {
query._ffz_last_retry = Date.now();
if ( delay === 0 )
query.refetch();
else if ( delay > 0 )
setTimeout(() => query.refetch(), delay);
}
return out;
}
}