Skip to content

Commit 1ae52e0

Browse files
committed
before change to fetchingredient
1 parent d1d796a commit 1ae52e0

File tree

3 files changed

+71
-7
lines changed

3 files changed

+71
-7
lines changed

labs/lab2/src/App.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import './App.css';
22
import 'bootstrap/dist/css/bootstrap.css';
33
import 'bootstrap/dist/js/bootstrap.bundle.min';
4-
import inventory from './inventory.mjs';
5-
import { Order, Salad } from './salad.mjs'
4+
//import inventory from './inventory.mjs';
5+
import { Order } from './salad.mjs'
66
import { useState } from 'react';
77
import { NavLink, Outlet } from 'react-router-dom';
88
//import ComposeSalad from './ComposeSalad'
@@ -12,7 +12,7 @@ import { NavLink, Outlet } from 'react-router-dom';
1212
function App() {
1313
const [order, setOrder] = useState(new Order());
1414

15-
function addSaladOrder(saladForm) {
15+
/* function addSaladOrder(saladForm) {
1616
const salad = new Salad();
1717
1818
for (const item of saladForm.keys()) {
@@ -26,7 +26,7 @@ function App() {
2626
} else {
2727
console.log('saladen behöver ha en bas, en protein, och en dressing')
2828
}
29-
}
29+
} */
3030

3131
function removeSaladOrder(e) {
3232
const newOrder = new Order(order.uuidOrder, order.saladList);
@@ -80,7 +80,7 @@ function App() {
8080
<Header />
8181
<Navbar />
8282

83-
<Outlet context={{order, setOrder, inventory, removeSaladOrder, addSaladOrder}}/>
83+
<Outlet context={{order, setOrder, removeSaladOrder}}/>
8484

8585
{/**<ViewOrder saladOrders={order} removeSaladOrder={removeSaladOrder} />
8686
<ComposeSalad inventory={inventory} addSaladOrder={addSaladOrder} /> **/}

labs/lab2/src/ComposeSalad.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { useState } from 'react';
2-
import { useOutletContext, useNavigate, Outlet, NavLink } from 'react-router-dom';
2+
import { useOutletContext, useNavigate, useLoaderData, Outlet, NavLink } from 'react-router-dom';
33
import { Salad, Order } from './salad.mjs';
44
//import inventory from './inventory.mjs';
55

@@ -10,7 +10,7 @@ function ComposeSalad(props) {
1010
const [extras, setExtra] = useState(new Set());
1111
const order = useOutletContext()['order'];
1212
const setOrder = useOutletContext()['setOrder'];
13-
const inventory = useOutletContext()['inventory'];
13+
const inventory = useLoaderData();
1414
const navigate = useNavigate();
1515

1616
const extrasList = Object.entries(inventory).filter(entry => entry[1]['extra']);

labs/lab2/src/router.js

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,69 @@ import ViewOrder from "./ViewOrder";
77
import Confirm from "./Confirm";
88
import ViewIngredient from "./ViewIngredient";
99

10+
const baseServerURL = "http://localhost:8080";
11+
12+
async function inventoryLoader() {
13+
const inventory = { Sallad: { price: 10, foundation: true, vegan: true } };
14+
await new Promise(resolve => setTimeout(resolve, 500));
15+
16+
/*let promiseFoundations = safeFetchJson(new URL('foundations', baseServerURL))
17+
.then(result => {
18+
console.log(result);
19+
result.forEach(element => {
20+
let promiseFoundationDetails = fetchIngredient('foundations', element)
21+
.then(result => {
22+
inventory[element] = {...result};
23+
console.log(inventory);
24+
});
25+
});
26+
return result;
27+
}); */
28+
let myPromise = [];
29+
myPromise.push(fetchIngredientType('foundations', inventory));
30+
myPromise.push(fetchIngredientType('extras', inventory));
31+
myPromise.push(fetchIngredientType('proteins', inventory));
32+
myPromise.push(fetchIngredientType('dressings', inventory));
33+
34+
return Promise.all(myPromise).then(_ => {
35+
return inventory;
36+
});
37+
}
38+
39+
async function fetchIngredientType (ingredientType, inventory) {
40+
let promises = [];
41+
safeFetchJson(new URL(ingredientType, baseServerURL))
42+
.then(result => {
43+
result.forEach(element => {
44+
let promise = fetchIngredient(ingredientType, element);
45+
promises.push({[element]: promise});
46+
promise.then(result => {
47+
inventory[element] = {...result};
48+
});
49+
});
50+
})
51+
52+
return Promise.all(promises);
53+
}
54+
55+
async function fetchIngredient(type, ingredient) {
56+
let resp = safeFetchJson(new URL(type + '/' + ingredient, baseServerURL));
57+
resp.then(properties => {
58+
console.log({[ingredient]: {...properties}});
59+
});
60+
return resp;
61+
}
62+
63+
function safeFetchJson(url) {
64+
return fetch(url)
65+
.then(response => {
66+
if(!response.ok) {
67+
throw new Error(`${url} returned status ${response.status}`);
68+
}
69+
return response.json();
70+
});
71+
}
72+
1073
const router = createBrowserRouter([
1174
{
1275
element: <App />,
@@ -17,6 +80,7 @@ const router = createBrowserRouter([
1780
},
1881
{
1982
path: "compose-salad",
83+
loader: inventoryLoader,
2084
element: <ComposeSalad />,
2185
children: [
2286
{

0 commit comments

Comments
 (0)