Просмотр исходного кода

Store past 30 days of orders on the merchant.
Refactor the way that orders are displayed.

Lee Morgan 5 лет назад
Родитель
Сommit
6d9f47748d

+ 35 - 4
views/dashboardPage/js/classes/Merchant.js

@@ -129,6 +129,41 @@ class Merchant{
                 this
             ));
         }
+
+        //populate orders
+        let from = new Date();
+        from.setDate(from.getDate() - 30);
+        let data = {
+            from: from,
+            to: new Date(),
+            ingredients: []
+        };
+
+        let loader = document.getElementById("loaderContainer");
+        loader.style.display = "flex";
+
+        fetch("/orders/get", {
+            method: "post",
+            headers: {
+                "Content-Type": "application/json"
+            },
+            body: JSON.stringify(data)
+        })
+            .then(response => response.json())
+            .then((response)=>{
+                if(typeof(response) === "string"){
+                    controller.createBanner(response, "error");
+                }else{
+                    this.addOrders(response);
+                    state.updateOrders(this._orders);
+                }
+            })
+            .catch((err)=>{
+                controller.createBanner("SOMETHING WENT WRONG. PLEASE REFRESH THE PAGE", "error");
+            })
+            .finally(()=>{
+                loader.style.display = "none";
+            });
     }
 
     get name(){
@@ -332,10 +367,6 @@ class Merchant{
         return this._orders;
     }
 
-    clearOrders(){
-        this._orders = [];
-    }
-
     /*
     orders: [{
         _id: String,

+ 3 - 2
views/dashboardPage/js/dashboard.js

@@ -418,9 +418,10 @@ window.state = {
         home.drawRevenueGraph();
     },
 
-    updateOrders: function(){
+    updateOrders: function(newOrders){
         ingredients.isPopulated = false;
         ordersStrand.isPopulated = false;
+        if(newOrders !== undefined) orders.orders = newOrders;
     },
 
     updateMerchant(){
@@ -440,7 +441,7 @@ document.getElementById("homeBtn").onclick = ()=>{controller.openStrand("home")}
 document.getElementById("ingredientsBtn").onclick = ()=>{controller.openStrand("ingredients")};
 document.getElementById("recipeBookBtn").onclick = ()=>{controller.openStrand("recipeBook")};
 document.getElementById("analyticsBtn").onclick = ()=>{controller.openStrand("analytics")};
-document.getElementById("ordersBtn").onclick = async ()=>{controller.openStrand("orders")};
+document.getElementById("ordersBtn").onclick = ()=>{controller.openStrand("orders")};
 document.getElementById("transactionsBtn").onclick = ()=>{controller.openStrand("transactions", merchant.getTransactions())};
 document.getElementById("accountBtn").onclick = ()=>{controller.openStrand("account")};
 document.getElementById("feedbackButton").onclick = ()=>{controller.openModal("feedback")};

+ 12 - 4
views/dashboardPage/js/sidebars/newOrder.js

@@ -90,8 +90,12 @@ let newOrder = {
                 if(typeof(response) === "string"){
                     controller.createBanner(response, "error");
                 }else{
-                    merchant.addOrders([response], true);
-                    state.updateOrders();
+                    let from = new Date();
+                    from.setDate(from.getDate() - 30);
+                    if(new Date(response.date) > from){
+                        merchant.addOrders([response], true);
+                        state.updateOrders();
+                    }
                     
                     controller.openStrand("orders", merchant.orders);
                     controller.createBanner("NEW ORDER CREATED", "success");
@@ -150,8 +154,12 @@ let newOrder = {
                 if(typeof(response) === "string"){
                     controller.createBanner(response, "error");
                 }else{
-                    merchant.addOrders([response], true);
-                    state.updateOrders();
+                    let from = new Date();
+                    from.setDate(from.getDate() - 30);
+                    if(new Date(response.date) > from){
+                        merchant.addOrders([response], true);
+                        state.updateOrders();
+                    }
 
                     controller.createBanner("ORDER CREATED AND INGREDIENTS UPDATED SUCCESSFULLY", "success");
                     controller.openStrand("orders");

+ 6 - 2
views/dashboardPage/js/sidebars/orderDetails.js

@@ -49,8 +49,12 @@ let orderDetails = {
                 if(typeof(response) === "string"){
                     controller.createBanner(response, "error");
                 }else{
-                    merchant.removeOrder(order);
-                    state.updateOrders();
+                    let from = new Date();
+                    from.setDate(from.getDate() - 30);
+                    if(order.date > from){
+                        merchant.removeOrder(order);
+                        state.updateOrders();
+                    }
 
                     controller.openStrand("orders", merchant.orders);
                     controller.closeModal();

+ 3 - 2
views/dashboardPage/js/sidebars/orderFilter.js

@@ -69,7 +69,7 @@ let orderFilter = {
             if(typeof(response) === "string"){
                 controller.createBanner(response, "error");
             }else if(response.length === 0){
-                controller.createBanner("NO ORDERS MATCH YOUR SEARCH", "error");
+                controller.createBanner("NO ORDERS MATCH YOUR SEARCH", "alert");
             }else{
                 for(let i = 0; i < response.length; i++){
                     orders.push(new Order(
@@ -84,7 +84,8 @@ let orderFilter = {
                 }
             }
 
-            controller.openStrand("orders", orders);
+            state.updateOrders(orders);
+            controller.openStrand("orders");
         })
         .catch((err)=>{
             controller.createBanner("UNABLE TO DISPLAY THE ORDERS", "error");

+ 12 - 62
views/dashboardPage/js/strands/orders.js

@@ -1,65 +1,14 @@
 let orders = {
+    orders: [],
     isPopulated: false,
 
     display: function(){
-        document.getElementById("orderFilterBtn").addEventListener("click", ()=>{controller.openSidebar("orderFilter")});
-        document.getElementById("newOrderBtn").addEventListener("click", ()=>{controller.openSidebar("newOrder")});
-
         if(this.isPopulated === false){
-            this.getOrders()
-                .then((response)=>{
-                    if(typeof(response) === "string"){
-                        controller.createBanner(response, "error");
-                    }else{
-                        this.displayOrders();
-                    }
-                })
-                .catch((err)=>{
-                    controller.createBanner("UNABLE TO DISPLAY ORDERS", "error");
-                });
-        }else{
+            document.getElementById("orderFilterBtn").onclick = ()=>{controller.openSidebar("orderFilter")};
+            document.getElementById("newOrderBtn").onclick = ()=>{controller.openSidebar("newOrder")};
+
             this.displayOrders();
         }
-
-        this.isPopulated = true;
-    },
-
-    getOrders: function(){
-        let loader = document.getElementById("loaderContainer");
-        loader.style.display = "flex";
-
-        let to = new Date();
-        let from = new Date(to.getFullYear(), to.getMonth(), to.getDate() - 30);
-        from.setHours(0, 0, 0, 0);
-
-        let body = {
-            to: to.toUTCString(),
-            from: from.toUTCString(),
-            ingredients: []};
-
-        return fetch("/orders/get", {
-            method: "post",
-            body: JSON.stringify(body),
-            headers: {
-                "Content-Type": "application/json;charset=utf-8"
-            }
-        })
-            .then(response => response.json())
-            .then((response)=>{
-                if(typeof(response) === "string"){
-                    controller.createBanner(response, "error");
-                }else{
-                    merchant.clearOrders();
-                    merchant.addOrders(response);
-                    state.updateOrders();
-                }
-            })
-            .catch((err)=>{
-                controller.createBanner("SOMETHING WENT WRONG. PLEASE REFRESH THE PAGE", "error");
-            })
-            .finally(()=>{
-                loader.style.display = "none";
-            });
     },
 
     displayOrders: function(){
@@ -70,15 +19,16 @@ let orders = {
             orderList.removeChild(orderList.firstChild);
         }
 
-        for(let i = 0; i < merchant.orders.length; i++){
+        for(let i = 0; i < this.orders.length; i++){
+            
             let orderDiv = template.cloneNode(true);
-            orderDiv.order = merchant.orders[i];
-            orderDiv.children[0].innerText = merchant.orders[i].name;
-            orderDiv.children[1].innerText = `${merchant.orders[i].ingredients.length} ingredients`;
-            orderDiv.children[2].innerText = merchant.orders[i].date.toLocaleDateString("en-US");
-            orderDiv.children[3].innerText = `$${merchant.orders[i].getTotalCost().toFixed(2)}`;
+            orderDiv.order = this.orders[i];
+            orderDiv.children[0].innerText = this.orders[i].name;
+            orderDiv.children[1].innerText = `${this.orders[i].ingredients.length} ingredients`;
+            orderDiv.children[2].innerText = this.orders[i].date.toLocaleDateString("en-US");
+            orderDiv.children[3].innerText = `$${this.orders[i].getTotalCost().toFixed(2)}`;
             orderDiv.onclick = ()=>{
-                controller.openSidebar("orderDetails", merchant.orders[i]);
+                controller.openSidebar("orderDetails", this.orders[i]);
                 orderDiv.classList.add("active");
             }
             orderList.appendChild(orderDiv);