Эх сурвалжийг харах

Create layout of home page. Can filter by ingredient name. Sorts only on page load.

Lee Morgan 6 жил өмнө
parent
commit
d91bfa8e1e

+ 5 - 5
controllers/home.js

@@ -10,10 +10,10 @@ const token = "f1c88a69-e3e4-059a-da06-8858d0636e82";
 module.exports = {
     displayInventory: (req, res)=>{
         Merchant.findOne({cloverId: merchantId})
-            .populate("ingredients")
+            .populate("inventory.ingredient")
             .then((merchant)=>{
                 if(merchant){
-                    return res.render("inventory");
+                    return res.render("inventory/inventory", {merchant: merchant});
                 }else{
                     return res.redirect("/merchant/new");
                 }
@@ -64,16 +64,16 @@ module.exports = {
                             name: merchant.data.name,
                             cloverId: merchant.data.id,
                             lastUpdateTime: Date.now,
-                            ingredients: [],
+                            inventory: [],
                             recipes: []
                         });
 
                         for(let ingredient of data.ingredients){
                             let newIngredient = {
-                                id: ingredient.id,
+                                ingredient: ingredient.id,
                                 quantity: parseInt(ingredient.quantity)
                             }
-                            newMerchant.ingredients.push(newIngredient);
+                            newMerchant.inventory.push(newIngredient);
                         }
 
                         for(let recipe of recipes){

+ 0 - 4
models/ingredient.js

@@ -14,10 +14,6 @@ const IngredientSchema = new mongoose.Schema({
         type: String,
         required: [true, "You must provide the measurement unit for this item"]
     }
-    // recipes: [{
-    //     type: mongoose.Schema.Types.ObjectId,
-    //     ref: "Recipe"
-    // }]
 })
 
 module.exports = mongoose.model("Ingredient", IngredientSchema);

+ 2 - 2
models/merchant.js

@@ -13,8 +13,8 @@ const MerchantSchema = new mongoose.Schema({
         type: Date,
         default: Date.now
     },
-    ingredients: [{
-        id: {
+    inventory: [{
+        ingredient: {
             type: mongoose.Schema.Types.ObjectId,
             ref: "Ingredient"
         },

+ 27 - 0
views/inventory/inventory.ejs

@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <link rel="stylesheet" href="/inventory/inventory.css">
+        <link rel="stylesheet" href="/shared/shared.css">
+    </head>
+    <body>
+        <% include ../shared/header %>
+
+        <input id="filter" onkeyup="filter()" type="text">
+
+        <table>
+            <thead>
+                <tr>
+                    <th>Item</th>
+                    <th>Category</th>
+                    <th>Quantity</th>
+                </tr>
+                <tbody></tbody>
+            </thead>
+        </table>
+
+        <script>let merchant = <%- JSON.stringify(merchant) %>;</script>
+        <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
+        <script src="/inventory/inventory.js"></script>
+    </body>
+</html>

+ 59 - 0
views/inventory/inventory.js

@@ -0,0 +1,59 @@
+console.log(merchant);
+
+let fullList = [];
+for(let item of merchant.inventory){
+    fullList.push({
+        name: item.ingredient.name,
+        category: item.ingredient.category,
+        quantity: item.quantity,
+        unit: item.ingredient.unitType 
+    });
+}
+
+let tbody = document.querySelector("tbody");
+
+let renderIngredients = (items = fullList)=>{
+    while(tbody.hasChildNodes()){
+        tbody.removeChild(tbody.firstChild);
+    }
+
+    for(let item of items){
+        let row = document.createElement("tr");
+        tbody.appendChild(row);
+
+        let name = document.createElement("td");
+        name.innerText = item.name;
+        row.appendChild(name);
+
+        let category = document.createElement("td");
+        category.innerText = item.category;
+        row.appendChild(category);
+
+        let quantity = document.createElement("td");
+        quantity.innerText = item.quantity;
+        row.appendChild(quantity);
+
+        let unit = document.createElement("td");
+        unit.innerText = item.unit;
+        row.appendChild(unit);
+    }
+}
+
+let sortIngredients = (items = fullList)=>{
+    items.sort((a, b) => (a.name > b.name) ? 1 : -1)
+    renderIngredients();
+}
+
+let filter = ()=>{
+    let items = [];
+    let searchString = document.querySelector("#filter").value;
+    for(let item of fullList){
+        if(item.name.toLowerCase().includes(searchString)){
+            items.push(item);
+        }
+    }
+
+    renderIngredients(items);
+}
+
+sortIngredients();