|
@@ -41,6 +41,272 @@ class CreateRecipe extends React.Component<CreateRecipeProps, CreateRecipeState>
|
|
|
this.state = {
|
|
this.state = {
|
|
|
form: {
|
|
form: {
|
|
|
..._recipe,
|
|
..._recipe,
|
|
|
|
|
+ ingredients: [
|
|
|
|
|
+ {
|
|
|
|
|
+ "name": "For the Chicken:",
|
|
|
|
|
+ "ingredients": [
|
|
|
|
|
+ {
|
|
|
|
|
+ "name": "thin boneless skinless chicken breast",
|
|
|
|
|
+ "quantity": 1.5,
|
|
|
|
|
+ "unit": "pound",
|
|
|
|
|
+ "_original": "1-1/2 lb of Thin Boneless Skinless Chicken Breast",
|
|
|
|
|
+ "suggestions": []
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ "name": "olive oil",
|
|
|
|
|
+ "quantity": 2,
|
|
|
|
|
+ "unit": "tablespoon",
|
|
|
|
|
+ "_original": "2 Tbsp of Olive Oil",
|
|
|
|
|
+ "suggestions": []
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ "name": "juice of lime",
|
|
|
|
|
+ "quantity": 1,
|
|
|
|
|
+ "unit": "",
|
|
|
|
|
+ "_original": "Juice of 1 Lime",
|
|
|
|
|
+ "suggestions": []
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ "name": "chili powder",
|
|
|
|
|
+ "quantity": 0.5,
|
|
|
|
|
+ "unit": "teaspoon",
|
|
|
|
|
+ "_original": "1/2 tsp of Chili Powder",
|
|
|
|
|
+ "suggestions": [
|
|
|
|
|
+ {
|
|
|
|
|
+ "_id": "5cf1397d72cd194524435041",
|
|
|
|
|
+ "name": "cocoa powder",
|
|
|
|
|
+ "variants": [
|
|
|
|
|
+ "cocoa"
|
|
|
|
|
+ ],
|
|
|
|
|
+ "equivalences": {
|
|
|
|
|
+ "cup": 1,
|
|
|
|
|
+ "gr": 118,
|
|
|
|
|
+ "tbsp": 16,
|
|
|
|
|
+ "tsp": 48
|
|
|
|
|
+ },
|
|
|
|
|
+ "referenceUnit": "cup",
|
|
|
|
|
+ "prefferedUnit": "gr"
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ "_id": "5cf1397d72cd19452443503c",
|
|
|
|
|
+ "name": "icing sugar",
|
|
|
|
|
+ "variants": [
|
|
|
|
|
+ "confectioner sugar",
|
|
|
|
|
+ "powdered sugar"
|
|
|
|
|
+ ],
|
|
|
|
|
+ "equivalences": {
|
|
|
|
|
+ "cup": 1,
|
|
|
|
|
+ "gr": 125,
|
|
|
|
|
+ "oz": 0.27,
|
|
|
|
|
+ "tbsp": 15,
|
|
|
|
|
+ "tsp": 45,
|
|
|
|
|
+ "lb": 0.27
|
|
|
|
|
+ },
|
|
|
|
|
+ "referenceUnit": "cup",
|
|
|
|
|
+ "prefferedUnit": "gr"
|
|
|
|
|
+ }
|
|
|
|
|
+ ]
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ "name": "oregano",
|
|
|
|
|
+ "quantity": 0.5,
|
|
|
|
|
+ "unit": "teaspoon",
|
|
|
|
|
+ "_original": "1/2 tsp of Oregano",
|
|
|
|
|
+ "suggestions": []
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ "name": "cumin",
|
|
|
|
|
+ "quantity": 0.5,
|
|
|
|
|
+ "unit": "teaspoon",
|
|
|
|
|
+ "_original": "1/2 tsp of Cumin",
|
|
|
|
|
+ "suggestions": []
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ "name": "paprika",
|
|
|
|
|
+ "quantity": 0.5,
|
|
|
|
|
+ "unit": "teaspoon",
|
|
|
|
|
+ "_original": "1/2 tsp of Paprika",
|
|
|
|
|
+ "suggestions": []
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ "name": "granulated garlic",
|
|
|
|
|
+ "quantity": 0.5,
|
|
|
|
|
+ "unit": "teaspoon",
|
|
|
|
|
+ "_original": "1/2 tsp of Granulated Garlic",
|
|
|
|
|
+ "suggestions": [
|
|
|
|
|
+ {
|
|
|
|
|
+ "_id": "5cf1397d72cd19452443503b",
|
|
|
|
|
+ "name": "granulated sugar",
|
|
|
|
|
+ "variants": [
|
|
|
|
|
+ "sugar",
|
|
|
|
|
+ "plain sugar"
|
|
|
|
|
+ ],
|
|
|
|
|
+ "equivalences": {
|
|
|
|
|
+ "cup": 1,
|
|
|
|
|
+ "gr": 200,
|
|
|
|
|
+ "oz": 7.1,
|
|
|
|
|
+ "tbsp": 14,
|
|
|
|
|
+ "tsp": 42,
|
|
|
|
|
+ "lb": 0.4
|
|
|
|
|
+ },
|
|
|
|
|
+ "referenceUnit": "cup",
|
|
|
|
|
+ "prefferedUnit": "gr"
|
|
|
|
|
+ }
|
|
|
|
|
+ ]
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ "name": "salt, to taste",
|
|
|
|
|
+ "quantity": 0,
|
|
|
|
|
+ "unit": "",
|
|
|
|
|
+ "_original": "Salt, to taste",
|
|
|
|
|
+ "suggestions": []
|
|
|
|
|
+ }
|
|
|
|
|
+ ]
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ "name": "For the Dressing:",
|
|
|
|
|
+ "ingredients": [
|
|
|
|
|
+ {
|
|
|
|
|
+ "name": "plain greek yogurt",
|
|
|
|
|
+ "quantity": 0.5,
|
|
|
|
|
+ "unit": "cup",
|
|
|
|
|
+ "_original": "1/2 cup of Plain Greek Yogurt",
|
|
|
|
|
+ "suggestions": [
|
|
|
|
|
+ {
|
|
|
|
|
+ "_id": "5cf1397d72cd194524435040",
|
|
|
|
|
+ "name": "yogurt",
|
|
|
|
|
+ "variants": [
|
|
|
|
|
+ "plain yogurt"
|
|
|
|
|
+ ],
|
|
|
|
|
+ "equivalences": {
|
|
|
|
|
+ "cup": 1,
|
|
|
|
|
+ "gr": 245,
|
|
|
|
|
+ "oz": 8.64,
|
|
|
|
|
+ "tbsp": 16,
|
|
|
|
|
+ "tsp": 48
|
|
|
|
|
+ },
|
|
|
|
|
+ "referenceUnit": "cup",
|
|
|
|
|
+ "prefferedUnit": "gr"
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ "_id": "5cf1397d72cd19452443503b",
|
|
|
|
|
+ "name": "granulated sugar",
|
|
|
|
|
+ "variants": [
|
|
|
|
|
+ "sugar",
|
|
|
|
|
+ "plain sugar"
|
|
|
|
|
+ ],
|
|
|
|
|
+ "equivalences": {
|
|
|
|
|
+ "cup": 1,
|
|
|
|
|
+ "gr": 200,
|
|
|
|
|
+ "oz": 7.1,
|
|
|
|
|
+ "tbsp": 14,
|
|
|
|
|
+ "tsp": 42,
|
|
|
|
|
+ "lb": 0.4
|
|
|
|
|
+ },
|
|
|
|
|
+ "referenceUnit": "cup",
|
|
|
|
|
+ "prefferedUnit": "gr"
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ "_id": "5cf1397d72cd194524435030",
|
|
|
|
|
+ "name": "all purpose flour",
|
|
|
|
|
+ "variants": [
|
|
|
|
|
+ "plain flour",
|
|
|
|
|
+ "all purpose flour",
|
|
|
|
|
+ "regular flour",
|
|
|
|
|
+ "flour"
|
|
|
|
|
+ ],
|
|
|
|
|
+ "equivalences": {
|
|
|
|
|
+ "cup": 1,
|
|
|
|
|
+ "gr": 125,
|
|
|
|
|
+ "tbsp": 15.5,
|
|
|
|
|
+ "tsp": 47
|
|
|
|
|
+ },
|
|
|
|
|
+ "referenceUnit": "cup",
|
|
|
|
|
+ "prefferedUnit": "gr",
|
|
|
|
|
+ "translation": {
|
|
|
|
|
+ "dutch": "patentbloem"
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ ]
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ "name": "fresh cilantro",
|
|
|
|
|
+ "quantity": 1,
|
|
|
|
|
+ "unit": "cup",
|
|
|
|
|
+ "_original": "1 cup of Fresh Cilantro",
|
|
|
|
|
+ "suggestions": []
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ "name": "scallions, roughly chopped",
|
|
|
|
|
+ "quantity": 2,
|
|
|
|
|
+ "unit": "",
|
|
|
|
|
+ "_original": "2 Scallions, roughly chopped",
|
|
|
|
|
+ "suggestions": []
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ "name": "juice of lime or more, according to taste",
|
|
|
|
|
+ "quantity": 1,
|
|
|
|
|
+ "unit": "",
|
|
|
|
|
+ "_original": "Juice of 1 Lime or more, according to taste",
|
|
|
|
|
+ "suggestions": []
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ "name": "olive oil",
|
|
|
|
|
+ "quantity": 1,
|
|
|
|
|
+ "unit": "tablespoon",
|
|
|
|
|
+ "_original": "1 Tbsp of Olive Oil",
|
|
|
|
|
+ "suggestions": []
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ "name": "salt, to taste",
|
|
|
|
|
+ "quantity": 0,
|
|
|
|
|
+ "unit": "",
|
|
|
|
|
+ "_original": "Salt, to taste",
|
|
|
|
|
+ "suggestions": []
|
|
|
|
|
+ }
|
|
|
|
|
+ ]
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ "name": "For the rest of the salad:",
|
|
|
|
|
+ "ingredients": [
|
|
|
|
|
+ {
|
|
|
|
|
+ "name": "fresh lettuce of your choice",
|
|
|
|
|
+ "quantity": 0,
|
|
|
|
|
+ "unit": "",
|
|
|
|
|
+ "_original": "Fresh Lettuce of your choice",
|
|
|
|
|
+ "suggestions": []
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ "name": "bell peppers, halved and seeded",
|
|
|
|
|
+ "quantity": 2,
|
|
|
|
|
+ "unit": "",
|
|
|
|
|
+ "_original": "2 Bell Peppers, halved and seeded",
|
|
|
|
|
+ "suggestions": []
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ "name": "scallions or red onion, sliced",
|
|
|
|
|
+ "quantity": 0,
|
|
|
|
|
+ "unit": "",
|
|
|
|
|
+ "_original": "Scallions or REd Onion, sliced",
|
|
|
|
|
+ "suggestions": []
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ "name": "pico de gallo salsa",
|
|
|
|
|
+ "quantity": 0.5,
|
|
|
|
|
+ "unit": "cup",
|
|
|
|
|
+ "_original": "1/2 cup of Pico De Gallo Salsa",
|
|
|
|
|
+ "suggestions": []
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ "name": "avocado, sliced",
|
|
|
|
|
+ "quantity": 1,
|
|
|
|
|
+ "unit": "",
|
|
|
|
|
+ "_original": "1 Avocado, sliced",
|
|
|
|
|
+ "suggestions": []
|
|
|
|
|
+ }
|
|
|
|
|
+ ]
|
|
|
|
|
+ }
|
|
|
|
|
+ ],
|
|
|
},
|
|
},
|
|
|
scrapeUrl: '',
|
|
scrapeUrl: '',
|
|
|
}
|
|
}
|
|
@@ -69,6 +335,12 @@ class CreateRecipe extends React.Component<CreateRecipeProps, CreateRecipeState>
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ updateSubrecipeName = (subrecipe: number, newValue: string) => {
|
|
|
|
|
+ this.setState({
|
|
|
|
|
+ form: assocPath(['ingredients', subrecipe, 'name'], newValue, this.state.form),
|
|
|
|
|
+ } as Pick<CreateRecipeState, keyof CreateRecipeState>)
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
addIngredient = (subrecipe: number, last: number) => {
|
|
addIngredient = (subrecipe: number, last: number) => {
|
|
|
return () => {
|
|
return () => {
|
|
|
const { ingredients } = this.state.form;
|
|
const { ingredients } = this.state.form;
|
|
@@ -143,14 +415,12 @@ class CreateRecipe extends React.Component<CreateRecipeProps, CreateRecipeState>
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
removeSubrecipe = (index: number) => {
|
|
removeSubrecipe = (index: number) => {
|
|
|
- return () => {
|
|
|
|
|
- this.setState({
|
|
|
|
|
- form: {
|
|
|
|
|
- ...this.state.form,
|
|
|
|
|
- ingredients: remove(index, 1, this.state.form.ingredients)
|
|
|
|
|
- }
|
|
|
|
|
- })
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ this.setState({
|
|
|
|
|
+ form: {
|
|
|
|
|
+ ...this.state.form,
|
|
|
|
|
+ ingredients: remove(index, 1, this.state.form.ingredients)
|
|
|
|
|
+ }
|
|
|
|
|
+ })
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
render() {
|
|
render() {
|
|
@@ -271,6 +541,9 @@ class CreateRecipe extends React.Component<CreateRecipeProps, CreateRecipeState>
|
|
|
<IngredientForm
|
|
<IngredientForm
|
|
|
components={form.ingredients}
|
|
components={form.ingredients}
|
|
|
updateField={this.updateField}
|
|
updateField={this.updateField}
|
|
|
|
|
+ addSubrecipe={this.addSubrecipe}
|
|
|
|
|
+ updateSubrecipeName={this.updateSubrecipeName}
|
|
|
|
|
+ removeSubrecipe={this.removeSubrecipe}
|
|
|
/>
|
|
/>
|
|
|
{/* {
|
|
{/* {
|
|
|
form.ingredients.map((group, i) => (
|
|
form.ingredients.map((group, i) => (
|