Browse Source

Unit and quantity for ingredients is optional now

Lee Morgan 1 month ago
parent
commit
92709ded98

+ 1 - 5
dev-dist/sw.js

@@ -69,11 +69,7 @@ if (!self.define) {
 }
 define(['./workbox-dc59bdb6'], (function (workbox) { 'use strict';
 
-  self.addEventListener('message', event => {
-    if (event.data && event.data.type === 'SKIP_WAITING') {
-      self.skipWaiting();
-    }
-  });
+  self.skipWaiting();
   workbox.clientsClaim();
   /**
    * The precacheAndRoute() method efficiently caches and responds to

+ 1 - 3
src/lib/server/models/Recipe.js

@@ -13,12 +13,10 @@ const recipeSchema = new mongoose.Schema({
     },
     ingredients: [{
         quantity: {
-            type: Number,
-            required: true
+            type: Number
         },
         unit: {
             type: String,
-            required: true,
             default: ""
         },
         name: {

+ 12 - 4
src/routes/recipe/EditableRecipe.svelte

@@ -48,12 +48,13 @@
     }
 
     const addIngredient = ()=>{
-        if(quantity <= 0) return notify("error", "Quantity must be greater than 0");
-        if(!unit) return notify("error", "Unit is required");
         if(!ingredientName) return notify("error", "Ingredient name is required");
+        if(quantity !== undefined && quantity !== null && quantity !== "" && quantity <= 0){
+            return notify("error", "Quantity must be greater than 0");
+        }
 
         ingredients.push({
-            quantity: quantity,
+            quantity: quantity || undefined,
             unit: unit,
             name: ingredientName
         });
@@ -65,6 +66,13 @@
         quantityInput.focus();
     }
 
+    const ingredientLabel = (ingredient)=>{
+        const measure = [ingredient.quantity, ingredient.unit]
+            .filter((part)=>part !== undefined && part !== null && part !== "")
+            .join(" ");
+        return measure ? `${ingredient.name}, ${measure}` : ingredient.name;
+    }
+
     const addStep = ()=>{
         if(!stepString) return notify("error", "Please enter some text");
         steps.push(stepString);
@@ -92,7 +100,7 @@
                 <li><button
                     onclick={()=>ingredients.splice(idx, 1)}
                     type="button"
-                >{i.name}, {i.quantity} {i.unit}</button></li>
+                >{ingredientLabel(i)}</button></li>
             {/each}
         </ul>
 

+ 7 - 1
src/routes/recipe/[recipeId]/+page.svelte

@@ -18,6 +18,12 @@
         notify("warning", "Recipe mode off.")
     }
 
+    const ingredientLabel = (ingredient)=>{
+        return [ingredient.quantity, ingredient.unit, ingredient.name]
+            .filter((part)=>part !== undefined && part !== null && part !== "")
+            .join(" ");
+    }
+
     const copyLink = ()=>{
         navigator.clipboard.writeText(`https://${location.hostname}/recipe/${data.recipe.id}`);
         notify("success", "Link copied to clipboard");
@@ -71,7 +77,7 @@
 
             <ul>
                 {#each data.recipe.ingredients as i}
-                    <li>{i.quantity} {i.unit} {i.name}</li>
+                    <li>{ingredientLabel(i)}</li>
                 {/each}
             </ul>
 

+ 7 - 1
src/routes/recipe/[recipeId]/edit/+server.js

@@ -11,8 +11,14 @@ export async function POST({request, cookies, params}){
     if(body.steps.length <= 0) error(400, "Preparation steps required");
 
     for(let i = 0; i < body.ingredients.length; i++){
-        if(body.ingredients[i].quantity <= 0) error(400, "Quantity must be greater than 0");
         if(!body.ingredients[i].name) error(400, "Ingredient name required");
+        const qty = body.ingredients[i].quantity;
+        if(qty === undefined || qty === null || qty === ""){
+            delete body.ingredients[i].quantity;
+        }else if(qty <= 0){
+            error(400, "Quantity must be greater than 0");
+        }
+        if(!body.ingredients[i].unit) body.ingredients[i].unit = "";
     }
 
     const recipe = await Recipe.findOne({_id: params.recipeId});

+ 2 - 2
src/routes/recipe/[recipeId]/print/+page.svelte

@@ -28,8 +28,8 @@
                 <ul>
                     {#each recipe.ingredients as i}
                         <li>
-                            <span class="qty">{i.quantity}</span>
-                            <span class="unit">{i.unit}</span>
+                            <span class="qty">{i.quantity ?? ""}</span>
+                            <span class="unit">{i.unit ?? ""}</span>
                             <span class="iname">{i.name}</span>
                         </li>
                     {/each}

+ 7 - 1
src/routes/recipe/new/+server.js

@@ -11,8 +11,14 @@ export async function POST({request, cookies}){
     if(body.steps.length <= 0) error(400, "Preparation steps required");
 
     for(let i = 0; i < body.ingredients.length; i++){
-        if(body.ingredients[i].quantity <= 0) error(400, "Quantity must be greater than 0");
         if(!body.ingredients[i].name) error(400, "Ingredient name required");
+        const qty = body.ingredients[i].quantity;
+        if(qty === undefined || qty === null || qty === ""){
+            delete body.ingredients[i].quantity;
+        }else if(qty <= 0){
+            error(400, "Quantity must be greater than 0");
+        }
+        if(!body.ingredients[i].unit) body.ingredients[i].unit = "";
     }
 
     const recipe = new Recipe({