Yangman - bugfixes and improvements
[dlux.git] / modules / yangman-resources / src / main / resources / yangman / models / historylist.model.js
index a21397801a9cb716a37297085284b7565274b3e1..0d94b058f7f89bc82b51dbbe0b738413933ef4d0 100644 (file)
@@ -3,26 +3,50 @@ define(['app/yangman/models/baselist.model'], function (BaseListModel){
 
     /**
      * Base history list object
+
      * @constructor
      * @param ParsingJsonService
      * @param RequestsService
      */
-    function HistoryListModel(ParsingJsonService, RequestsService){
+    function HistoryListModel($filter, ParsingJsonService, RequestsService){
 
-        BaseListModel.call(this, ParsingJsonService);
+        BaseListModel.call(this, $filter, ParsingJsonService);
 
         /* jshint validthis: true */
         var self = this;
-        self.list = [];
+
+
+        /**
+         * Array of groups in which are requests from self.list groupped
+         * @type {Array}
+         */
         self.dateGroups = [];
-        self.selectedRequests = [];
+        self.settings = null;
 
-        self.addRequestToList = addRequestToList;
+        self.addItemToList = addItemToList;
         self.clear = clear;
-        self.createEntry = createEntry;
+        self.createItem = createItem;
         self.deleteRequestItem = deleteRequestItem;
-        self.groupListByDate = groupListByDate;
+        self.deselectReqs = deselectReqs;
+        self.selectReqs = selectReqs;
         self.toggleReqSelection = toggleReqSelection;
+        self.getNewestRequest = getNewestRequest;
+        self.setSettings = setSettings;
+
+        /**
+         *
+         */
+        function setSettings(settingsObj) {
+            self.settings = settingsObj;
+        }
+
+
+        /**
+         * Get request with max timestamp (was executed as the last)
+         */
+        function getNewestRequest() {
+            return $filter('orderBy')(self.list, '-timestamp')[0];
+        }
 
         /**
          * Mark reqObj as selected
@@ -31,19 +55,19 @@ define(['app/yangman/models/baselist.model'], function (BaseListModel){
          */
         function toggleReqSelection(onlyOneSelected, reqObj){
             if (onlyOneSelected){
-                self.selectedRequests.forEach(function (req){
+                self.selectedItems.forEach(function (req){
                     req.selected = false;
                 });
-                self.selectedRequests = [];
+                self.selectedItems = [];
             }
 
             if (reqObj.selected && !onlyOneSelected){
-                self.selectedRequests.splice(self.selectedRequests.indexOf(reqObj), 1);
+                self.selectedItems.splice(self.selectedItems.indexOf(reqObj), 1);
             }
 
             reqObj.selected = (reqObj.selected && onlyOneSelected) || !reqObj.selected;
             if (reqObj.selected){
-                self.selectedRequests.push(reqObj);
+                self.selectedItems.push(reqObj);
             }
 
         }
@@ -54,20 +78,19 @@ define(['app/yangman/models/baselist.model'], function (BaseListModel){
          * @returns {number|*}
          */
         function roundTimestampToDate(timeStamp){
-            timeStamp -= timeStamp % (24 * 60 * 60 * 1000);//subtract amount of time since midnight
             timeStamp += new Date().getTimezoneOffset() * 60 * 1000;//add on the timezone offset
+            timeStamp -= timeStamp % (24 * 60 * 60 * 1000);//subtract amount of time since midnight
             return timeStamp;
         }
 
         /**
-         * Grouping by date to show date groups in yangman
+         * Add element to date group
+         * @param elem
          */
-        function groupListByDate(){
-            self.list.forEach(addToListDateGroup);
-
-            function addToListDateGroup(elem){
+        function addElemToListDateGroup(elem){
+            if (elem.timestamp){
                 var groupName = roundTimestampToDate(elem.timestamp),
-                    dateGroupArr = self.dateGroups.filter(function(group){
+                    dateGroupArr = self.dateGroups.filter(function (group){
                         return group.name === groupName;
                     }),
                     dateGroup = null;
@@ -87,12 +110,25 @@ define(['app/yangman/models/baselist.model'], function (BaseListModel){
             }
         }
 
+        function shiftElemFromListDateGroup(elem){
+            if (elem.timestamp){
+                var groupName = roundTimestampToDate(elem.timestamp),
+                    dateGroupArr = self.dateGroups.filter(function (group){
+                        return group.name === groupName;
+                    }),
+                    dateGroup = dateGroupArr[0];
+
+                dateGroup.requests.shift();
+            }
+        }
+
+
         /**
          *
          * @param elem
          * @returns {HistoryRequest|*}
          */
-        function createEntry(elem) {
+        function createItem(elem) {
             return RequestsService.createHistoryRequestFromElement(elem);
         }
 
@@ -100,8 +136,13 @@ define(['app/yangman/models/baselist.model'], function (BaseListModel){
          *
          * @param reqObj
          */
-        function addRequestToList(reqObj){
+        function addItemToList(reqObj){
             self.list.push(reqObj);
+            addElemToListDateGroup(reqObj);
+
+            if (self.list.length > self.settings.data.requestsCount) {
+                shiftElemFromListDateGroup(self.list.shift());
+            }
         }
 
         /**
@@ -115,7 +156,7 @@ define(['app/yangman/models/baselist.model'], function (BaseListModel){
         function clear() {
             self.list = [];
             self.dateGroups = [];
-            self.selectedRequests = [];
+            self.selectedItems = [];
         }
 
         /**
@@ -127,6 +168,26 @@ define(['app/yangman/models/baselist.model'], function (BaseListModel){
                 return elem.toJSON();
             });
         };
+
+        /**
+         * Mark all history requests as deselected
+         */
+        function deselectReqs(){
+            self.selectedItems.forEach(function (request){
+                request.selected = false;
+            });
+            self.selectedItems = [];
+        }
+
+        /**
+         * Mark all history requests as selected
+         */
+        function selectReqs(requestsList){
+            requestsList.forEach(function (reqObj){
+                reqObj.selected = true;
+                self.selectedItems.push(reqObj);
+            });
+        }
     }
 
     HistoryListModel.prototype = Object.create(BaseListModel.prototype);