mirror of
https://github.com/ascribe/onion.git
synced 2024-12-22 09:23:13 +01:00
Increase robustness of coa fetching routine
This commit is contained in:
parent
da75353b00
commit
2cc02d9599
@ -9,6 +9,7 @@ class EditionActions {
|
||||
'fetchEdition',
|
||||
'successFetchEdition',
|
||||
'successFetchCoa',
|
||||
'flushEdition',
|
||||
'errorCoa',
|
||||
'errorEdition'
|
||||
);
|
||||
|
@ -39,6 +39,7 @@ let Edition = React.createClass({
|
||||
actionPanelButtonListType: React.PropTypes.func,
|
||||
furtherDetailsType: React.PropTypes.func,
|
||||
edition: React.PropTypes.object,
|
||||
coaError: React.PropTypes.object,
|
||||
currentUser: React.PropTypes.object,
|
||||
loadEdition: React.PropTypes.func
|
||||
},
|
||||
@ -77,7 +78,9 @@ let Edition = React.createClass({
|
||||
title={getLangText('Certificate of Authenticity')}
|
||||
show={this.props.edition.acl.acl_coa === true}>
|
||||
<CoaDetails
|
||||
coa={this.props.edition.coa}/>
|
||||
coa={this.props.edition.coa}
|
||||
coaError={this.props.coaError}
|
||||
editionId={this.props.edition.bitcoin_id}/>
|
||||
</CollapsibleParagraph>
|
||||
|
||||
<CollapsibleParagraph
|
||||
@ -216,10 +219,28 @@ let EditionSummary = React.createClass({
|
||||
|
||||
let CoaDetails = React.createClass({
|
||||
propTypes: {
|
||||
coa: React.PropTypes.object
|
||||
editionId: React.PropTypes.string,
|
||||
coa: React.PropTypes.object,
|
||||
coaError: React.PropTypes.object
|
||||
},
|
||||
|
||||
contactOnIntercom() {
|
||||
window.Intercom('showNewMessage', `Hi, I'm having problems generating a Certificate of Authenticity for Edition: ${this.props.editionId}`);
|
||||
console.logGlobal(new Error(`Coa couldn't be created for edition: ${this.props.editionId}`));
|
||||
},
|
||||
|
||||
render() {
|
||||
if(this.props.coaError) {
|
||||
return (
|
||||
<div className="text-center">
|
||||
<p>{getLangText('There was an error generating your Certificate of Authenticity.')}</p>
|
||||
<p>
|
||||
{getLangText('Try to refresh the page. If this happens repeatedly, please ')}
|
||||
<a style={{ cursor: 'pointer' }} onClick={this.contactOnIntercom}>{getLangText('contact us')}</a>.
|
||||
</p>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
if(this.props.coa && this.props.coa.url_safe) {
|
||||
return (
|
||||
<div>
|
||||
|
@ -48,6 +48,7 @@ let EditionContainer = React.createClass({
|
||||
// just reset the edition that is saved in the edition store
|
||||
// as it will otherwise display wrong/old data once the user loads
|
||||
// the edition detail a second time
|
||||
EditionActions.flushEdition();
|
||||
EditionActions.fetchEdition(this.props.params.editionId);
|
||||
|
||||
UserActions.fetchCurrentUser();
|
||||
@ -95,6 +96,7 @@ let EditionContainer = React.createClass({
|
||||
actionPanelButtonListType={this.props.actionPanelButtonListType}
|
||||
furtherDetailsType={this.props.furtherDetailsType}
|
||||
edition={this.state.edition}
|
||||
coaError={this.state.coaMeta.err}
|
||||
currentUser={this.state.currentUser}
|
||||
loadEdition={() => EditionActions.fetchEdition(this.props.params.editionId)} />
|
||||
);
|
||||
|
@ -1,18 +0,0 @@
|
||||
'use strict';
|
||||
|
||||
import requests from '../utils/requests';
|
||||
|
||||
let CoaFetcher = {
|
||||
/**
|
||||
* Fetch one user from the API.
|
||||
* If no arg is supplied, load the current user
|
||||
*/
|
||||
fetchOne(id) {
|
||||
return requests.get('coa', {'id': id});
|
||||
},
|
||||
create(bitcoinId) {
|
||||
return requests.post('coa_create', {body: {'bitcoin_id': bitcoinId}});
|
||||
}
|
||||
};
|
||||
|
||||
export default CoaFetcher;
|
@ -1,15 +0,0 @@
|
||||
'use strict';
|
||||
|
||||
import requests from '../utils/requests';
|
||||
|
||||
let EditionFetcher = {
|
||||
/**
|
||||
* Fetch one user from the API.
|
||||
* If no arg is supplied, load the current user
|
||||
*/
|
||||
fetchOne(editionId) {
|
||||
return requests.get('edition', {'bitcoin_id': editionId});
|
||||
}
|
||||
};
|
||||
|
||||
export default EditionFetcher;
|
@ -36,7 +36,7 @@ class EditionStore {
|
||||
|
||||
if(this.edition && this.edition.coa && typeof this.edition.coa.constructor !== Object) {
|
||||
this.getInstance().lookupCoa();
|
||||
} else if(this.edition && !this.edition.coa) {
|
||||
} else if(this.edition && !this.edition.coa && this.edition.acl.acl_coa) {
|
||||
this.getInstance().performCreateCoa();
|
||||
}
|
||||
}
|
||||
@ -46,11 +46,22 @@ class EditionStore {
|
||||
this.edition.coa = coa;
|
||||
}
|
||||
|
||||
onEditionError(err) {
|
||||
onFlushEdition() {
|
||||
this.edition = null;
|
||||
this.editionMeta = {
|
||||
err: null,
|
||||
idToFetch: null
|
||||
};
|
||||
this.coaMeta = {
|
||||
err: null
|
||||
};
|
||||
}
|
||||
|
||||
onErrorEdition(err) {
|
||||
this.editionMeta.err = err;
|
||||
}
|
||||
|
||||
onCoaError(err) {
|
||||
onErrorCoa(err) {
|
||||
this.coaMeta.err = err;
|
||||
}
|
||||
}
|
||||
|
@ -12,7 +12,14 @@ import { argsToQueryParams } from '../utils/url_utils';
|
||||
class Requests {
|
||||
unpackResponse(response) {
|
||||
if (response.status >= 500) {
|
||||
throw new Error(response.status + ' - ' + response.statusText + ' - on URL:' + response.url);
|
||||
let err = new Error(response.status + ' - ' + response.statusText + ' - on URL:' + response.url);
|
||||
response
|
||||
.text()
|
||||
.then((resText) => JSON.parse(resText))
|
||||
.then((resJSON) => {
|
||||
err = new Error(resJSON.errors.pop());
|
||||
})
|
||||
.catch(() => { throw err; });
|
||||
}
|
||||
|
||||
return Q.Promise((resolve, reject) => {
|
||||
|
Loading…
Reference in New Issue
Block a user