Skip to content

Commit

Permalink
adds Promise catch to Cart
Browse files Browse the repository at this point in the history
  • Loading branch information
davelandry committed Apr 3, 2019
1 parent 5659979 commit f743904
Showing 1 changed file with 29 additions and 6 deletions.
35 changes: 29 additions & 6 deletions app/pages/Cart.jsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import React, {Component} from "react";
// import PropTypes from "prop-types";
import {connect} from "react-redux";
import {Helmet} from "react-helmet";

Expand All @@ -19,6 +20,7 @@ import Loading from "components/Loading";
import {Object} from "es6-shim";
import {updateTitle} from "actions/title";
import {addToCart, clearCart, removeFromCart, toggleCartSetting} from "actions/cart";
// import libs from "../../utils/libs";

const examples = [
{
Expand Down Expand Up @@ -122,17 +124,33 @@ class Cart extends Component {

async reload() {

// const {formatters} = this.context;
const {cart} = this.props;

const urls = merge(cart.data.map(d => d.urls)).map(decodeURIComponent);
const urls = Array.from(new Set(merge(cart.data.map(d => d.urls)).map(decodeURIComponent)));
const stickies = merge(urls.map(url => url
.match(/drilldowns\=[^&]+/g)[0]
.split("=")[1].split(",")
));
const promises = urls.map(url => axios.get(url).then(resp => {
this.setState({progress: this.state.progress + 1});
return resp.data;
}));

const promises = urls.map(url => axios.get(url)
.then(resp => {
this.setState({progress: this.state.progress + 1});
const data = resp.data.data;
// const format = cart.data.find(d => d.urls.includes(url) && d.format);
// console.log(format.format.replace(/^[^\{]*\{/g, "").replace(/\}.*$/g, ""));
// if (format) {
// const f = Function("n", "libs", "formatters", format.format.replace(/^[^\{]*\{/g, "").replace(/\}.*$/g, ""));
// data = f(resp.data, libs, formatters);
// }
return {url, data};
})
.catch(err => {
console.error(err);
this.setState({progress: this.state.progress + 1});
return {url, data: false};
}));

this.setState({loading: true, results: false, progress: 0, total: promises.length + 1});
const responses = await Promise.all(promises);
this.formatData.bind(this)(responses.filter(resp => resp.data), stickies);
Expand Down Expand Up @@ -172,6 +190,7 @@ class Cart extends Component {
});
columns = columns.concat(Object.keys(resp.data[0]));
});

stickies = Array.from(new Set(stickies));
stickies.forEach(s => {
const id = `ID ${s}`;
Expand Down Expand Up @@ -293,7 +312,7 @@ class Cart extends Component {

const {intro, loading, moe, progress, results, stickies, total} = this.state;
const {cart, measures} = this.props;
console.log(loading, progress, total);

if (!cart || !results || loading) {
return <div>
<Helmet title={title}>
Expand Down Expand Up @@ -396,6 +415,10 @@ class Cart extends Component {

}

// Cart.contextTypes = {
// formatters: PropTypes.object
// };

Cart.need = [
fetchData("levels", "/api/cart/levels/")
];
Expand Down

0 comments on commit f743904

Please sign in to comment.