Yangman - requests settings
[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
7      * @constructor
8      * @param ParsingJsonService
9      * @param RequestsService
10      */
11     function HistoryListModel($filter, ParsingJsonService, RequestsService){
12
13         BaseListModel.call(this, $filter, ParsingJsonService);
14
15         /* jshint validthis: true */
16         var self = this;
17
18
19         /**
20          * Array of groups in which are requests from self.list groupped
21          * @type {Array}
22          */
23         self.dateGroups = [];
24         self.settings = null;
25
26         self.addItemToList = addItemToList;
27         self.clear = clear;
28         self.createItem = createItem;
29         self.deleteRequestItem = deleteRequestItem;
30         self.deselectReqs = deselectReqs;
31         self.selectReqs = selectReqs;
32         self.toggleReqSelection = toggleReqSelection;
33         self.getNewestRequest = getNewestRequest;
34         self.setSettings = setSettings;
35
36         /**
37          *
38          */
39         function setSettings(settingsObj) {
40             self.settings = settingsObj;
41         }
42
43
44         /**
45          * Get request with max timestamp (was executed as the last)
46          */
47         function getNewestRequest() {
48             return $filter('orderBy')(self.list, '-timestamp')[0];
49         }
50
51         /**
52          * Mark reqObj as selected
53          * @param {boolean} onlyOneSelected boolean if only this object should be marked as selected
54          * @param reqObj HistoryRequest object to be selected
55          */
56         function toggleReqSelection(onlyOneSelected, reqObj){
57             if (onlyOneSelected){
58                 self.selectedItems.forEach(function (req){
59                     req.selected = false;
60                 });
61                 self.selectedItems = [];
62             }
63
64             if (reqObj.selected && !onlyOneSelected){
65                 self.selectedItems.splice(self.selectedItems.indexOf(reqObj), 1);
66             }
67
68             reqObj.selected = (reqObj.selected && onlyOneSelected) || !reqObj.selected;
69             if (reqObj.selected){
70                 self.selectedItems.push(reqObj);
71             }
72
73         }
74
75         /**
76          * Round timestamp to day
77          * @param timeStamp
78          * @returns {number|*}
79          */
80         function roundTimestampToDate(timeStamp){
81             timeStamp -= timeStamp % (24 * 60 * 60 * 1000);//subtract amount of time since midnight
82             timeStamp += new Date().getTimezoneOffset() * 60 * 1000;//add on the timezone offset
83             return timeStamp;
84         }
85
86         /**
87          * Add element to date group
88          * @param elem
89          */
90         function addElemToListDateGroup(elem){
91             if (elem.timestamp){
92                 var groupName = roundTimestampToDate(elem.timestamp),
93                     dateGroupArr = self.dateGroups.filter(function (group){
94                         return group.name === groupName;
95                     }),
96                     dateGroup = null;
97
98                 if (dateGroupArr.length){
99                     dateGroup = dateGroupArr[0];
100                 }
101                 else {
102                     dateGroup = {
103                         name: groupName,
104                         longName: new Date(groupName).toDateString(),
105                         requests: [],
106                     };
107                     self.dateGroups.push(dateGroup);
108                 }
109                 dateGroup.requests.push(elem);
110             }
111         }
112
113         function shiftElemFromListDateGroup(elem){
114             if (elem.timestamp){
115                 var groupName = roundTimestampToDate(elem.timestamp),
116                     dateGroupArr = self.dateGroups.filter(function (group){
117                         return group.name === groupName;
118                     }),
119                     dateGroup = dateGroupArr[0];
120
121                 dateGroup.requests.shift();
122             }
123         }
124
125
126         /**
127          *
128          * @param elem
129          * @returns {HistoryRequest|*}
130          */
131         function createItem(elem) {
132             return RequestsService.createHistoryRequestFromElement(elem);
133         }
134
135         /**
136          *
137          * @param reqObj
138          */
139         function addItemToList(reqObj){
140             self.list.push(reqObj);
141             addElemToListDateGroup(reqObj);
142
143             if (self.list.length > self.settings.data.requestsCount) {
144                 shiftElemFromListDateGroup(self.list.shift());
145             }
146         }
147
148         /**
149          *
150          * @param elem
151          */
152         function deleteRequestItem(elem){
153             self.list.splice(self.list.indexOf(elem), 1);
154         }
155
156         function clear() {
157             self.list = [];
158             self.dateGroups = [];
159             self.selectedItems = [];
160         }
161
162         /**
163          *
164          * @returns {Array}
165          */
166         self.toJSON = function () {
167             return self.list.map(function (elem) {
168                 return elem.toJSON();
169             });
170         };
171
172         /**
173          * Mark all history requests as deselected
174          */
175         function deselectReqs(){
176             self.selectedItems.forEach(function (request){
177                 request.selected = false;
178             });
179             self.selectedItems = [];
180         }
181
182         /**
183          * Mark all history requests as selected
184          */
185         function selectReqs(requestsList){
186             requestsList.forEach(function (reqObj){
187                 reqObj.selected = true;
188                 self.selectedItems.push(reqObj);
189             });
190         }
191     }
192
193     HistoryListModel.prototype = Object.create(BaseListModel.prototype);
194
195     return HistoryListModel;
196
197 });