Merge "Yangman - select all requests from history tab"
[dlux.git] / modules / yangman-resources / src / main / resources / yangman / models / historylist.model.js
1 define(['app/yangman/models/baselist.model'], function (BaseListModel){
2     'use strict';
3
4     /**
5      * Base history list object
6      * @constructor
7      * @param ParsingJsonService
8      * @param RequestsService
9      */
10     function HistoryListModel(ParsingJsonService, RequestsService){
11
12         BaseListModel.call(this, ParsingJsonService);
13
14         /* jshint validthis: true */
15         var self = this;
16         self.list = [];
17         self.dateGroups = [];
18         self.selectedRequests = [];
19
20         self.addRequestToList = addRequestToList;
21         self.clear = clear;
22         self.createEntry = createEntry;
23         self.deleteRequestItem = deleteRequestItem;
24         self.deselectReqs = deselectReqs;
25         self.groupListByDate = groupListByDate;
26         self.selectReqs = selectReqs;
27         self.toggleReqSelection = toggleReqSelection;
28
29         /**
30          * Mark reqObj as selected
31          * @param {boolean} onlyOneSelected boolean if only this object should be marked as selected
32          * @param reqObj HistoryRequest object to be selected
33          */
34         function toggleReqSelection(onlyOneSelected, reqObj){
35             if (onlyOneSelected){
36                 self.selectedRequests.forEach(function (req){
37                     req.selected = false;
38                 });
39                 self.selectedRequests = [];
40             }
41
42             if (reqObj.selected && !onlyOneSelected){
43                 self.selectedRequests.splice(self.selectedRequests.indexOf(reqObj), 1);
44             }
45
46             reqObj.selected = (reqObj.selected && onlyOneSelected) || !reqObj.selected;
47             if (reqObj.selected){
48                 self.selectedRequests.push(reqObj);
49             }
50
51         }
52
53         /**
54          * Round timestamp to day
55          * @param timeStamp
56          * @returns {number|*}
57          */
58         function roundTimestampToDate(timeStamp){
59             timeStamp -= timeStamp % (24 * 60 * 60 * 1000);//subtract amount of time since midnight
60             timeStamp += new Date().getTimezoneOffset() * 60 * 1000;//add on the timezone offset
61             return timeStamp;
62         }
63
64         /**
65          * Grouping by date to show date groups in yangman
66          */
67         function groupListByDate(){
68             self.list.forEach(addToListDateGroup);
69
70             function addToListDateGroup(elem){
71                 var groupName = roundTimestampToDate(elem.timestamp),
72                     dateGroupArr = self.dateGroups.filter(function(group){
73                         return group.name === groupName;
74                     }),
75                     dateGroup = null;
76
77                 if (dateGroupArr.length){
78                     dateGroup = dateGroupArr[0];
79                 }
80                 else {
81                     dateGroup = {
82                         name: groupName,
83                         longName: new Date(groupName).toDateString(),
84                         requests: [],
85                     };
86                     self.dateGroups.push(dateGroup);
87                 }
88                 dateGroup.requests.push(elem);
89             }
90         }
91
92         /**
93          *
94          * @param elem
95          * @returns {HistoryRequest|*}
96          */
97         function createEntry(elem) {
98             return RequestsService.createHistoryRequestFromElement(elem);
99         }
100
101         /**
102          *
103          * @param reqObj
104          */
105         function addRequestToList(reqObj){
106             self.list.push(reqObj);
107         }
108
109         /**
110          *
111          * @param elem
112          */
113         function deleteRequestItem(elem){
114             self.list.splice(self.list.indexOf(elem), 1);
115         }
116
117         function clear() {
118             self.list = [];
119             self.dateGroups = [];
120             self.selectedRequests = [];
121         }
122
123         /**
124          *
125          * @returns {Array}
126          */
127         self.toJSON = function () {
128             return self.list.map(function (elem) {
129                 return elem.toJSON();
130             });
131         };
132
133         /**
134          * Mark all history requests as deselected
135          */
136         function deselectReqs(){
137             self.selectedRequests.forEach(function (request){
138                 request.selected = false;
139             });
140             self.selectedRequests = [];
141         }
142
143         /**
144          * Mark all history as selected
145          */
146         function selectReqs(requestsList){
147             requestsList.forEach(function (reqObj){
148                 reqObj.selected = true;
149                 self.selectedRequests.push(reqObj);
150             });
151         }
152     }
153
154     HistoryListModel.prototype = Object.create(BaseListModel.prototype);
155
156     return HistoryListModel;
157
158 });