[PORTAL-7] Rebase
[portal.git] / ecomp-portal-FE-common / client / app / views / widget-catalog / widget-catalog.controller.js
1 /*-\r
2  * ================================================================================\r
3  * ECOMP Portal\r
4  * ================================================================================\r
5  * Copyright (C) 2017 AT&T Intellectual Property\r
6  * ================================================================================\r
7  * Licensed under the Apache License, Version 2.0 (the "License");\r
8  * you may not use this file except in compliance with the License.\r
9  * You may obtain a copy of the License at\r
10  * \r
11  *      http://www.apache.org/licenses/LICENSE-2.0\r
12  * \r
13  * Unless required by applicable law or agreed to in writing, software\r
14  * distributed under the License is distributed on an "AS IS" BASIS,\r
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
16  * See the License for the specific language governing permissions and\r
17  * limitations under the License.\r
18  * ================================================================================\r
19  */\r
20 'use strict';\r
21 (function () {\r
22 \r
23     class WidgetCatalogCtrl {\r
24         constructor(widgetsService, $log, $cookies, $scope, conf, beReaderService, widgetsCatalogService, userProfileService,dashboardService,$compile, ngDialog) {\r
25             \r
26                 $scope.editWidgetModalPopup = function(availableData, resourceType) {\r
27                         $scope.editData = JSON.stringify(availableData);\r
28                         $scope.availableDataTemp = $scope.availableData;\r
29                         ngDialog.open({\r
30                                         templateUrl : 'app/views/dashboard/dashboard-widget-manage.html',\r
31                                         controller : 'CommonWidgetController',\r
32                                         resolve : {\r
33                                                 message : function message() {\r
34                                                         var message = {\r
35                                                                 type : resourceType,\r
36                                                                 availableData : $scope.editData\r
37                                                         };\r
38                                                         return message;\r
39                                                 }\r
40                                         }\r
41                                 }).closePromise.then(needUpdate => {    \r
42                                         if(resourceType=='NEWS'){\r
43                                                 $scope.updateNews();\r
44                                         }else if(resourceType=='EVENTS'){\r
45                                                 $scope.updateEvents();\r
46                                         }else if(resourceType=='IMPORTANTRESOURCES'){\r
47                                                 $scope.updateImportRes();\r
48                                         }\r
49                   });           \r
50                 };\r
51                 \r
52                 $scope.WidgetCatView = [];  \r
53                 $scope.applyPresentationDetailsToWidgetsCatalog = function(widgetsReturned){\r
54                         var rowNo = 0;\r
55                         for (var i = 0; i < widgetsReturned.length; i++) {\r
56                         $scope.WidgetCatView[i] = {\r
57                         sizeX : 2,\r
58                         sizeY : 2,\r
59                         headerText:'',\r
60                         widgetIdentifier : '',\r
61                         url : '',\r
62                         widgetid: '',\r
63                         attrb:'',\r
64                         select: false,\r
65                         };\r
66                         $scope.WidgetCatView[i].widgetid = widgetsReturned[i].id;\r
67                         $scope.WidgetCatView[i].headerText = widgetsReturned[i].headerName;\r
68 \r
69                         if(widgetsReturned[i].headerName === 'widget-news'){\r
70                         $scope.WidgetCatView[i].widgetIdentifier = 'NEWS';\r
71                         }\r
72                         else\r
73                         if(widgetsReturned[i].headerName === 'widget-resources'){\r
74                         $scope.WidgetCatView[i].widgetIdentifier = 'IMPORTANTRESOURCES';\r
75                         }\r
76                         else\r
77                         if(widgetsReturned[i].headerName === 'widget-events'){\r
78                         $scope.WidgetCatView[i].widgetIdentifier = 'EVENTS';\r
79                         }\r
80 \r
81                         $scope.WidgetCatView[i].url = widgetsReturned[i].url;\r
82                         $scope.WidgetCatView[i].attrb = widgetsReturned[i].attrs;\r
83                         $scope.WidgetCatView[i].select = widgetsReturned[i].select;                     \r
84                         }\r
85 \r
86                         $scope.widgetViewData = $scope.WidgetCatView;\r
87                         \r
88                         }\r
89                 \r
90                 /** Widget code starts */\r
91             let getUserWidgets = (loginName) => {\r
92                  \r
93                  this.isCommError = false;\r
94                  var conf = this.conf;\r
95                          widgetsCatalogService.getUserWidgets(loginName).then(res => {\r
96                                  \r
97                                  if(!(res instanceof Array)){\r
98                                         this.isCommError = true;\r
99                                         return;\r
100                                  }\r
101                          for(var i = 0; i < res.length; i++){   \r
102                                  var widget_id = res[i][0];\r
103                                  var widget_name = res[i][1];\r
104                                  let url = this.conf.api.widgetCommon + "/" + widget_id + "/framework.js";\r
105                                  $scope.widgetsList.push({\r
106                                                    id: widget_id,\r
107                                            name: widget_name,\r
108                                            headerName: widget_name,\r
109                                            url: url,\r
110                                            attrs: [{attr: 'data-' + widget_id, value: ''}],\r
111                                            status: res[i][4],\r
112                                            select: (res[i][4] == 'S' || res[i][4] === null) ? true : false\r
113                                          }); \r
114                                  var script = document\r
115                                          .createElement('script');\r
116                                          script.src = url;\r
117                                          script.async = true;\r
118                                          var entry = document\r
119                                                 .getElementsByTagName('script')[0];\r
120                                          entry.parentNode\r
121                                                 .insertBefore(script, entry);\r
122                          }\r
123                          $scope.applyPresentationDetailsToWidgetsCatalog($scope.widgetsList);\r
124                  }).catch(err => {\r
125                      $log.error('WidgetCatalogCtrl::getUserWidgets caught error', err);\r
126                  }).finally(()=> {\r
127                          \r
128                  });\r
129             };\r
130             \r
131             let init = () => {\r
132                 userProfileService.getUserProfile()\r
133                 .then(profile=> {\r
134                     // $log.info('WidgetCatalogCtrl::getUserProfile: ',\r
135                                         // profile);\r
136                     $scope.orgUserId = profile.orgUserId;\r
137                     $scope.widgetsViewData = [];\r
138                     $scope.widgetsView = [];    \r
139                         getUserWidgets($scope.orgUserId);  \r
140                 });\r
141                 this.conf = conf;\r
142                 $scope.widgetsList = [];\r
143             };\r
144             \r
145             /** Widget code ends */\r
146           \r
147             $scope.activateThis = function(ele){\r
148                                 $compile(ele.contents())($scope);\r
149                                 $scope.$apply();\r
150             };\r
151             $scope.setCommonWidget = function() {\r
152                 /* News Events Resources */\r
153                 var widgetLength = ($scope.widgetsViewData==null || $scope.widgetsViewData.length==0) ? 0:$scope.widgetsViewData.length;\r
154                 $scope.widgetsViewData[widgetLength] = {\r
155                         sizeX: 2,\r
156                         sizeY: 2,\r
157                         headerText: 'News',\r
158                         width: '',\r
159                         height: '',\r
160                         url: '',\r
161                         selected:true\r
162                     };\r
163                 $scope.widgetsViewData[widgetLength+1] = {\r
164                         sizeX: 2,\r
165                         sizeY: 2,\r
166                         headerText: 'Calendar Events',\r
167                         width: '',\r
168                         height: '',\r
169                         url: '',\r
170                         selected:true\r
171                     };\r
172                 $scope.widgetsViewData[widgetLength+2] = {\r
173                         sizeX: 2,\r
174                         sizeY: 2,\r
175                         headerText: 'Resources',\r
176                         width: '',\r
177                         height: '',\r
178                         url: '',\r
179                         selected:true\r
180                     };\r
181                 \r
182                 /* Setting News data */\r
183                         $scope.newsData = [];\r
184                         $scope.updateNews = function() {\r
185                                 $scope.newsData.length=0;\r
186                                 dashboardService.getCommonWidgetData('NEWS').then(function(res) {\r
187                                         // $log.info(res.message);\r
188                                         var newsDataJsonArray = res.response.items;\r
189                                         for (var i = 0; i < newsDataJsonArray.length; i++) {\r
190                                                 $scope.newsData.push(newsDataJsonArray[i]);\r
191                                         }\r
192                                 })['catch'](function(err) {\r
193                                         $log.error('dashboard controller: failed to get news list', err);                                       \r
194                                 });\r
195                         }\r
196                         $scope.updateNews();\r
197                         /* Setting Events data */\r
198 \r
199                         $scope.eventData = [];\r
200                         \r
201                         $scope.updateEvents = function() {\r
202                                 $scope.eventData.length=0;\r
203                                 dashboardService.getCommonWidgetData('EVENTS').then(function(res) {\r
204                                         var eventDataJsonArray = res.response.items;    \r
205                                         for (var i = 0; i < eventDataJsonArray.length; i++) {\r
206                                                 if(eventDataJsonArray[i].eventDate !=null) {\r
207                                                         // yyyy-mm-dd\r
208                                                         eventDataJsonArray[i].year = eventDataJsonArray[i].eventDate.substring(2,4);\r
209                                                         eventDataJsonArray[i].mon  = eventDataJsonArray[i].eventDate.substring(5,7);\r
210                                                         eventDataJsonArray[i].day  = eventDataJsonArray[i].eventDate.substring(8,10);\r
211                                                 }\r
212                                                 $scope.eventData.push(eventDataJsonArray[i]);\r
213                                         }\r
214                                 })['catch'](function(err) {\r
215                                         $log.error('dashboard controller: failed to get Events list', err);     \r
216                                 });\r
217                         }\r
218                         $scope.updateEvents();\r
219                         /* Setting Important Resources data */\r
220 \r
221                         $scope.importResData = [];\r
222                         $scope.updateImportRes = function() {\r
223                                 $scope.importResData.length=0;\r
224                                 dashboardService.getCommonWidgetData('IMPORTANTRESOURCES').then(\r
225                                                 function(res) {\r
226                                                         // $log.info(res);\r
227                                                         var importResDataJSONArray = res.response.items;\r
228                                                         for (var i = 0; i < importResDataJSONArray.length; i++) {\r
229                                                                 $scope.importResData.push(importResDataJSONArray[i]);\r
230                                                         }\r
231                                                 })['catch'](function(err) {\r
232                                         $log.error('dashboard controller: failed to get resources list...', err);\r
233                                 });\r
234                         }\r
235                         $scope.updateImportRes();\r
236                 \r
237                 /** ******End hardcoded news events and resources*************** */\r
238                         \r
239             }\r
240             \r
241                 $scope.newsGridsterItem = {\r
242                                 headerText : 'Test',\r
243                                 subHeaderText : ''\r
244                 };\r
245                 \r
246                 $scope.newsGridsterItem = {\r
247                         headerText : 'News',\r
248                         subHeaderText : ''\r
249                 };\r
250             \r
251             $scope.eventsGridsterItem = {\r
252                 headerText : 'Events',\r
253                         subHeaderText : ''\r
254                 };\r
255 \r
256                 $scope.impoResGridsterItem = {\r
257                         headerText : 'Resources',\r
258                         subHeaderText : ''\r
259                 };\r
260                 \r
261             this.gridsterOpts = {\r
262                 columns: 6,\r
263                 colWidth: 190,\r
264                 rowHeight: 190,\r
265                 margins: [20, 20],\r
266                 outerMargin: true,\r
267                 pushing: true,\r
268                 floating: true,\r
269                 swapping: true,\r
270                 draggable: {\r
271                         handle: '.icon-content-gridguide'\r
272                 }\r
273             };\r
274             \r
275             // Run this function when user clicks on checkbox.\r
276                 $scope.storeSelection = function(widget) {\r
277                         \r
278                         // not needed as only 'SHOW' and 'HIDE' status_cd is expected from the micro service now\r
279                         /*var pendingFlag = false;                      \r
280                         if(widget.access) \r
281                                 pendingFlag = false;\r
282                         else\r
283                                 pendingFlag =  widget.pending;  */      \r
284                         \r
285                         var appData = { \r
286                                         widgetId: widget.widgetid,\r
287                                         select  : widget.select,\r
288                                 //      pending : pendingFlag   \r
289                         };\r
290 \r
291                         widgetsCatalogService.updateWidgetCatalog(appData).then(\r
292                                 function(result) {\r
293                                         // $log.debug('CatalogCtrl:storeSelection result is ', result);\r
294                                 })['catch'](function(err) {\r
295                                         $log.error('CatalogCtrl:storeSelection: exception: ', err);\r
296                                 });\r
297                 };\r
298 \r
299             init();\r
300         }\r
301     }\r
302     \r
303     \r
304     \r
305     WidgetCatalogCtrl.$inject = ['widgetsService', '$log', '$cookies', '$scope', 'conf', 'beReaderService', 'widgetsCatalogService', 'userProfileService','dashboardService','$compile','ngDialog'];\r
306     angular.module('ecompApp').controller('WidgetCatalogCtrl', WidgetCatalogCtrl);\r
307 \r
308     angular.module('ecompApp').constant('refreshInterval', '30000');\r
309 \r
310     angular.module('ecompApp').directive('refreshIframe', ['$interval', 'refreshInterval', function ($interval, refreshInterval) {\r
311 \r
312         function link(scope, element, attrs) {\r
313             var timeoutId;\r
314 \r
315             function updateIframe() {\r
316                 if(attrs.isEnlarged == "false")\r
317                 {\r
318                     element.attr('src', element.attr('src'));\r
319                 }\r
320             }\r
321 \r
322             element.on('$destroy', function () {\r
323                 $interval.cancel(timeoutId);\r
324             });\r
325 \r
326             // start the UI update process; save the timeoutId for cancelling\r
327             /*\r
328                          * timeoutId = $interval(function () { updateIframe(); // update DOM },\r
329                          * refreshInterval);\r
330                          */\r
331         }\r
332 \r
333         return {\r
334             link: link\r
335         };\r
336     } ]);\r
337 \r
338 })();\r
339 \r
340 \r
341 app.directive('dynAttr', function() {\r
342     return {\r
343         scope: { list: '=dynAttr' },\r
344         link: function(scope, elem, attrs){\r
345             for(var attr in scope.list){\r
346                 elem.attr(scope.list[attr].attr, scope.list[attr].value);   \r
347             }\r
348         }\r
349     };\r
350 });      \r