mirror of
https://github.com/ascribe/onion.git
synced 2024-12-22 17:33:14 +01:00
b126de5c2d
Avoids inconsistent state where the store might set `null` or `undefined` due to the server’s response
89 lines
2.5 KiB
JavaScript
89 lines
2.5 KiB
JavaScript
'use strict';
|
|
|
|
import { alt } from '../alt';
|
|
import WebhookActions from '../actions/webhook_actions';
|
|
|
|
import WebhookSource from '../sources/webhook_source';
|
|
|
|
class WebhookStore {
|
|
constructor() {
|
|
this.webhooks = [];
|
|
this.webhookEvents = [];
|
|
this.webhookMeta = {
|
|
invalidateCache: false,
|
|
err: null,
|
|
idToDelete: null
|
|
};
|
|
this.webhookEventsMeta = {
|
|
invalidateCache: false,
|
|
err: null
|
|
};
|
|
|
|
this.bindActions(WebhookActions);
|
|
this.registerAsync(WebhookSource);
|
|
}
|
|
|
|
onFetchWebhooks(invalidateCache) {
|
|
this.webhookMeta.invalidateCache = invalidateCache;
|
|
this.getInstance().lookupWebhooks();
|
|
}
|
|
|
|
onSuccessFetchWebhooks({ webhooks = [] }) {
|
|
this.webhookMeta.invalidateCache = false;
|
|
this.webhookMeta.err = null;
|
|
this.webhooks = webhooks;
|
|
|
|
this.webhookEventsMeta.invalidateCache = true;
|
|
this.getInstance().lookupWebhookEvents();
|
|
}
|
|
|
|
onFetchWebhookEvents(invalidateCache) {
|
|
this.webhookEventsMeta.invalidateCache = invalidateCache;
|
|
this.getInstance().lookupWebhookEvents();
|
|
}
|
|
|
|
onSuccessFetchWebhookEvents({ events }) {
|
|
this.webhookEventsMeta.invalidateCache = false;
|
|
this.webhookEventsMeta.err = null;
|
|
|
|
// remove all events that have already been used.
|
|
const usedEvents = this.webhooks
|
|
.reduce((tempUsedEvents, webhook) => {
|
|
tempUsedEvents.push(webhook.event.split('.')[0]);
|
|
return tempUsedEvents;
|
|
}, []);
|
|
|
|
this.webhookEvents = events.filter((event) => {
|
|
return usedEvents.indexOf(event) === -1;
|
|
});
|
|
}
|
|
|
|
onRemoveWebhook(id) {
|
|
this.webhookMeta.invalidateCache = true;
|
|
this.webhookMeta.idToDelete = id;
|
|
|
|
if(!this.getInstance().isLoading()) {
|
|
this.getInstance().performRemoveWebhook();
|
|
}
|
|
}
|
|
|
|
onSuccessRemoveWebhook() {
|
|
this.webhookMeta.idToDelete = null;
|
|
if(!this.getInstance().isLoading()) {
|
|
this.getInstance().lookupWebhooks();
|
|
}
|
|
}
|
|
|
|
onErrorWebhooks(err) {
|
|
console.logGlobal(err);
|
|
this.webhookMeta.err = err;
|
|
}
|
|
|
|
onErrorWebhookEvents(err) {
|
|
console.logGlobal(err);
|
|
this.webhookEventsMeta.err = err;
|
|
}
|
|
}
|
|
|
|
export default alt.createStore(WebhookStore, 'WebhookStore');
|