1
0
mirror of https://github.com/ascribe/onion.git synced 2024-06-24 10:16:29 +02:00
onion/js/stores/edition_store.js
2016-01-15 14:20:18 +01:00

98 lines
2.6 KiB
JavaScript

'use strict';
import { alt } from '../alt';
import EditionActions from '../actions/edition_actions';
import EditionSource from '../sources/edition_source';
import CoaSource from '../sources/coa_source';
import { mergeOptions } from '../utils/general_utils';
class EditionStore {
constructor() {
this.getInitialState();
this.bindActions(EditionActions);
this.registerAsync(mergeOptions(EditionSource, CoaSource));
this.exportPublicMethods({
getInitialState: this.getInitialState.bind(this)
});
}
getInitialState() {
this.edition = {};
this.editionMeta = {
err: null
};
this.coaMeta = {
err: null
};
return {
edition: this.edition,
editionMeta: this.editionMeta,
coaMeta: this.coaMeta
};
}
onFetchEdition(editionId) {
this.getInstance().lookupEdition(editionId);
// Prevent alt from sending an empty change event when a request is sent
// off to the source
this.preventDefault();
}
onSuccessFetchEdition({ edition }) {
if (edition) {
this.edition = edition;
this.editionMeta.err = null;
// Also fetch coa if allowed
if (edition.acl.acl_coa) {
if (edition.coa && typeof edition.coa.constructor !== Object) {
this.getInstance().lookupCoa(edition.coa);
} else if (!edition.coa) {
this.getInstance().performCreateCoaForEdition(edition.bitcoin_id);
}
}
} else {
this.editionMeta.err = new Error('Problem fetching the edition');
console.logGlobal(this.editionMeta.err);
}
}
onSuccessFetchCoa({ coa }) {
if (coa && Object.keys(this.edition).length) {
this.edition.coa = coa;
this.coaMeta.err = null;
} else {
this.coaMeta.err = new Error('Problem generating/fetching the COA');
console.logGlobal(this.coaMeta.err);
}
}
onErrorEdition(err) {
console.logGlobal(err);
this.editionMeta.err = err;
}
onErrorCoa(err) {
// On 404s, create a new COA as the COA has not been made yet
if (err && err.json && err.json.status === 404) {
this.getInstance().performCreateCoaForEdition(this.edition.bitcoin_id);
} else {
console.logGlobal(err);
this.coaMeta.err = err;
}
}
onFlushEdition() {
this.getInitialState();
}
}
export default alt.createStore(EditionStore, 'EditionStore');