@schneideress/dashboardframework 0.0.79 → 0.0.80

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/README.md +24 -24
  2. package/bundles/schneideress-dashboardframework.umd.js +7061 -7033
  3. package/bundles/schneideress-dashboardframework.umd.js.map +1 -1
  4. package/bundles/schneideress-dashboardframework.umd.min.js +1 -1
  5. package/bundles/schneideress-dashboardframework.umd.min.js.map +1 -1
  6. package/esm2015/gridster/index.js +19 -18
  7. package/esm2015/gridster/lib/gridster.component.js +701 -700
  8. package/esm2015/gridster/lib/gridster.interface.js +85 -84
  9. package/esm2015/gridster/lib/gridster.module.js +28 -27
  10. package/esm2015/gridster/lib/gridsterCompact.service.js +224 -223
  11. package/esm2015/gridster/lib/gridsterConfig.constant.js +180 -179
  12. package/esm2015/gridster/lib/gridsterConfig.interface.js +220 -219
  13. package/esm2015/gridster/lib/gridsterConfigS.interface.js +162 -161
  14. package/esm2015/gridster/lib/gridsterDraggable.service.js +511 -510
  15. package/esm2015/gridster/lib/gridsterEmptyCell.service.js +318 -317
  16. package/esm2015/gridster/lib/gridsterItem.component.js +214 -213
  17. package/esm2015/gridster/lib/gridsterItem.interface.js +47 -46
  18. package/esm2015/gridster/lib/gridsterItemComponent.interface.js +49 -48
  19. package/esm2015/gridster/lib/gridsterPreview.component.js +67 -66
  20. package/esm2015/gridster/lib/gridsterPush.service.js +468 -467
  21. package/esm2015/gridster/lib/gridsterPushResize.service.js +359 -358
  22. package/esm2015/gridster/lib/gridsterRenderer.service.js +278 -277
  23. package/esm2015/gridster/lib/gridsterResizable.service.js +553 -552
  24. package/esm2015/gridster/lib/gridsterResizeEventType.interface.js +20 -19
  25. package/esm2015/gridster/lib/gridsterScroll.service.js +196 -195
  26. package/esm2015/gridster/lib/gridsterSwap.service.js +135 -134
  27. package/esm2015/gridster/lib/gridsterUtils.service.js +138 -137
  28. package/esm2015/lib/custom.notifier.options.js +47 -46
  29. package/esm2015/lib/ra-dashboard-area/ra.dashboard.area.js +497 -496
  30. package/esm2015/lib/ra-widget-container/ra.widget.container.component.js +472 -471
  31. package/esm2015/lib/ra.base.dashboard.filter.js +76 -75
  32. package/esm2015/lib/ra.base.dashboard.template.js +72 -71
  33. package/esm2015/lib/ra.dashbard.event.bus.js +86 -85
  34. package/esm2015/lib/ra.dashboard.module.js +52 -51
  35. package/esm2015/lib/ra.dashboard.service.js +145 -144
  36. package/esm2015/lib/ra.event.enum.js +52 -51
  37. package/esm2015/lib/ra.gridster.config.js +68 -67
  38. package/esm2015/public-api.js +17 -16
  39. package/esm2015/schneideress-dashboardframework.js +15 -14
  40. package/esm5/gridster/index.js +19 -18
  41. package/esm5/gridster/lib/gridster.component.js +804 -803
  42. package/esm5/gridster/lib/gridster.interface.js +95 -94
  43. package/esm5/gridster/lib/gridster.module.js +32 -31
  44. package/esm5/gridster/lib/gridsterCompact.service.js +254 -253
  45. package/esm5/gridster/lib/gridsterConfig.constant.js +180 -179
  46. package/esm5/gridster/lib/gridsterConfig.interface.js +220 -219
  47. package/esm5/gridster/lib/gridsterConfigS.interface.js +162 -161
  48. package/esm5/gridster/lib/gridsterDraggable.service.js +550 -549
  49. package/esm5/gridster/lib/gridsterEmptyCell.service.js +359 -358
  50. package/esm5/gridster/lib/gridsterItem.component.js +239 -238
  51. package/esm5/gridster/lib/gridsterItem.interface.js +47 -46
  52. package/esm5/gridster/lib/gridsterItemComponent.interface.js +59 -58
  53. package/esm5/gridster/lib/gridsterPreview.component.js +71 -70
  54. package/esm5/gridster/lib/gridsterPush.service.js +548 -547
  55. package/esm5/gridster/lib/gridsterPushResize.service.js +424 -423
  56. package/esm5/gridster/lib/gridsterRenderer.service.js +324 -323
  57. package/esm5/gridster/lib/gridsterResizable.service.js +630 -629
  58. package/esm5/gridster/lib/gridsterResizeEventType.interface.js +20 -19
  59. package/esm5/gridster/lib/gridsterScroll.service.js +196 -195
  60. package/esm5/gridster/lib/gridsterSwap.service.js +153 -152
  61. package/esm5/gridster/lib/gridsterUtils.service.js +178 -177
  62. package/esm5/lib/custom.notifier.options.js +47 -46
  63. package/esm5/lib/ra-dashboard-area/ra.dashboard.area.js +589 -588
  64. package/esm5/lib/ra-widget-container/ra.widget.container.component.js +585 -584
  65. package/esm5/lib/ra.base.dashboard.filter.js +82 -81
  66. package/esm5/lib/ra.base.dashboard.template.js +75 -74
  67. package/esm5/lib/ra.dashbard.event.bus.js +126 -125
  68. package/esm5/lib/ra.dashboard.module.js +56 -55
  69. package/esm5/lib/ra.dashboard.service.js +222 -221
  70. package/esm5/lib/ra.event.enum.js +52 -51
  71. package/esm5/lib/ra.gridster.config.js +68 -67
  72. package/esm5/public-api.js +17 -16
  73. package/esm5/schneideress-dashboardframework.js +15 -14
  74. package/fesm2015/schneideress-dashboardframework.js +6147 -6117
  75. package/fesm2015/schneideress-dashboardframework.js.map +1 -1
  76. package/fesm5/schneideress-dashboardframework.js +7044 -7014
  77. package/fesm5/schneideress-dashboardframework.js.map +1 -1
  78. package/gridster/index.d.ts +11 -11
  79. package/gridster/lib/gridster.component.d.ts +67 -67
  80. package/gridster/lib/gridster.interface.d.ts +46 -46
  81. package/gridster/lib/gridster.module.d.ts +2 -2
  82. package/gridster/lib/gridsterCompact.service.d.ts +15 -15
  83. package/gridster/lib/gridsterConfig.constant.d.ts +2 -2
  84. package/gridster/lib/gridsterConfig.interface.d.ts +133 -133
  85. package/gridster/lib/gridsterConfigS.interface.d.ts +93 -93
  86. package/gridster/lib/gridsterDraggable.service.d.ts +59 -59
  87. package/gridster/lib/gridsterEmptyCell.service.d.ts +29 -29
  88. package/gridster/lib/gridsterItem.component.d.ts +32 -32
  89. package/gridster/lib/gridsterItem.interface.d.ts +21 -21
  90. package/gridster/lib/gridsterItemComponent.interface.d.ts +25 -25
  91. package/gridster/lib/gridsterPreview.component.d.ts +10 -10
  92. package/gridster/lib/gridsterPush.service.d.ts +33 -33
  93. package/gridster/lib/gridsterPushResize.service.d.ts +26 -26
  94. package/gridster/lib/gridsterRenderer.service.d.ts +38 -38
  95. package/gridster/lib/gridsterResizable.service.d.ts +67 -67
  96. package/gridster/lib/gridsterResizeEventType.interface.d.ts +6 -6
  97. package/gridster/lib/gridsterScroll.service.d.ts +4 -4
  98. package/gridster/lib/gridsterSwap.service.d.ts +13 -13
  99. package/gridster/lib/gridsterUtils.service.d.ts +16 -16
  100. package/lib/custom.notifier.options.d.ts +2 -2
  101. package/lib/ra-dashboard-area/ra.dashboard.area.d.ts +64 -64
  102. package/lib/ra-widget-container/ra.widget.container.component.d.ts +64 -64
  103. package/lib/ra.base.dashboard.filter.d.ts +10 -10
  104. package/lib/ra.base.dashboard.template.d.ts +15 -15
  105. package/lib/ra.dashbard.event.bus.d.ts +20 -20
  106. package/lib/ra.dashboard.module.d.ts +2 -2
  107. package/lib/ra.dashboard.service.d.ts +22 -22
  108. package/lib/ra.event.enum.d.ts +42 -42
  109. package/lib/ra.gridster.config.d.ts +2 -2
  110. package/package.json +1 -1
  111. package/public-api.d.ts +8 -8
  112. package/schneideress-dashboardframework.d.ts +9 -9
  113. package/schneideress-dashboardframework.metadata.json +1 -1
@@ -1,588 +1,589 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
- */
5
- import { Input, Component, NgZone } from '@angular/core';
6
- import { RaDashboardService } from '../ra.dashboard.service';
7
- import { RADashboardEventBus } from '../ra.dashbard.event.bus';
8
- import { RAEvent } from '../ra.event.enum';
9
- import { GridsterConfigDefaultSettings } from '../ra.gridster.config';
10
- import { NgxUiLoaderService } from 'ngx-ui-loader';
11
- import { NotifierService } from 'angular-notifier';
12
- import { RATranslateService } from '@schneideress/ra-common';
13
- var RADashboardArea = /** @class */ (function () {
14
- function RADashboardArea(dashboardService, ngZone, ngxService, translateService, notifier) {
15
- this.dashboardService = dashboardService;
16
- this.ngZone = ngZone;
17
- this.ngxService = ngxService;
18
- this.translateService = translateService;
19
- this.notifier = notifier;
20
- this.widgetList = Array();
21
- this.gridheight = 300;
22
- this.isWidgetLoaded = false;
23
- this.widgetHeight = 3;
24
- this.widgetWidth = 5;
25
- }
26
- /**
27
- * @return {?}
28
- */
29
- RADashboardArea.prototype.ngOnInit = /**
30
- * @return {?}
31
- */
32
- function () {
33
- this.initiateGridsterConfig();
34
- };
35
- /**
36
- * @param {?} changes
37
- * @return {?}
38
- */
39
- RADashboardArea.prototype.ngOnChanges = /**
40
- * @param {?} changes
41
- * @return {?}
42
- */
43
- function (changes) {
44
- if (this.raDashboardEventBus && this.appConfig && !this.isWidgetLoaded) {
45
- this.isWidgetLoaded = true;
46
- this.loadWidgets(this.userDashboardId, this.areaKey);
47
- }
48
- if (changes.raDashboardEventBus && changes.raDashboardEventBus.currentValue != changes.raDashboardEventBus.previousValue) {
49
- this.inititateEventBusSubscritions();
50
- }
51
- };
52
- /**To set GridsterConfig */
53
- /**
54
- * To set GridsterConfig
55
- * @return {?}
56
- */
57
- RADashboardArea.prototype.initiateGridsterConfig = /**
58
- * To set GridsterConfig
59
- * @return {?}
60
- */
61
- function () {
62
- /** @type {?} */
63
- var areaContext = this;
64
- /**To override default configuration values to the gridster control */
65
- this.options = GridsterConfigDefaultSettings;
66
- this.options.itemChangeCallback = (/**
67
- * @param {?} item
68
- * @return {?}
69
- */
70
- function (item) {
71
- areaContext.setAreaHeight();
72
- areaContext.updateWidgets();
73
- });
74
- };
75
- /** To initiate eventbus subsctiptions */
76
- /**
77
- * To initiate eventbus subsctiptions
78
- * @return {?}
79
- */
80
- RADashboardArea.prototype.inititateEventBusSubscritions = /**
81
- * To initiate eventbus subsctiptions
82
- * @return {?}
83
- */
84
- function () {
85
- var _this = this;
86
- this.widgetDeleteEvent = this.raDashboardEventBus.subscribe(RAEvent.WidgetDelete).subscribe((/**
87
- * @param {?} instanceId
88
- * @return {?}
89
- */
90
- function (instanceId) {
91
- _this.ngZone.run((/**
92
- * @return {?}
93
- */
94
- function () {
95
- _this.deleteWidget(instanceId, true);
96
- }));
97
- }));
98
- this.widgetAddEvent = this.raDashboardEventBus.subscribe(RAEvent.AddWidget).subscribe((/**
99
- * @param {?} widgetInfo
100
- * @return {?}
101
- */
102
- function (widgetInfo) {
103
- _this.ngZone.run((/**
104
- * @return {?}
105
- */
106
- function () {
107
- _this.copyWidget(widgetInfo);
108
- }));
109
- }));
110
- this.conifgAddClick = this.raDashboardEventBus.subscribe(RAEvent.ConfigAddClick).subscribe((/**
111
- * @param {?} e
112
- * @return {?}
113
- */
114
- function (e) {
115
- _this.ngZone.run((/**
116
- * @return {?}
117
- */
118
- function () {
119
- _this.addWidget(e);
120
- }));
121
- }));
122
- this.widgetLibraryDoneClick = this.raDashboardEventBus.subscribe(RAEvent.widgetLibraryDoneClick).subscribe((/**
123
- * @param {?} widgetList
124
- * @return {?}
125
- */
126
- function (widgetList) {
127
- _this.ngZone.run((/**
128
- * @return {?}
129
- */
130
- function () {
131
- if (widgetList) {
132
- // widgetList.forEach(widgetInfo => {
133
- // this.addWidget(widgetInfo);
134
- // });
135
- _this.addWidgetListToGridster(widgetList, 0);
136
- }
137
- }));
138
- }));
139
- };
140
- /**
141
- * temp fix- recursive method to iterate over the list of items
142
- * and add them to gridster in the given order
143
- * @param widgetList -list of widgets
144
- * @param index -index of the current value to be added
145
- */
146
- /**
147
- * temp fix- recursive method to iterate over the list of items
148
- * and add them to gridster in the given order
149
- * @param {?} widgetList -list of widgets
150
- * @param {?} index -index of the current value to be added
151
- * @return {?}
152
- */
153
- RADashboardArea.prototype.addWidgetListToGridster = /**
154
- * temp fix- recursive method to iterate over the list of items
155
- * and add them to gridster in the given order
156
- * @param {?} widgetList -list of widgets
157
- * @param {?} index -index of the current value to be added
158
- * @return {?}
159
- */
160
- function (widgetList, index) {
161
- /** @type {?} */
162
- var areaContext = this;
163
- /** @type {?} */
164
- var indexVal = index + 1;
165
- if (index > widgetList.length - 1)
166
- return;
167
- else {
168
- if (index == 0) {
169
- areaContext.addWidget(widgetList[index]);
170
- areaContext.addWidgetListToGridster(widgetList, indexVal);
171
- }
172
- else {
173
- setTimeout((/**
174
- * @return {?}
175
- */
176
- function () {
177
- areaContext.addWidget(widgetList[index]);
178
- areaContext.addWidgetListToGridster(widgetList, indexVal);
179
- }), 1000);
180
- }
181
- }
182
- };
183
- /**
184
- * @return {?}
185
- */
186
- RADashboardArea.prototype.ngOnDestroy = /**
187
- * @return {?}
188
- */
189
- function () {
190
- if (this.conifgAddClick)
191
- this.conifgAddClick.unsubscribe();
192
- if (this.widgetAddEvent)
193
- this.widgetAddEvent.unsubscribe();
194
- if (this.widgetDeleteEvent)
195
- this.widgetDeleteEvent.unsubscribe();
196
- if (this.widgetLibraryDoneClick)
197
- this.widgetLibraryDoneClick.unsubscribe();
198
- };
199
- /**To update position/dimention of all widgets in the area */
200
- /**
201
- * To update position/dimention of all widgets in the area
202
- * @return {?}
203
- */
204
- RADashboardArea.prototype.updateWidgets = /**
205
- * To update position/dimention of all widgets in the area
206
- * @return {?}
207
- */
208
- function () {
209
- this.dashboardService.updateWidgets(this.mapGridsterListToObject(this.widgetList), this.appConfig).subscribe((/**
210
- * @param {?} widgets
211
- * @return {?}
212
- */
213
- function (widgets) {
214
- }));
215
- return true;
216
- };
217
- /** To retrieve widgets based on userDashboardid and area name */
218
- /**
219
- * To retrieve widgets based on userDashboardid and area name
220
- * @param {?} userDashboarId
221
- * @param {?} areaKey
222
- * @return {?}
223
- */
224
- RADashboardArea.prototype.loadWidgets = /**
225
- * To retrieve widgets based on userDashboardid and area name
226
- * @param {?} userDashboarId
227
- * @param {?} areaKey
228
- * @return {?}
229
- */
230
- function (userDashboarId, areaKey) {
231
- var _this = this;
232
- /** @type {?} */
233
- var areaContext = this;
234
- /** @type {?} */
235
- var widgetInfo = (/** @type {?} */ ({
236
- dashboardId: userDashboarId.toString(),
237
- dashboardAreaKey: areaKey
238
- }));
239
- areaContext.widgetList = [];
240
- this.dashboardService.getWidgetsByDashboardArea(widgetInfo, this.appConfig).subscribe((/**
241
- * @param {?} widgets
242
- * @return {?}
243
- */
244
- function (widgets) {
245
- if (widgets && widgets.length > 0) {
246
- areaContext.widgetList = _this.mapObjectListToGridsterItemList(widgets);
247
- areaContext.setAreaHeight();
248
- }
249
- }));
250
- };
251
- /** To set Area(Gridster) height dynamically as widgets are added/removed */
252
- /**
253
- * To set Area(Gridster) height dynamically as widgets are added/removed
254
- * @return {?}
255
- */
256
- RADashboardArea.prototype.setAreaHeight = /**
257
- * To set Area(Gridster) height dynamically as widgets are added/removed
258
- * @return {?}
259
- */
260
- function () {
261
- var _this = this;
262
- /** @type {?} */
263
- var areaScrollHeight = 0;
264
- /** @type {?} */
265
- var areaHeight = 0;
266
- /** @type {?} */
267
- var curRowHeight = 0;
268
- if (this.options.api) {
269
- curRowHeight = this.options.api.getCurrentRowHeight();
270
- }
271
- this.widgetList.forEach((/**
272
- * @param {?} t
273
- * @return {?}
274
- */
275
- function (t) {
276
- /** @type {?} */
277
- var currentHeight = t.y + t.rows;
278
- if (currentHeight > areaScrollHeight) {
279
- areaScrollHeight = currentHeight;
280
- }
281
- if (curRowHeight == 0) {
282
- currentHeight = _this.widgetList[0].curRowHeight;
283
- }
284
- t.widgetInfo.rowHeight = curRowHeight;
285
- }));
286
- if (this.options.api) {
287
- areaHeight = areaScrollHeight * this.options.api.getCurrentRowHeight() + 100;
288
- }
289
- if (areaHeight < 600) {
290
- areaHeight = 600;
291
- }
292
- console.log('grid height value is');
293
- console.log(areaHeight);
294
- this.gridheight = areaHeight;
295
- };
296
- /** To remove a widget instance from dashboard and to save info in database */
297
- /**
298
- * To remove a widget instance from dashboard and to save info in database
299
- * @param {?} widgetInstanceId
300
- * @param {?=} isalertDisabled
301
- * @return {?}
302
- */
303
- RADashboardArea.prototype.deleteWidget = /**
304
- * To remove a widget instance from dashboard and to save info in database
305
- * @param {?} widgetInstanceId
306
- * @param {?=} isalertDisabled
307
- * @return {?}
308
- */
309
- function (widgetInstanceId, isalertDisabled) {
310
- if (isalertDisabled === void 0) { isalertDisabled = false; }
311
- /** @type {?} */
312
- var widget = this.widgetList.filter((/**
313
- * @param {?} item
314
- * @return {?}
315
- */
316
- function (item) {
317
- return item.widgetInfo.widgetInstanceId === widgetInstanceId;
318
- }));
319
- if (widget.length > 0) {
320
- this.widgetList.splice(this.widgetList.indexOf(widget[0]), 1);
321
- this.setAreaHeight();
322
- if (!isalertDisabled) {
323
- this.notifier.notify('success', " " + this.translateService.translate('Widget') + " " + widget[0].widgetInfo.widgetTitle + " " + this.translateService.translate('DeletedSuccesfully') + " ");
324
- }
325
- this.options.compactType = 'compactLeft&Up';
326
- this.options.api.optionsChanged();
327
- this.options.compactType = 'none';
328
- this.options.api.optionsChanged();
329
- }
330
- };
331
- /**To add widget instance to the database with the next available position and to make changes in
332
- * dashboard area.
333
- */
334
- /**
335
- * To add widget instance to the database with the next available position and to make changes in
336
- * dashboard area.
337
- * @param {?} data
338
- * @return {?}
339
- */
340
- RADashboardArea.prototype.addWidget = /**
341
- * To add widget instance to the database with the next available position and to make changes in
342
- * dashboard area.
343
- * @param {?} data
344
- * @return {?}
345
- */
346
- function (data) {
347
- var _this = this;
348
- /** @type {?} */
349
- var widgetid = data.widgetId;
350
- data.height = this.widgetHeight;
351
- data.width = this.widgetWidth;
352
- data.position_x = 0;
353
- data.position_y = 0;
354
- /** @type {?} */
355
- var gridsterItem = this.mapObjectsToGridsterItem(data);
356
- /** to find the available position in gridster, temp commenting the code-returning higher y value than normal */
357
- // if (this.options.api) {
358
- // gridsterItem = this.options.api.getFirstPossiblePosition(gridsterItem);
359
- // }
360
- // data.position_x = gridsterItem.x;
361
- // data.position_y = gridsterItem.y;
362
- data.dashboardAreaKey = this.areaKey;
363
- data.dashboardId = this.userDashboardId;
364
- this.ngxService.start();
365
- this.dashboardService.addWidget(data, this.appConfig).subscribe((/**
366
- * @param {?} widget
367
- * @return {?}
368
- */
369
- function (widget) {
370
- gridsterItem = _this.mapObjectsToGridsterItem(widget);
371
- _this.widgetList.push(gridsterItem);
372
- _this.setAreaHeight();
373
- /**To save added widget position in db */
374
- setTimeout((/**
375
- * @return {?}
376
- */
377
- function () {
378
- _this.updateWidgets();
379
- }), 1000);
380
- _this.raDashboardEventBus.publish(RAEvent.WidgetAdded, widget);
381
- }));
382
- };
383
- /** To add widget to current widget list ,invoked from copy widget window*/
384
- /**
385
- * To add widget to current widget list ,invoked from copy widget window
386
- * @param {?} data
387
- * @return {?}
388
- */
389
- RADashboardArea.prototype.copyWidget = /**
390
- * To add widget to current widget list ,invoked from copy widget window
391
- * @param {?} data
392
- * @return {?}
393
- */
394
- function (data) {
395
- /** @type {?} */
396
- var gridsterItem = this.mapObjectsToGridsterItem(data);
397
- if (this.options.api) {
398
- gridsterItem = this.options.api.getFirstPossiblePosition(gridsterItem);
399
- }
400
- data.position_x = gridsterItem.x;
401
- data.position_y = gridsterItem.y;
402
- gridsterItem = this.mapObjectsToGridsterItem(data);
403
- this.widgetList.push(gridsterItem);
404
- this.setAreaHeight();
405
- };
406
- /**To map IwidgetInfo object to gridsterItem */
407
- /**
408
- * To map IwidgetInfo object to gridsterItem
409
- * @param {?} widget
410
- * @return {?}
411
- */
412
- RADashboardArea.prototype.mapObjectsToGridsterItem = /**
413
- * To map IwidgetInfo object to gridsterItem
414
- * @param {?} widget
415
- * @return {?}
416
- */
417
- function (widget) {
418
- /** @type {?} */
419
- var gridsterItem = (/** @type {?} */ ({
420
- cols: widget.width,
421
- rows: widget.height,
422
- x: widget.position_x,
423
- y: widget.position_y,
424
- widgetInfo: widget
425
- }));
426
- return gridsterItem;
427
- };
428
- /**
429
- * @param {?} widgetList
430
- * @return {?}
431
- */
432
- RADashboardArea.prototype.mapObjectListToGridsterItemList = /**
433
- * @param {?} widgetList
434
- * @return {?}
435
- */
436
- function (widgetList) {
437
- var _this = this;
438
- /** @type {?} */
439
- var widgetArray = Array();
440
- widgetList.forEach((/**
441
- * @param {?} widget
442
- * @return {?}
443
- */
444
- function (widget) {
445
- widgetArray.push(_this.mapObjectsToGridsterItem(widget));
446
- }));
447
- return widgetArray;
448
- };
449
- /**
450
- * @param {?} widgetItem
451
- * @return {?}
452
- */
453
- RADashboardArea.prototype.mapGridsterItemToObject = /**
454
- * @param {?} widgetItem
455
- * @return {?}
456
- */
457
- function (widgetItem) {
458
- /** @type {?} */
459
- var widget;
460
- widget = widgetItem.widgetInfo;
461
- widget.height = widgetItem.rows;
462
- widget.width = widgetItem.cols;
463
- widget.position_x = widgetItem.x;
464
- widget.position_y = widgetItem.y;
465
- widget.rowHeight = widgetItem.curRowHeight;
466
- return widget;
467
- };
468
- /**
469
- * @param {?} widgetItemList
470
- * @return {?}
471
- */
472
- RADashboardArea.prototype.mapGridsterListToObject = /**
473
- * @param {?} widgetItemList
474
- * @return {?}
475
- */
476
- function (widgetItemList) {
477
- var _this = this;
478
- /** @type {?} */
479
- var widgetListArray = Array();
480
- widgetItemList.forEach((/**
481
- * @param {?} widget
482
- * @return {?}
483
- */
484
- function (widget) {
485
- widgetListArray.push(_this.mapGridsterItemToObject(widget));
486
- }));
487
- return widgetListArray;
488
- };
489
- RADashboardArea.decorators = [
490
- { type: Component, args: [{
491
- selector: 'ra-dashboard-area',
492
- template: "<div #gridWrapper class=\"wrap gridster\" [style.height.px]=\"gridheight\" >\n<!-- <div #gridWrapper class=\"wrap gridster\"> -->\n <gridster [options]=\"options\" style=\"height:100%;\">\n <gridster-item [item]=\"item\" *ngFor=\"let item of widgetList\">\n <ra-widget-container [app-config]=\"appConfig\" [event-bus]=\"raDashboardEventBus\" (widgetDeleted)=\"deleteWidget($event)\" [data]=\"item\"\n [global-filter]=\"globalFilter\" [widget-width]=\"item.cols\" [widget-height]=\"item.rows\" [widget-instance-id]=\"item.widgetInstanceId\"></ra-widget-container>\n </gridster-item>\n </gridster>\n <notifier-container></notifier-container>\n</div>\n\n",
493
- styles: ["gridster{width:inherit;resize:height;display:-webkit-box;display:flex;background-color:#ededed;overflow-y:hidden!important}.dvheader{width:100%;height:35px;background:#000;color:#fff;padding:7px 3px 5px 6px;text-transform:uppercase}gridster-item{box-sizing:border-box;z-index:1;position:absolute;overflow:hidden;-webkit-transition:.3s;transition:.3s;display:none;background:#fff;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text;box-shadow:0 1px 10px rgba(0,0,0,.05)}gridster-item:hover{box-shadow:0 1px 10px rgba(0,0,0,.15)}"]
494
- }] }
495
- ];
496
- /** @nocollapse */
497
- RADashboardArea.ctorParameters = function () { return [
498
- { type: RaDashboardService },
499
- { type: NgZone },
500
- { type: NgxUiLoaderService },
501
- { type: RATranslateService },
502
- { type: NotifierService }
503
- ]; };
504
- RADashboardArea.propDecorators = {
505
- userDashboardId: [{ type: Input, args: ['user-dashboard-id',] }],
506
- areaKey: [{ type: Input, args: ['area-key',] }],
507
- globalFilter: [{ type: Input, args: ['global-filter',] }],
508
- raDashboardEventBus: [{ type: Input, args: ['event-bus',] }],
509
- widgetHeight: [{ type: Input, args: ['widget-height',] }],
510
- widgetWidth: [{ type: Input, args: ['widget-width',] }],
511
- appConfig: [{ type: Input, args: ['app-config',] }]
512
- };
513
- return RADashboardArea;
514
- }());
515
- export { RADashboardArea };
516
- if (false) {
517
- /** @type {?} */
518
- RADashboardArea.prototype.widgetList;
519
- /** @type {?} */
520
- RADashboardArea.prototype.options;
521
- /** @type {?} */
522
- RADashboardArea.prototype.gridheight;
523
- /**
524
- * @type {?}
525
- * @private
526
- */
527
- RADashboardArea.prototype.conifgAddClick;
528
- /**
529
- * @type {?}
530
- * @private
531
- */
532
- RADashboardArea.prototype.widgetDeleteEvent;
533
- /**
534
- * @type {?}
535
- * @private
536
- */
537
- RADashboardArea.prototype.widgetAddEvent;
538
- /**
539
- * @type {?}
540
- * @private
541
- */
542
- RADashboardArea.prototype.widgetLibraryDoneClick;
543
- /**
544
- * @type {?}
545
- * @private
546
- */
547
- RADashboardArea.prototype.isWidgetLoaded;
548
- /** @type {?} */
549
- RADashboardArea.prototype.userDashboardId;
550
- /** @type {?} */
551
- RADashboardArea.prototype.areaKey;
552
- /** @type {?} */
553
- RADashboardArea.prototype.globalFilter;
554
- /** @type {?} */
555
- RADashboardArea.prototype.raDashboardEventBus;
556
- /** @type {?} */
557
- RADashboardArea.prototype.widgetHeight;
558
- /** @type {?} */
559
- RADashboardArea.prototype.widgetWidth;
560
- /** @type {?} */
561
- RADashboardArea.prototype.appConfig;
562
- /**
563
- * @type {?}
564
- * @private
565
- */
566
- RADashboardArea.prototype.dashboardService;
567
- /**
568
- * @type {?}
569
- * @private
570
- */
571
- RADashboardArea.prototype.ngZone;
572
- /**
573
- * @type {?}
574
- * @private
575
- */
576
- RADashboardArea.prototype.ngxService;
577
- /**
578
- * @type {?}
579
- * @private
580
- */
581
- RADashboardArea.prototype.translateService;
582
- /**
583
- * @type {?}
584
- * @private
585
- */
586
- RADashboardArea.prototype.notifier;
587
- }
588
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmEuZGFzaGJvYXJkLmFyZWEuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2NobmVpZGVyZXNzL2Rhc2hib2FyZGZyYW1ld29yay8iLCJzb3VyY2VzIjpbImxpYi9yYS1kYXNoYm9hcmQtYXJlYS9yYS5kYXNoYm9hcmQuYXJlYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLEtBQUssRUFBVSxTQUFTLEVBQTRCLE1BQU0sRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUd0RyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0MsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFdEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUc3RDtJQTBCRSx5QkFBb0IsZ0JBQW9DLEVBQzlDLE1BQWMsRUFDZCxVQUE4QixFQUM5QixnQkFBb0MsRUFDcEMsUUFBeUI7UUFKZixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQW9CO1FBQzlDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxlQUFVLEdBQVYsVUFBVSxDQUFvQjtRQUM5QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQW9CO1FBQ3BDLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBdEI1QixlQUFVLEdBQUcsS0FBSyxFQUFnQixDQUFDO1FBRW5DLGVBQVUsR0FBVyxHQUFHLENBQUM7UUFNeEIsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFNaEIsaUJBQVksR0FBVyxDQUFDLENBQUM7UUFDMUIsZ0JBQVcsR0FBVyxDQUFD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QUUvQiwyQ0FBNEM7Ozs7O0lBQ3RELGlDQUFzQjs7Ozs7SUFDdEIscUNBQXNDOzs7OztJQUN0QywyQ0FBNEM7Ozs7O0lBQzVDLG1DQUFpQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElucHV0LCBPbkluaXQsIENvbXBvbmVudCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBOZ1pvbmUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBHcmlkc3RlckNvbmZpZywgR3JpZHN0ZXJJdGVtIH0gZnJvbSAnLi4vLi4vZ3JpZHN0ZXIvaW5kZXgnO1xuaW1wb3J0IHsgUmFEYXNoYm9hcmRTZXJ2aWNlIH0gZnJvbSAnLi4vcmEuZGFzaGJvYXJkLnNlcnZpY2UnO1xuaW1wb3J0IHsgUkFEYXNoYm9hcmRFdmVudEJ1cyB9IGZyb20gJy4uL3JhLmRhc2hiYXJkLmV2ZW50LmJ1cyc7XG5pbXBvcnQgeyBSQUV2ZW50IH0gZnJvbSAnLi4vcmEuZXZlbnQuZW51bSc7XG5pbXBvcnQgeyBHcmlkc3RlckNvbmZpZ0RlZmF1bHRTZXR0aW5ncyB9IGZyb20gJy4uL3JhLmdyaWRzdGVyLmNvbmZpZyc7XG5pbXBvcnQgeyBJV2lkZ2V0SW5mbywgSUFwcENvbmZpZyB9IGZyb20gJ0BzY2huZWlkZXJlc3Mvd2lkZ2V0ZnJhbWV3b3JrJztcbmltcG9ydCB7IE5neFVpTG9hZGVyU2VydmljZSB9IGZyb20gJ25neC11aS1sb2FkZXInO1xuaW1wb3J0IHsgTm90aWZpZXJTZXJ2aWNlIH0gZnJvbSAnYW5ndWxhci1ub3RpZmllcic7XG5pbXBvcnQgeyBSQVRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAc2NobmVpZGVyZXNzL3JhLWNvbW1vbic7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncmEtZGFzaGJvYXJkLWFyZWEnLFxuICB0ZW1wbGF0ZVVybDogJy4vcmEuZGFzaGJvYXJkLmFyZWEuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3JhLmRhc2hib2FyZC5hcmVhLmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIFJBRGFzaGJvYXJkQXJlYSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuXG5cbiAgcHVibGljIHdpZGdldExpc3QgPSBBcnJheTxHcmlkc3Rlckl0ZW0+KCk7XG4gIHB1YmxpYyBvcHRpb25zOiBHcmlkc3RlckNvbmZpZztcbiAgcHVibGljIGdyaWRoZWlnaHQ6IG51bWJlciA9IDMwMDtcblxuICBwcml2YXRlIGNvbmlmZ0FkZENsaWNrOiBhbnk7XG4gIHByaXZhdGUgd2lkZ2V0RGVsZXRlRXZlbnQ6IGFueTtcbiAgcHJpdmF0ZSB3aWRnZXRBZGRFdmVudDogYW55O1xuICBwcml2YXRlIHdpZGdldExpYnJhcnlEb25lQ2xpY2s6IGFueTtcbiAgcHJpdmF0ZSBpc1dpZGdldExvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgndXNlci1kYXNoYm9hcmQtaWQnKSB1c2VyRGFzaGJvYXJkSWQ6IG51bWJlcjtcbiAgQElucHV0KCdhcmVhLWtleScpIGFyZWFLZXk6IHN0cmluZztcbiAgQElucHV0KCdnbG9iYWwtZmlsdGVyJykgZ2xvYmFsRmlsdGVyOiBhbnk7XG4gIEBJbnB1dCgnZXZlbnQtYnVzJykgcmFEYXNoYm9hcmRFdmVudEJ1czogUkFEYXNoYm9hcmRFdmVudEJ1cztcbiAgQElucHV0KCd3aWRnZXQtaGVpZ2h0Jykgd2lkZ2V0SGVpZ2h0OiBudW1iZXIgPSAzO1xuICBASW5wdXQoJ3dpZGdldC13aWR0aCcpIHdpZGdldFdpZHRoOiBudW1iZXIgPSA1O1xuICBASW5wdXQoJ2FwcC1jb25maWcnKSBhcHBDb25maWc6IElBcHBDb25maWc7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkYXNoYm9hcmRTZXJ2aWNlOiBSYURhc2hib2FyZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICBwcml2YXRlIG5neFNlcnZpY2U6IE5neFVpTG9hZGVyU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFJBVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIG5vdGlmaWVyOiBOb3RpZmllclNlcnZpY2UpIHtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaW5pdGlhdGVHcmlkc3RlckNvbmZpZygpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuXG4gICAgaWYgKHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cyAmJiB0aGlzLmFwcENvbmZpZyAmJiAhdGhpcy5pc1dpZGdldExvYWRlZCkge1xuICAgICAgdGhpcy5pc1dpZGdldExvYWRlZCA9IHRydWU7XG4gICAgICB0aGlzLmxvYWRXaWRnZXRzKHRoaXMudXNlckRhc2hib2FyZElkLCB0aGlzLmFyZWFLZXkpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzLnJhRGFzaGJvYXJkRXZlbnRCdXMgJiYgY2hhbmdlcy5yYURhc2hib2FyZEV2ZW50QnVzLmN1cnJlbnRWYWx1ZSAhPSBjaGFuZ2VzLnJhRGFzaGJvYXJkRXZlbnRCdXMucHJldmlvdXNWYWx1ZSkge1xuICAgICAgdGhpcy5pbml0aXRhdGVFdmVudEJ1c1N1YnNjcml0aW9ucygpO1xuICAgIH1cbiAgfVxuXG5cbiAgLyoqVG8gc2V0IEdyaWRzdGVyQ29uZmlnICovXG4gIHB1YmxpYyBpbml0aWF0ZUdyaWRzdGVyQ29uZmlnKCkge1xuICAgIGxldCBhcmVhQ29udGV4dCA9IHRoaXM7XG4gICAgLyoqVG8gb3ZlcnJpZGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIHZhbHVlcyB0byB0aGUgZ3JpZHN0ZXIgY29udHJvbCAqL1xuICAgIHRoaXMub3B0aW9ucyA9IEdyaWRzdGVyQ29uZmlnRGVmYXVsdFNldHRpbmdzO1xuICAgIHRoaXMub3B0aW9ucy5pdGVtQ2hhbmdlQ2FsbGJhY2sgPSBmdW5jdGlvbiAoaXRlbTogYW55KSB7XG4gICAgICBhcmVhQ29udGV4dC5zZXRBcmVhSGVpZ2h0KCk7XG4gICAgICBhcmVhQ29udGV4dC51cGRhdGVXaWRnZXRzKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFRvIGluaXRpYXRlIGV2ZW50YnVzIHN1YnNjdGlwdGlvbnMgKi9cbiAgaW5pdGl0YXRlRXZlbnRCdXNTdWJzY3JpdGlvbnMoKSB7XG4gICAgdGhpcy53aWRnZXREZWxldGVFdmVudCA9IHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5zdWJzY3JpYmUoUkFFdmVudC5XaWRnZXREZWxldGUpLnN1YnNjcmliZSgoaW5zdGFuY2VJZCkgPT4ge1xuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5kZWxldGVXaWRnZXQoaW5zdGFuY2VJZCwgdHJ1ZSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMud2lkZ2V0QWRkRXZlbnQgPSB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMuc3Vic2NyaWJlKFJBRXZlbnQuQWRkV2lkZ2V0KS5zdWJzY3JpYmUoKHdpZGdldEluZm8pID0+IHtcbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgIHRoaXMuY29weVdpZGdldCh3aWRnZXRJbmZvKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5jb25pZmdBZGRDbGljayA9IHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5zdWJzY3JpYmUoUkFFdmVudC5Db25maWdBZGRDbGljaykuc3Vic2NyaWJlKChlKSA9PiB7XG4gICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICB0aGlzLmFkZFdpZGdldChlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy53aWRnZXRMaWJyYXJ5RG9uZUNsaWNrID0gdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnN1YnNjcmliZShSQUV2ZW50LndpZGdldExpYnJhcnlEb25lQ2xpY2spLnN1YnNjcmliZSgod2lkZ2V0TGlzdCkgPT4ge1xuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHsgICAgICAgXG4gICAgICAgIGlmICh3aWRnZXRMaXN0KSB7ICAgICAgICBcbiAgICAgICAgICAvLyB3aWRnZXRMaXN0LmZvckVhY2god2lkZ2V0SW5mbyA9PiB7XG4gICAgICAgICAgLy8gICB0aGlzLmFkZFdpZGdldCh3aWRnZXRJbmZvKTtcbiAgICAgICAgICAvLyB9KTtcbiAgICAgICAgICB0aGlzLmFkZFdpZGdldExpc3RUb0dyaWRzdGVyKHdpZGdldExpc3QsIDApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiB0ZW1wIGZpeC0gcmVjdXJzaXZlIG1ldGhvZCB0byBpdGVyYXRlIG92ZXIgdGhlIGxpc3Qgb2YgaXRlbXNcbiAgICogYW5kIGFkZCB0aGVtIHRvIGdyaWRzdGVyIGluIHRoZSBnaXZlbiBvcmRlclxuICAgKiBAcGFyYW0gd2lkZ2V0TGlzdCAgLWxpc3Qgb2Ygd2lkZ2V0c1xuICAgKiBAcGFyYW0gaW5kZXggLWluZGV4IG9mIHRoZSBjdXJyZW50IHZhbHVlIHRvIGJlIGFkZGVkXG4gICAqL1xuICBhZGRXaWRnZXRMaXN0VG9Hcmlkc3Rlcih3aWRnZXRMaXN0OiBhbnksIGluZGV4OiBudW1iZXIpIHtcbiAgICBsZXQgYXJlYUNvbnRleHQgPSB0aGlzO1xuICAgIGxldCBpbmRleFZhbCA9IGluZGV4ICsgMTtcbiAgICBpZiAoaW5kZXggPiB3aWRnZXRMaXN0Lmxlbmd0aCAtIDEpXG4gICAgICByZXR1cm47XG4gICAgZWxzZSB7XG4gICAgICBpZiAoaW5kZXggPT0gMCkge1xuICAgICAgICBhcmVhQ29udGV4dC5hZGRXaWRnZXQod2lkZ2V0TGlzdFtpbmRleF0pO1xuICAgICAgICBhcmVhQ29udGV4dC5hZGRXaWRnZXRMaXN0VG9Hcmlkc3Rlcih3aWRnZXRMaXN0LCBpbmRleFZhbCk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgYXJlYUNvbnRleHQuYWRkV2lkZ2V0KHdpZGdldExpc3RbaW5kZXhdKTtcbiAgICAgICAgICBhcmVhQ29udGV4dC5hZGRXaWRnZXRMaXN0VG9Hcmlkc3Rlcih3aWRnZXRMaXN0LCBpbmRleFZhbCk7XG4gICAgICAgIH0sIDEwMDApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbmlmZ0FkZENsaWNrKVxuICAgICAgdGhpcy5jb25pZmdBZGRDbGljay51bnN1YnNjcmliZSgpO1xuXG4gICAgaWYgKHRoaXMud2lkZ2V0QWRkRXZlbnQpXG4gICAgICB0aGlzLndpZGdldEFkZEV2ZW50LnVuc3Vic2NyaWJlKCk7XG5cbiAgICBpZiAodGhpcy53aWRnZXREZWxldGVFdmVudClcbiAgICAgIHRoaXMud2lkZ2V0RGVsZXRlRXZlbnQudW5zdWJzY3JpYmUoKTtcblxuICAgIGlmICh0aGlzLndpZGdldExpYnJhcnlEb25lQ2xpY2spXG4gICAgICB0aGlzLndpZGdldExpYnJhcnlEb25lQ2xpY2sudW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIC8qKlRvIHVwZGF0ZSBwb3NpdGlvbi9kaW1lbnRpb24gb2YgYWxsIHdpZGdldHMgaW4gdGhlIGFyZWEgKi9cbiAgdXBkYXRlV2lkZ2V0cygpIHtcbiAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UudXBkYXRlV2lkZ2V0cyh0aGlzLm1hcEdyaWRzdGVyTGlzdFRvT2JqZWN0KHRoaXMud2lkZ2V0TGlzdCksIHRoaXMuYXBwQ29uZmlnKS5zdWJzY3JpYmUod2lkZ2V0cyA9PiB7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKiogVG8gcmV0cmlldmUgd2lkZ2V0cyBiYXNlZCBvbiB1c2VyRGFzaGJvYXJkaWQgYW5kIGFyZWEgbmFtZSAqL1xuICBsb2FkV2lkZ2V0cyh1c2VyRGFzaGJvYXJJZDogbnVtYmVyLCBhcmVhS2V5OiBzdHJpbmcpIHtcbiAgICBsZXQgYXJlYUNvbnRleHQgPSB0aGlzO1xuXG4gICAgbGV0IHdpZGdldEluZm8gPSA8SVdpZGdldEluZm8+e1xuICAgICAgZGFzaGJvYXJkSWQ6IHVzZXJEYXNoYm9hcklkLnRvU3RyaW5nKCksXG4gICAgICBkYXNoYm9hcmRBcmVhS2V5OiBhcmVhS2V5XG4gICAgfVxuICAgIGFyZWFDb250ZXh0LndpZGdldExpc3QgPSBbXTtcbiAgICB0aGlzLmRhc2hib2FyZFNlcnZpY2UuZ2V0V2lkZ2V0c0J5RGFzaGJvYXJkQXJlYSh3aWRnZXRJbmZvLCB0aGlzLmFwcENvbmZpZykuc3Vic2NyaWJlKHdpZGdldHMgPT4ge1xuICAgICAgaWYgKHdpZGdldHMgJiYgd2lkZ2V0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGFyZWFDb250ZXh0LndpZGdldExpc3QgPSB0aGlzLm1hcE9iamVjdExpc3RUb0dyaWRzdGVySXRlbUxpc3Qod2lkZ2V0cyk7XG4gICAgICAgIGFyZWFDb250ZXh0LnNldEFyZWFIZWlnaHQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG5cblxuICAvKiogVG8gc2V0IEFyZWEoR3JpZHN0ZXIpIGhlaWdodCBkeW5hbWljYWxseSBhcyB3aWRnZXRzIGFyZSBhZGRlZC9yZW1vdmVkICovXG4gIHNldEFyZWFIZWlnaHQoKSB7XG4gICAgbGV0IGFyZWFTY3JvbGxIZWlnaHQgPSAwO1xuICAgIGxldCBhcmVhSGVpZ2h0ID0gMDtcbiAgICBsZXQgY3VyUm93SGVpZ2h0ID0gMDtcbiAgICBpZiAodGhpcy5vcHRpb25zLmFwaSkge1xuICAgICAgY3VyUm93SGVpZ2h0ID0gdGhpcy5vcHRpb25zLmFwaS5nZXRDdXJyZW50Um93SGVpZ2h0KCk7XG4gICAgfVxuICAgIHRoaXMud2lkZ2V0TGlzdC5mb3JFYWNoKCh0KSA9PiB7XG4gICAgICBsZXQgY3VycmVudEhlaWdodCA9IHQueSArIHQucm93cztcbiAgICAgIGlmIChjdXJyZW50SGVpZ2h0ID4gYXJlYVNjcm9sbEhlaWdodCkge1xuICAgICAgICBhcmVhU2Nyb2xsSGVpZ2h0ID0gY3VycmVudEhlaWdodDtcbiAgICAgIH1cbiAgICAgIGlmIChjdXJSb3dIZWlnaHQgPT0gMCkge1xuICAgICAgICBjdXJyZW50SGVpZ2h0ID0gdGhpcy53aWRnZXRMaXN0WzBdLmN1clJvd0hlaWdodDtcbiAgICAgIH1cbiAgICAgIHQud2lkZ2V0SW5mby5yb3dIZWlnaHQgPSBjdXJSb3dIZWlnaHQ7XG4gICAgfSk7XG5cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuYXBpKSB7XG4gICAgICBhcmVhSGVpZ2h0ID0gYXJlYVNjcm9sbEhlaWdodCAqIHRoaXMub3B0aW9ucy5hcGkuZ2V0Q3VycmVudFJvd0hlaWdodCgpICsgMTAwO1xuICAgIH1cbiAgICBpZiAoYXJlYUhlaWdodCA8IDYwMCkge1xuICAgICAgYXJlYUhlaWdodCA9IDYwMDtcbiAgICB9XG4gICAgY29uc29sZS5sb2coJ2dyaWQgaGVpZ2h0IHZhbHVlIGlzJyk7XG4gICAgY29uc29sZS5sb2coYXJlYUhlaWdodCk7XG4gICAgdGhpcy5ncmlkaGVpZ2h0ID0gYXJlYUhlaWdodDtcbiAgfVxuXG5cbiAgLyoqIFRvIHJlbW92ZSBhIHdpZGdldCBpbnN0YW5jZSBmcm9tIGRhc2hib2FyZCBhbmQgdG8gc2F2ZSBpbmZvIGluIGRhdGFiYXNlICovXG4gIGRlbGV0ZVdpZGdldCh3aWRnZXRJbnN0YW5jZUlkOiBhbnksIGlzYWxlcnREaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgbGV0IHdpZGdldCA9IHRoaXMud2lkZ2V0TGlzdC5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBpdGVtLndpZGdldEluZm8ud2lkZ2V0SW5zdGFuY2VJZCA9PT0gd2lkZ2V0SW5zdGFuY2VJZDtcbiAgICB9KTtcbiAgICBpZiAod2lkZ2V0Lmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMud2lkZ2V0TGlzdC5zcGxpY2UodGhpcy53aWRnZXRMaXN0LmluZGV4T2Yod2lkZ2V0WzBdKSwgMSk7XG4gICAgICB0aGlzLnNldEFyZWFIZWlnaHQoKTtcbiAgICAgIGlmICghaXNhbGVydERpc2FibGVkKSB7XG4gICAgICAgIHRoaXMubm90aWZpZXIubm90aWZ5KCdzdWNjZXNzJywgXCIgXCIgKyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKCdXaWRnZXQnKSArIFwiIFwiICsgd2lkZ2V0WzBdLndpZGdldEluZm8ud2lkZ2V0VGl0bGUgKyBcIiBcIiArIHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ0RlbGV0ZWRTdWNjZXNmdWxseScpICsgXCIgXCIpO1xuXG4gICAgICB9XG4gICAgICB0aGlzLm9wdGlvbnMuY29tcGFjdFR5cGUgPSAnY29tcGFjdExlZnQmVXAnO1xuICAgICAgdGhpcy5vcHRpb25zLmFwaS5vcHRpb25zQ2hhbmdlZCgpO1xuICAgICAgdGhpcy5vcHRpb25zLmNvbXBhY3RUeXBlID0gJ25vbmUnO1xuICAgICAgdGhpcy5vcHRpb25zLmFwaS5vcHRpb25zQ2hhbmdlZCgpO1xuICAgIH1cbiAgfVxuXG5cblxuICAvKipUbyBhZGQgd2lkZ2V0IGluc3RhbmNlIHRvIHRoZSBkYXRhYmFzZSB3aXRoIHRoZSBuZXh0IGF2YWlsYWJsZSBwb3NpdGlvbiBhbmQgdG8gbWFrZSBjaGFuZ2VzIGluXG4gICAqIGRhc2hib2FyZCBhcmVhLlxuICAgKi9cbiAgYWRkV2lkZ2V0KGRhdGE6IGFueSkge1xuICAgIGxldCB3aWRnZXRpZCA9IGRhdGEud2lkZ2V0SWQ7XG4gICAgZGF0YS5oZWlnaHQgPSB0aGlzLndpZGdldEhlaWdodDtcbiAgICBkYXRhLndpZHRoID0gdGhpcy53aWRnZXRXaWR0aDtcbiAgICBkYXRhLnBvc2l0aW9uX3ggPSAwO1xuICAgIGRhdGEucG9zaXRpb25feSA9IDA7XG4gICAgbGV0IGdyaWRzdGVySXRlbSA9IHRoaXMubWFwT2JqZWN0c1RvR3JpZHN0ZXJJdGVtKGRhdGEpO1xuXG4gICAgLyoqIHRvIGZpbmQgdGhlIGF2YWlsYWJsZSBwb3NpdGlvbiBpbiBncmlkc3RlciwgdGVtcCBjb21tZW50aW5nIHRoZSBjb2RlLXJldHVybmluZyBoaWdoZXIgeSB2YWx1ZSB0aGFuIG5vcm1hbCAqL1xuICAgIC8vIGlmICh0aGlzLm9wdGlvbnMuYXBpKSB7XG4gICAgLy8gICBncmlkc3Rlckl0ZW0gPSB0aGlzLm9wdGlvbnMuYXBpLmdldEZpcnN0UG9zc2libGVQb3NpdGlvbihncmlkc3Rlckl0ZW0pO1xuICAgIC8vIH1cbiAgICAvLyBkYXRhLnBvc2l0aW9uX3ggPSBncmlkc3Rlckl0ZW0ueDtcbiAgICAvLyBkYXRhLnBvc2l0aW9uX3kgPSBncmlkc3Rlckl0ZW0ueTtcbiAgICBkYXRhLmRhc2hib2FyZEFyZWFLZXkgPSB0aGlzLmFyZWFLZXk7XG4gICAgZGF0YS5kYXNoYm9hcmRJZCA9IHRoaXMudXNlckRhc2hib2FyZElkO1xuICAgIHRoaXMubmd4U2VydmljZS5zdGFydCgpO1xuICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5hZGRXaWRnZXQoZGF0YSwgdGhpcy5hcHBDb25maWcpLnN1YnNjcmliZSh3aWRnZXQgPT4ge1xuICAgICAgZ3JpZHN0ZXJJdGVtID0gdGhpcy5tYXBPYmplY3RzVG9Hcmlkc3Rlckl0ZW0od2lkZ2V0KTtcbiAgICAgIHRoaXMud2lkZ2V0TGlzdC5wdXNoKGdyaWRzdGVySXRlbSk7XG4gICAgICB0aGlzLnNldEFyZWFIZWlnaHQoKTtcbiAgICAgIC8qKlRvIHNhdmUgYWRkZWQgd2lkZ2V0IHBvc2l0aW9uIGluIGRiICovXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVXaWRnZXRzKCk7XG4gICAgICB9LCAxMDAwKTtcbiAgICAgIHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5wdWJsaXNoKFJBRXZlbnQuV2lkZ2V0QWRkZWQsIHdpZGdldCk7XG4gICAgfSk7XG4gIH1cblxuICAvKiogVG8gYWRkIHdpZGdldCB0byBjdXJyZW50IHdpZGdldCBsaXN0ICxpbnZva2VkIGZyb20gY29weSB3aWRnZXQgd2luZG93Ki9cbiAgY29weVdpZGdldChkYXRhOiBhbnkpIHtcbiAgICBsZXQgZ3JpZHN0ZXJJdGVtID0gdGhpcy5tYXBPYmplY3RzVG9Hcmlkc3Rlckl0ZW0oZGF0YSk7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5hcGkpIHtcbiAgICAgIGdyaWRzdGVySXRlbSA9IHRoaXMub3B0aW9ucy5hcGkuZ2V0Rmlyc3RQb3NzaWJsZVBvc2l0aW9uKGdyaWRzdGVySXRlbSk7XG4gICAgfVxuXG4gICAgZGF0YS5wb3NpdGlvbl94ID0gZ3JpZHN0ZXJJdGVtLng7XG4gICAgZGF0YS5wb3NpdGlvbl95ID0gZ3JpZHN0ZXJJdGVtLnk7XG4gICAgZ3JpZHN0ZXJJdGVtID0gdGhpcy5tYXBPYmplY3RzVG9Hcmlkc3Rlckl0ZW0oZGF0YSk7XG4gICAgdGhpcy53aWRnZXRMaXN0LnB1c2goZ3JpZHN0ZXJJdGVtKTtcbiAgICB0aGlzLnNldEFyZWFIZWlnaHQoKTtcbiAgfVxuXG4gIC8qKlRvIG1hcCBJd2lkZ2V0SW5mbyBvYmplY3QgdG8gZ3JpZHN0ZXJJdGVtICovXG4gIG1hcE9iamVjdHNUb0dyaWRzdGVySXRlbSh3aWRnZXQ6IElXaWRnZXRJbmZvKSB7XG4gICAgbGV0IGdyaWRzdGVySXRlbSA9IDxHcmlkc3Rlckl0ZW0+e1xuICAgICAgY29sczogd2lkZ2V0LndpZHRoLFxuICAgICAgcm93czogd2lkZ2V0LmhlaWdodCxcbiAgICAgIHg6IHdpZGdldC5wb3NpdGlvbl94LFxuICAgICAgeTogd2lkZ2V0LnBvc2l0aW9uX3ksXG4gICAgICB3aWRnZXRJbmZvOiB3aWRnZXRcbiAgICB9XG4gICAgcmV0dXJuIGdyaWRzdGVySXRlbTtcbiAgfVxuXG4gIG1hcE9iamVjdExpc3RUb0dyaWRzdGVySXRlbUxpc3Qod2lkZ2V0TGlzdDogQXJyYXk8SVdpZGdldEluZm8+KSB7XG4gICAgbGV0IHdpZGdldEFycmF5ID0gQXJyYXk8R3JpZHN0ZXJJdGVtPigpO1xuICAgIHdpZGdldExpc3QuZm9yRWFjaCh3aWRnZXQgPT4ge1xuICAgICAgd2lkZ2V0QXJyYXkucHVzaCh0aGlzLm1hcE9iamVjdHNUb0dyaWRzdGVySXRlbSh3aWRnZXQpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gd2lkZ2V0QXJyYXk7XG4gIH1cblxuICBtYXBHcmlkc3Rlckl0ZW1Ub09iamVjdCh3aWRnZXRJdGVtOiBHcmlkc3Rlckl0ZW0pIHtcbiAgICBsZXQgd2lkZ2V0OiBJV2lkZ2V0SW5mbztcbiAgICB3aWRnZXQgPSB3aWRnZXRJdGVtLndpZGdldEluZm87XG4gICAgd2lkZ2V0LmhlaWdodCA9IHdpZGdldEl0ZW0ucm93cztcbiAgICB3aWRnZXQud2lkdGggPSB3aWRnZXRJdGVtLmNvbHM7XG4gICAgd2lkZ2V0LnBvc2l0aW9uX3ggPSB3aWRnZXRJdGVtLng7XG4gICAgd2lkZ2V0LnBvc2l0aW9uX3kgPSB3aWRnZXRJdGVtLnk7XG4gICAgd2lkZ2V0LnJvd0hlaWdodCA9IHdpZGdldEl0ZW0uY3VyUm93SGVpZ2h0O1xuICAgIHJldHVybiB3aWRnZXQ7XG4gIH1cblxuICBtYXBHcmlkc3Rlckxpc3RUb09iamVjdCh3aWRnZXRJdGVtTGlzdDogQXJyYXk8R3JpZHN0ZXJJdGVtPikge1xuICAgIGxldCB3aWRnZXRMaXN0QXJyYXkgPSBBcnJheTxJV2lkZ2V0SW5mbz4oKTtcbiAgICB3aWRnZXRJdGVtTGlzdC5mb3JFYWNoKHdpZGdldCA9PiB7XG4gICAgICB3aWRnZXRMaXN0QXJyYXkucHVzaCh0aGlzLm1hcEdyaWRzdGVySXRlbVRvT2JqZWN0KHdpZGdldCkpO1xuICAgIH0pO1xuICAgIHJldHVybiB3aWRnZXRMaXN0QXJyYXk7XG4gIH1cblxufSJdfQ==
1
+ /**
2
+ * @fileoverview added by tsickle
3
+ * Generated from: lib/ra-dashboard-area/ra.dashboard.area.ts
4
+ * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
5
+ */
6
+ import { Input, Component, NgZone } from '@angular/core';
7
+ import { RaDashboardService } from '../ra.dashboard.service';
8
+ import { RADashboardEventBus } from '../ra.dashbard.event.bus';
9
+ import { RAEvent } from '../ra.event.enum';
10
+ import { GridsterConfigDefaultSettings } from '../ra.gridster.config';
11
+ import { NgxUiLoaderService } from 'ngx-ui-loader';
12
+ import { NotifierService } from 'angular-notifier';
13
+ import { RATranslateService } from '@schneideress/ra-common';
14
+ var RADashboardArea = /** @class */ (function () {
15
+ function RADashboardArea(dashboardService, ngZone, ngxService, translateService, notifier) {
16
+ this.dashboardService = dashboardService;
17
+ this.ngZone = ngZone;
18
+ this.ngxService = ngxService;
19
+ this.translateService = translateService;
20
+ this.notifier = notifier;
21
+ this.widgetList = Array();
22
+ this.gridheight = 300;
23
+ this.isWidgetLoaded = false;
24
+ this.widgetHeight = 3;
25
+ this.widgetWidth = 5;
26
+ }
27
+ /**
28
+ * @return {?}
29
+ */
30
+ RADashboardArea.prototype.ngOnInit = /**
31
+ * @return {?}
32
+ */
33
+ function () {
34
+ this.initiateGridsterConfig();
35
+ };
36
+ /**
37
+ * @param {?} changes
38
+ * @return {?}
39
+ */
40
+ RADashboardArea.prototype.ngOnChanges = /**
41
+ * @param {?} changes
42
+ * @return {?}
43
+ */
44
+ function (changes) {
45
+ if (this.raDashboardEventBus && this.appConfig && !this.isWidgetLoaded) {
46
+ this.isWidgetLoaded = true;
47
+ this.loadWidgets(this.userDashboardId, this.areaKey);
48
+ }
49
+ if (changes.raDashboardEventBus && changes.raDashboardEventBus.currentValue != changes.raDashboardEventBus.previousValue) {
50
+ this.inititateEventBusSubscritions();
51
+ }
52
+ };
53
+ /**To set GridsterConfig */
54
+ /**
55
+ * To set GridsterConfig
56
+ * @return {?}
57
+ */
58
+ RADashboardArea.prototype.initiateGridsterConfig = /**
59
+ * To set GridsterConfig
60
+ * @return {?}
61
+ */
62
+ function () {
63
+ /** @type {?} */
64
+ var areaContext = this;
65
+ /**To override default configuration values to the gridster control */
66
+ this.options = GridsterConfigDefaultSettings;
67
+ this.options.itemChangeCallback = (/**
68
+ * @param {?} item
69
+ * @return {?}
70
+ */
71
+ function (item) {
72
+ areaContext.setAreaHeight();
73
+ areaContext.updateWidgets();
74
+ });
75
+ };
76
+ /** To initiate eventbus subsctiptions */
77
+ /**
78
+ * To initiate eventbus subsctiptions
79
+ * @return {?}
80
+ */
81
+ RADashboardArea.prototype.inititateEventBusSubscritions = /**
82
+ * To initiate eventbus subsctiptions
83
+ * @return {?}
84
+ */
85
+ function () {
86
+ var _this = this;
87
+ this.widgetDeleteEvent = this.raDashboardEventBus.subscribe(RAEvent.WidgetDelete).subscribe((/**
88
+ * @param {?} instanceId
89
+ * @return {?}
90
+ */
91
+ function (instanceId) {
92
+ _this.ngZone.run((/**
93
+ * @return {?}
94
+ */
95
+ function () {
96
+ _this.deleteWidget(instanceId, true);
97
+ }));
98
+ }));
99
+ this.widgetAddEvent = this.raDashboardEventBus.subscribe(RAEvent.AddWidget).subscribe((/**
100
+ * @param {?} widgetInfo
101
+ * @return {?}
102
+ */
103
+ function (widgetInfo) {
104
+ _this.ngZone.run((/**
105
+ * @return {?}
106
+ */
107
+ function () {
108
+ _this.copyWidget(widgetInfo);
109
+ }));
110
+ }));
111
+ this.conifgAddClick = this.raDashboardEventBus.subscribe(RAEvent.ConfigAddClick).subscribe((/**
112
+ * @param {?} e
113
+ * @return {?}
114
+ */
115
+ function (e) {
116
+ _this.ngZone.run((/**
117
+ * @return {?}
118
+ */
119
+ function () {
120
+ _this.addWidget(e);
121
+ }));
122
+ }));
123
+ this.widgetLibraryDoneClick = this.raDashboardEventBus.subscribe(RAEvent.widgetLibraryDoneClick).subscribe((/**
124
+ * @param {?} widgetList
125
+ * @return {?}
126
+ */
127
+ function (widgetList) {
128
+ _this.ngZone.run((/**
129
+ * @return {?}
130
+ */
131
+ function () {
132
+ if (widgetList) {
133
+ // widgetList.forEach(widgetInfo => {
134
+ // this.addWidget(widgetInfo);
135
+ // });
136
+ _this.addWidgetListToGridster(widgetList, 0);
137
+ }
138
+ }));
139
+ }));
140
+ };
141
+ /**
142
+ * temp fix- recursive method to iterate over the list of items
143
+ * and add them to gridster in the given order
144
+ * @param widgetList -list of widgets
145
+ * @param index -index of the current value to be added
146
+ */
147
+ /**
148
+ * temp fix- recursive method to iterate over the list of items
149
+ * and add them to gridster in the given order
150
+ * @param {?} widgetList -list of widgets
151
+ * @param {?} index -index of the current value to be added
152
+ * @return {?}
153
+ */
154
+ RADashboardArea.prototype.addWidgetListToGridster = /**
155
+ * temp fix- recursive method to iterate over the list of items
156
+ * and add them to gridster in the given order
157
+ * @param {?} widgetList -list of widgets
158
+ * @param {?} index -index of the current value to be added
159
+ * @return {?}
160
+ */
161
+ function (widgetList, index) {
162
+ /** @type {?} */
163
+ var areaContext = this;
164
+ /** @type {?} */
165
+ var indexVal = index + 1;
166
+ if (index > widgetList.length - 1)
167
+ return;
168
+ else {
169
+ if (index == 0) {
170
+ areaContext.addWidget(widgetList[index]);
171
+ areaContext.addWidgetListToGridster(widgetList, indexVal);
172
+ }
173
+ else {
174
+ setTimeout((/**
175
+ * @return {?}
176
+ */
177
+ function () {
178
+ areaContext.addWidget(widgetList[index]);
179
+ areaContext.addWidgetListToGridster(widgetList, indexVal);
180
+ }), 1000);
181
+ }
182
+ }
183
+ };
184
+ /**
185
+ * @return {?}
186
+ */
187
+ RADashboardArea.prototype.ngOnDestroy = /**
188
+ * @return {?}
189
+ */
190
+ function () {
191
+ if (this.conifgAddClick)
192
+ this.conifgAddClick.unsubscribe();
193
+ if (this.widgetAddEvent)
194
+ this.widgetAddEvent.unsubscribe();
195
+ if (this.widgetDeleteEvent)
196
+ this.widgetDeleteEvent.unsubscribe();
197
+ if (this.widgetLibraryDoneClick)
198
+ this.widgetLibraryDoneClick.unsubscribe();
199
+ };
200
+ /**To update position/dimention of all widgets in the area */
201
+ /**
202
+ * To update position/dimention of all widgets in the area
203
+ * @return {?}
204
+ */
205
+ RADashboardArea.prototype.updateWidgets = /**
206
+ * To update position/dimention of all widgets in the area
207
+ * @return {?}
208
+ */
209
+ function () {
210
+ this.dashboardService.updateWidgets(this.mapGridsterListToObject(this.widgetList), this.appConfig).subscribe((/**
211
+ * @param {?} widgets
212
+ * @return {?}
213
+ */
214
+ function (widgets) {
215
+ }));
216
+ return true;
217
+ };
218
+ /** To retrieve widgets based on userDashboardid and area name */
219
+ /**
220
+ * To retrieve widgets based on userDashboardid and area name
221
+ * @param {?} userDashboarId
222
+ * @param {?} areaKey
223
+ * @return {?}
224
+ */
225
+ RADashboardArea.prototype.loadWidgets = /**
226
+ * To retrieve widgets based on userDashboardid and area name
227
+ * @param {?} userDashboarId
228
+ * @param {?} areaKey
229
+ * @return {?}
230
+ */
231
+ function (userDashboarId, areaKey) {
232
+ var _this = this;
233
+ /** @type {?} */
234
+ var areaContext = this;
235
+ /** @type {?} */
236
+ var widgetInfo = (/** @type {?} */ ({
237
+ dashboardId: userDashboarId.toString(),
238
+ dashboardAreaKey: areaKey
239
+ }));
240
+ areaContext.widgetList = [];
241
+ this.dashboardService.getWidgetsByDashboardArea(widgetInfo, this.appConfig).subscribe((/**
242
+ * @param {?} widgets
243
+ * @return {?}
244
+ */
245
+ function (widgets) {
246
+ if (widgets && widgets.length > 0) {
247
+ areaContext.widgetList = _this.mapObjectListToGridsterItemList(widgets);
248
+ areaContext.setAreaHeight();
249
+ }
250
+ }));
251
+ };
252
+ /** To set Area(Gridster) height dynamically as widgets are added/removed */
253
+ /**
254
+ * To set Area(Gridster) height dynamically as widgets are added/removed
255
+ * @return {?}
256
+ */
257
+ RADashboardArea.prototype.setAreaHeight = /**
258
+ * To set Area(Gridster) height dynamically as widgets are added/removed
259
+ * @return {?}
260
+ */
261
+ function () {
262
+ var _this = this;
263
+ /** @type {?} */
264
+ var areaScrollHeight = 0;
265
+ /** @type {?} */
266
+ var areaHeight = 0;
267
+ /** @type {?} */
268
+ var curRowHeight = 0;
269
+ if (this.options.api) {
270
+ curRowHeight = this.options.api.getCurrentRowHeight();
271
+ }
272
+ this.widgetList.forEach((/**
273
+ * @param {?} t
274
+ * @return {?}
275
+ */
276
+ function (t) {
277
+ /** @type {?} */
278
+ var currentHeight = t.y + t.rows;
279
+ if (currentHeight > areaScrollHeight) {
280
+ areaScrollHeight = currentHeight;
281
+ }
282
+ if (curRowHeight == 0) {
283
+ currentHeight = _this.widgetList[0].curRowHeight;
284
+ }
285
+ t.widgetInfo.rowHeight = curRowHeight;
286
+ }));
287
+ if (this.options.api) {
288
+ areaHeight = areaScrollHeight * this.options.api.getCurrentRowHeight() + 100;
289
+ }
290
+ if (areaHeight < 600) {
291
+ areaHeight = 600;
292
+ }
293
+ console.log('grid height value is');
294
+ console.log(areaHeight);
295
+ this.gridheight = areaHeight;
296
+ };
297
+ /** To remove a widget instance from dashboard and to save info in database */
298
+ /**
299
+ * To remove a widget instance from dashboard and to save info in database
300
+ * @param {?} widgetInstanceId
301
+ * @param {?=} isalertDisabled
302
+ * @return {?}
303
+ */
304
+ RADashboardArea.prototype.deleteWidget = /**
305
+ * To remove a widget instance from dashboard and to save info in database
306
+ * @param {?} widgetInstanceId
307
+ * @param {?=} isalertDisabled
308
+ * @return {?}
309
+ */
310
+ function (widgetInstanceId, isalertDisabled) {
311
+ if (isalertDisabled === void 0) { isalertDisabled = false; }
312
+ /** @type {?} */
313
+ var widget = this.widgetList.filter((/**
314
+ * @param {?} item
315
+ * @return {?}
316
+ */
317
+ function (item) {
318
+ return item.widgetInfo.widgetInstanceId === widgetInstanceId;
319
+ }));
320
+ if (widget.length > 0) {
321
+ this.widgetList.splice(this.widgetList.indexOf(widget[0]), 1);
322
+ this.setAreaHeight();
323
+ if (!isalertDisabled) {
324
+ this.notifier.notify('success', " " + this.translateService.translate('Widget') + " " + widget[0].widgetInfo.widgetTitle + " " + this.translateService.translate('DeletedSuccesfully') + " ");
325
+ }
326
+ this.options.compactType = 'compactLeft&Up';
327
+ this.options.api.optionsChanged();
328
+ this.options.compactType = 'none';
329
+ this.options.api.optionsChanged();
330
+ }
331
+ };
332
+ /**To add widget instance to the database with the next available position and to make changes in
333
+ * dashboard area.
334
+ */
335
+ /**
336
+ * To add widget instance to the database with the next available position and to make changes in
337
+ * dashboard area.
338
+ * @param {?} data
339
+ * @return {?}
340
+ */
341
+ RADashboardArea.prototype.addWidget = /**
342
+ * To add widget instance to the database with the next available position and to make changes in
343
+ * dashboard area.
344
+ * @param {?} data
345
+ * @return {?}
346
+ */
347
+ function (data) {
348
+ var _this = this;
349
+ /** @type {?} */
350
+ var widgetid = data.widgetId;
351
+ data.height = this.widgetHeight;
352
+ data.width = this.widgetWidth;
353
+ data.position_x = 0;
354
+ data.position_y = 0;
355
+ /** @type {?} */
356
+ var gridsterItem = this.mapObjectsToGridsterItem(data);
357
+ /** to find the available position in gridster, temp commenting the code-returning higher y value than normal */
358
+ // if (this.options.api) {
359
+ // gridsterItem = this.options.api.getFirstPossiblePosition(gridsterItem);
360
+ // }
361
+ // data.position_x = gridsterItem.x;
362
+ // data.position_y = gridsterItem.y;
363
+ data.dashboardAreaKey = this.areaKey;
364
+ data.dashboardId = this.userDashboardId;
365
+ this.ngxService.start();
366
+ this.dashboardService.addWidget(data, this.appConfig).subscribe((/**
367
+ * @param {?} widget
368
+ * @return {?}
369
+ */
370
+ function (widget) {
371
+ gridsterItem = _this.mapObjectsToGridsterItem(widget);
372
+ _this.widgetList.push(gridsterItem);
373
+ _this.setAreaHeight();
374
+ /**To save added widget position in db */
375
+ setTimeout((/**
376
+ * @return {?}
377
+ */
378
+ function () {
379
+ _this.updateWidgets();
380
+ }), 1000);
381
+ _this.raDashboardEventBus.publish(RAEvent.WidgetAdded, widget);
382
+ }));
383
+ };
384
+ /** To add widget to current widget list ,invoked from copy widget window*/
385
+ /**
386
+ * To add widget to current widget list ,invoked from copy widget window
387
+ * @param {?} data
388
+ * @return {?}
389
+ */
390
+ RADashboardArea.prototype.copyWidget = /**
391
+ * To add widget to current widget list ,invoked from copy widget window
392
+ * @param {?} data
393
+ * @return {?}
394
+ */
395
+ function (data) {
396
+ /** @type {?} */
397
+ var gridsterItem = this.mapObjectsToGridsterItem(data);
398
+ if (this.options.api) {
399
+ gridsterItem = this.options.api.getFirstPossiblePosition(gridsterItem);
400
+ }
401
+ data.position_x = gridsterItem.x;
402
+ data.position_y = gridsterItem.y;
403
+ gridsterItem = this.mapObjectsToGridsterItem(data);
404
+ this.widgetList.push(gridsterItem);
405
+ this.setAreaHeight();
406
+ };
407
+ /**To map IwidgetInfo object to gridsterItem */
408
+ /**
409
+ * To map IwidgetInfo object to gridsterItem
410
+ * @param {?} widget
411
+ * @return {?}
412
+ */
413
+ RADashboardArea.prototype.mapObjectsToGridsterItem = /**
414
+ * To map IwidgetInfo object to gridsterItem
415
+ * @param {?} widget
416
+ * @return {?}
417
+ */
418
+ function (widget) {
419
+ /** @type {?} */
420
+ var gridsterItem = (/** @type {?} */ ({
421
+ cols: widget.width,
422
+ rows: widget.height,
423
+ x: widget.position_x,
424
+ y: widget.position_y,
425
+ widgetInfo: widget
426
+ }));
427
+ return gridsterItem;
428
+ };
429
+ /**
430
+ * @param {?} widgetList
431
+ * @return {?}
432
+ */
433
+ RADashboardArea.prototype.mapObjectListToGridsterItemList = /**
434
+ * @param {?} widgetList
435
+ * @return {?}
436
+ */
437
+ function (widgetList) {
438
+ var _this = this;
439
+ /** @type {?} */
440
+ var widgetArray = Array();
441
+ widgetList.forEach((/**
442
+ * @param {?} widget
443
+ * @return {?}
444
+ */
445
+ function (widget) {
446
+ widgetArray.push(_this.mapObjectsToGridsterItem(widget));
447
+ }));
448
+ return widgetArray;
449
+ };
450
+ /**
451
+ * @param {?} widgetItem
452
+ * @return {?}
453
+ */
454
+ RADashboardArea.prototype.mapGridsterItemToObject = /**
455
+ * @param {?} widgetItem
456
+ * @return {?}
457
+ */
458
+ function (widgetItem) {
459
+ /** @type {?} */
460
+ var widget;
461
+ widget = widgetItem.widgetInfo;
462
+ widget.height = widgetItem.rows;
463
+ widget.width = widgetItem.cols;
464
+ widget.position_x = widgetItem.x;
465
+ widget.position_y = widgetItem.y;
466
+ widget.rowHeight = widgetItem.curRowHeight;
467
+ return widget;
468
+ };
469
+ /**
470
+ * @param {?} widgetItemList
471
+ * @return {?}
472
+ */
473
+ RADashboardArea.prototype.mapGridsterListToObject = /**
474
+ * @param {?} widgetItemList
475
+ * @return {?}
476
+ */
477
+ function (widgetItemList) {
478
+ var _this = this;
479
+ /** @type {?} */
480
+ var widgetListArray = Array();
481
+ widgetItemList.forEach((/**
482
+ * @param {?} widget
483
+ * @return {?}
484
+ */
485
+ function (widget) {
486
+ widgetListArray.push(_this.mapGridsterItemToObject(widget));
487
+ }));
488
+ return widgetListArray;
489
+ };
490
+ RADashboardArea.decorators = [
491
+ { type: Component, args: [{
492
+ selector: 'ra-dashboard-area',
493
+ template: "<div #gridWrapper class=\"wrap gridster\" [style.height.px]=\"gridheight\" >\r\n<!-- <div #gridWrapper class=\"wrap gridster\"> -->\r\n <gridster [options]=\"options\" style=\"height:100%;\">\r\n <gridster-item [item]=\"item\" *ngFor=\"let item of widgetList\">\r\n <ra-widget-container [app-config]=\"appConfig\" [event-bus]=\"raDashboardEventBus\" (widgetDeleted)=\"deleteWidget($event)\" [data]=\"item\"\r\n [global-filter]=\"globalFilter\" [widget-width]=\"item.cols * item.rowHeight\" [widget-height]=\"item.rows * item.rowHeight\" [widget-instance-id]=\"item.widgetInstanceId\"></ra-widget-container>\r\n </gridster-item>\r\n </gridster>\r\n <notifier-container></notifier-container>\r\n</div>\r\n\r\n",
494
+ styles: ["gridster{width:inherit;resize:height;display:-webkit-box;display:flex;background-color:#ededed;overflow-y:hidden!important}.dvheader{width:100%;height:35px;background:#000;color:#fff;padding:7px 3px 5px 6px;text-transform:uppercase}gridster-item{box-sizing:border-box;z-index:1;position:absolute;overflow:hidden;-webkit-transition:.3s;transition:.3s;display:none;background:#fff;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text;box-shadow:0 1px 10px rgba(0,0,0,.05)}gridster-item:hover{box-shadow:0 1px 10px rgba(0,0,0,.15)}"]
495
+ }] }
496
+ ];
497
+ /** @nocollapse */
498
+ RADashboardArea.ctorParameters = function () { return [
499
+ { type: RaDashboardService },
500
+ { type: NgZone },
501
+ { type: NgxUiLoaderService },
502
+ { type: RATranslateService },
503
+ { type: NotifierService }
504
+ ]; };
505
+ RADashboardArea.propDecorators = {
506
+ userDashboardId: [{ type: Input, args: ['user-dashboard-id',] }],
507
+ areaKey: [{ type: Input, args: ['area-key',] }],
508
+ globalFilter: [{ type: Input, args: ['global-filter',] }],
509
+ raDashboardEventBus: [{ type: Input, args: ['event-bus',] }],
510
+ widgetHeight: [{ type: Input, args: ['widget-height',] }],
511
+ widgetWidth: [{ type: Input, args: ['widget-width',] }],
512
+ appConfig: [{ type: Input, args: ['app-config',] }]
513
+ };
514
+ return RADashboardArea;
515
+ }());
516
+ export { RADashboardArea };
517
+ if (false) {
518
+ /** @type {?} */
519
+ RADashboardArea.prototype.widgetList;
520
+ /** @type {?} */
521
+ RADashboardArea.prototype.options;
522
+ /** @type {?} */
523
+ RADashboardArea.prototype.gridheight;
524
+ /**
525
+ * @type {?}
526
+ * @private
527
+ */
528
+ RADashboardArea.prototype.conifgAddClick;
529
+ /**
530
+ * @type {?}
531
+ * @private
532
+ */
533
+ RADashboardArea.prototype.widgetDeleteEvent;
534
+ /**
535
+ * @type {?}
536
+ * @private
537
+ */
538
+ RADashboardArea.prototype.widgetAddEvent;
539
+ /**
540
+ * @type {?}
541
+ * @private
542
+ */
543
+ RADashboardArea.prototype.widgetLibraryDoneClick;
544
+ /**
545
+ * @type {?}
546
+ * @private
547
+ */
548
+ RADashboardArea.prototype.isWidgetLoaded;
549
+ /** @type {?} */
550
+ RADashboardArea.prototype.userDashboardId;
551
+ /** @type {?} */
552
+ RADashboardArea.prototype.areaKey;
553
+ /** @type {?} */
554
+ RADashboardArea.prototype.globalFilter;
555
+ /** @type {?} */
556
+ RADashboardArea.prototype.raDashboardEventBus;
557
+ /** @type {?} */
558
+ RADashboardArea.prototype.widgetHeight;
559
+ /** @type {?} */
560
+ RADashboardArea.prototype.widgetWidth;
561
+ /** @type {?} */
562
+ RADashboardArea.prototype.appConfig;
563
+ /**
564
+ * @type {?}
565
+ * @private
566
+ */
567
+ RADashboardArea.prototype.dashboardService;
568
+ /**
569
+ * @type {?}
570
+ * @private
571
+ */
572
+ RADashboardArea.prototype.ngZone;
573
+ /**
574
+ * @type {?}
575
+ * @private
576
+ */
577
+ RADashboardArea.prototype.ngxService;
578
+ /**
579
+ * @type {?}
580
+ * @private
581
+ */
582
+ RADashboardArea.prototype.translateService;
583
+ /**
584
+ * @type {?}
585
+ * @private
586
+ */
587
+ RADashboardArea.prototype.notifier;
588
+ }
589
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmEuZGFzaGJvYXJkLmFyZWEuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2NobmVpZGVyZXNzL2Rhc2hib2FyZGZyYW1ld29yay8iLCJzb3VyY2VzIjpbImxpYi9yYS1kYXNoYm9hcmQtYXJlYS9yYS5kYXNoYm9hcmQuYXJlYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQVUsU0FBUyxFQUE0QixNQUFNLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFHdEcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzNDLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXRFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHN0Q7SUEwQkUseUJBQW9CLGdCQUFvQyxFQUM5QyxNQUFjLEVBQ2QsVUFBOEIsRUFDOUIsZ0JBQW9DLEVBQ3BDLFFBQXlCO1FBSmYscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFvQjtRQUM5QyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsZUFBVSxHQUFWLFVBQVUsQ0FBb0I7UUFDOUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFvQjtRQUNwQyxhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQXRCNUIsZUFBVSxHQUFHLEtBQUssRUFBZ0IsQ0FBQztRQUVuQyxlQUFVLEdBQVcsR0FBRyxDQUFDO1FBTXhCLG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBTWhCLGlCQUFZLEdBQVcsQ0FBQyxDQUFDO1FBQzFCLGdCQUFXLEdBQVcsQ0FB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SUFFL0IsMkNBQTRDOzs7OztJQUN0RCxpQ0FBc0I7Ozs7O0lBQ3RCLHFDQUFzQzs7Ozs7SUFDdEMsMkNBQTRDOzs7OztJQUM1QyxtQ0FBaUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbnB1dCwgT25Jbml0LCBDb21wb25lbnQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgTmdab25lLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IEdyaWRzdGVyQ29uZmlnLCBHcmlkc3Rlckl0ZW0gfSBmcm9tICcuLi8uLi9ncmlkc3Rlci9pbmRleCc7XHJcbmltcG9ydCB7IFJhRGFzaGJvYXJkU2VydmljZSB9IGZyb20gJy4uL3JhLmRhc2hib2FyZC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUkFEYXNoYm9hcmRFdmVudEJ1cyB9IGZyb20gJy4uL3JhLmRhc2hiYXJkLmV2ZW50LmJ1cyc7XHJcbmltcG9ydCB7IFJBRXZlbnQgfSBmcm9tICcuLi9yYS5ldmVudC5lbnVtJztcclxuaW1wb3J0IHsgR3JpZHN0ZXJDb25maWdEZWZhdWx0U2V0dGluZ3MgfSBmcm9tICcuLi9yYS5ncmlkc3Rlci5jb25maWcnO1xyXG5pbXBvcnQgeyBJV2lkZ2V0SW5mbywgSUFwcENvbmZpZyB9IGZyb20gJ0BzY2huZWlkZXJlc3Mvd2lkZ2V0ZnJhbWV3b3JrJztcclxuaW1wb3J0IHsgTmd4VWlMb2FkZXJTZXJ2aWNlIH0gZnJvbSAnbmd4LXVpLWxvYWRlcic7XHJcbmltcG9ydCB7IE5vdGlmaWVyU2VydmljZSB9IGZyb20gJ2FuZ3VsYXItbm90aWZpZXInO1xyXG5pbXBvcnQgeyBSQVRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAc2NobmVpZGVyZXNzL3JhLWNvbW1vbic7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdyYS1kYXNoYm9hcmQtYXJlYScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3JhLmRhc2hib2FyZC5hcmVhLmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3JhLmRhc2hib2FyZC5hcmVhLmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSQURhc2hib2FyZEFyZWEgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuXHJcblxyXG4gIHB1YmxpYyB3aWRnZXRMaXN0ID0gQXJyYXk8R3JpZHN0ZXJJdGVtPigpO1xyXG4gIHB1YmxpYyBvcHRpb25zOiBHcmlkc3RlckNvbmZpZztcclxuICBwdWJsaWMgZ3JpZGhlaWdodDogbnVtYmVyID0gMzAwO1xyXG5cclxuICBwcml2YXRlIGNvbmlmZ0FkZENsaWNrOiBhbnk7XHJcbiAgcHJpdmF0ZSB3aWRnZXREZWxldGVFdmVudDogYW55O1xyXG4gIHByaXZhdGUgd2lkZ2V0QWRkRXZlbnQ6IGFueTtcclxuICBwcml2YXRlIHdpZGdldExpYnJhcnlEb25lQ2xpY2s6IGFueTtcclxuICBwcml2YXRlIGlzV2lkZ2V0TG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgndXNlci1kYXNoYm9hcmQtaWQnKSB1c2VyRGFzaGJvYXJkSWQ6IG51bWJlcjtcclxuICBASW5wdXQoJ2FyZWEta2V5JykgYXJlYUtleTogc3RyaW5nO1xyXG4gIEBJbnB1dCgnZ2xvYmFsLWZpbHRlcicpIGdsb2JhbEZpbHRlcjogYW55O1xyXG4gIEBJbnB1dCgnZXZlbnQtYnVzJykgcmFEYXNoYm9hcmRFdmVudEJ1czogUkFEYXNoYm9hcmRFdmVudEJ1cztcclxuICBASW5wdXQoJ3dpZGdldC1oZWlnaHQnKSB3aWRnZXRIZWlnaHQ6IG51bWJlciA9IDM7XHJcbiAgQElucHV0KCd3aWRnZXQtd2lkdGgnKSB3aWRnZXRXaWR0aDogbnVtYmVyID0gNTtcclxuICBASW5wdXQoJ2FwcC1jb25maWcnKSBhcHBDb25maWc6IElBcHBDb25maWc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZGFzaGJvYXJkU2VydmljZTogUmFEYXNoYm9hcmRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcclxuICAgIHByaXZhdGUgbmd4U2VydmljZTogTmd4VWlMb2FkZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBSQVRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG5vdGlmaWVyOiBOb3RpZmllclNlcnZpY2UpIHtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5pbml0aWF0ZUdyaWRzdGVyQ29uZmlnKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcblxyXG4gICAgaWYgKHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cyAmJiB0aGlzLmFwcENvbmZpZyAmJiAhdGhpcy5pc1dpZGdldExvYWRlZCkge1xyXG4gICAgICB0aGlzLmlzV2lkZ2V0TG9hZGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5sb2FkV2lkZ2V0cyh0aGlzLnVzZXJEYXNoYm9hcmRJZCwgdGhpcy5hcmVhS2V5KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY2hhbmdlcy5yYURhc2hib2FyZEV2ZW50QnVzICYmIGNoYW5nZXMucmFEYXNoYm9hcmRFdmVudEJ1cy5jdXJyZW50VmFsdWUgIT0gY2hhbmdlcy5yYURhc2hib2FyZEV2ZW50QnVzLnByZXZpb3VzVmFsdWUpIHtcclxuICAgICAgdGhpcy5pbml0aXRhdGVFdmVudEJ1c1N1YnNjcml0aW9ucygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8qKlRvIHNldCBHcmlkc3RlckNvbmZpZyAqL1xyXG4gIHB1YmxpYyBpbml0aWF0ZUdyaWRzdGVyQ29uZmlnKCkge1xyXG4gICAgbGV0IGFyZWFDb250ZXh0ID0gdGhpcztcclxuICAgIC8qKlRvIG92ZXJyaWRlIGRlZmF1bHQgY29uZmlndXJhdGlvbiB2YWx1ZXMgdG8gdGhlIGdyaWRzdGVyIGNvbnRyb2wgKi9cclxuICAgIHRoaXMub3B0aW9ucyA9IEdyaWRzdGVyQ29uZmlnRGVmYXVsdFNldHRpbmdzO1xyXG4gICAgdGhpcy5vcHRpb25zLml0ZW1DaGFuZ2VDYWxsYmFjayA9IGZ1bmN0aW9uIChpdGVtOiBhbnkpIHtcclxuICAgICAgYXJlYUNvbnRleHQuc2V0QXJlYUhlaWdodCgpO1xyXG4gICAgICBhcmVhQ29udGV4dC51cGRhdGVXaWRnZXRzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogVG8gaW5pdGlhdGUgZXZlbnRidXMgc3Vic2N0aXB0aW9ucyAqL1xyXG4gIGluaXRpdGF0ZUV2ZW50QnVzU3Vic2NyaXRpb25zKCkge1xyXG4gICAgdGhpcy53aWRnZXREZWxldGVFdmVudCA9IHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5zdWJzY3JpYmUoUkFFdmVudC5XaWRnZXREZWxldGUpLnN1YnNjcmliZSgoaW5zdGFuY2VJZCkgPT4ge1xyXG4gICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuZGVsZXRlV2lkZ2V0KGluc3RhbmNlSWQsIHRydWUpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMud2lkZ2V0QWRkRXZlbnQgPSB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMuc3Vic2NyaWJlKFJBRXZlbnQuQWRkV2lkZ2V0KS5zdWJzY3JpYmUoKHdpZGdldEluZm8pID0+IHtcclxuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcclxuICAgICAgICB0aGlzLmNvcHlXaWRnZXQod2lkZ2V0SW5mbyk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jb25pZmdBZGRDbGljayA9IHRoaXMucmFEYXNoYm9hcmRFdmVudEJ1cy5zdWJzY3JpYmUoUkFFdmVudC5Db25maWdBZGRDbGljaykuc3Vic2NyaWJlKChlKSA9PiB7XHJcbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5hZGRXaWRnZXQoZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy53aWRnZXRMaWJyYXJ5RG9uZUNsaWNrID0gdGhpcy5yYURhc2hib2FyZEV2ZW50QnVzLnN1YnNjcmliZShSQUV2ZW50LndpZGdldExpYnJhcnlEb25lQ2xpY2spLnN1YnNjcmliZSgod2lkZ2V0TGlzdCkgPT4ge1xyXG4gICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4geyAgICAgICBcclxuICAgICAgICBpZiAod2lkZ2V0TGlzdCkgeyAgICAgICAgXHJcbiAgICAgICAgICAvLyB3aWRnZXRMaXN0LmZvckVhY2god2lkZ2V0SW5mbyA9PiB7XHJcbiAgICAgICAgICAvLyAgIHRoaXMuYWRkV2lkZ2V0KHdpZGdldEluZm8pO1xyXG4gICAgICAgICAgLy8gfSk7XHJcbiAgICAgICAgICB0aGlzLmFkZFdpZGdldExpc3RUb0dyaWRzdGVyKHdpZGdldExpc3QsIDApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHRlbXAgZml4LSByZWN1cnNpdmUgbWV0aG9kIHRvIGl0ZXJhdGUgb3ZlciB0aGUgbGlzdCBvZiBpdGVtc1xyXG4gICAqIGFuZCBhZGQgdGhlbSB0byBncmlkc3RlciBpbiB0aGUgZ2l2ZW4gb3JkZXJcclxuICAgKiBAcGFyYW0gd2lkZ2V0TGlzdCAgLWxpc3Qgb2Ygd2lkZ2V0c1xyXG4gICAqIEBwYXJhbSBpbmRleCAtaW5kZXggb2YgdGhlIGN1cnJlbnQgdmFsdWUgdG8gYmUgYWRkZWRcclxuICAgKi9cclxuICBhZGRXaWRnZXRMaXN0VG9Hcmlkc3Rlcih3aWRnZXRMaXN0OiBhbnksIGluZGV4OiBudW1iZXIpIHtcclxuICAgIGxldCBhcmVhQ29udGV4dCA9IHRoaXM7XHJcbiAgICBsZXQgaW5kZXhWYWwgPSBpbmRleCArIDE7XHJcbiAgICBpZiAoaW5kZXggPiB3aWRnZXRMaXN0Lmxlbmd0aCAtIDEpXHJcbiAgICAgIHJldHVybjtcclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAoaW5kZXggPT0gMCkge1xyXG4gICAgICAgIGFyZWFDb250ZXh0LmFkZFdpZGdldCh3aWRnZXRMaXN0W2luZGV4XSk7XHJcbiAgICAgICAgYXJlYUNvbnRleHQuYWRkV2lkZ2V0TGlzdFRvR3JpZHN0ZXIod2lkZ2V0TGlzdCwgaW5kZXhWYWwpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgYXJlYUNvbnRleHQuYWRkV2lkZ2V0KHdpZGdldExpc3RbaW5kZXhdKTtcclxuICAgICAgICAgIGFyZWFDb250ZXh0LmFkZFdpZGdldExpc3RUb0dyaWRzdGVyKHdpZGdldExpc3QsIGluZGV4VmFsKTtcclxuICAgICAgICB9LCAxMDAwKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jb25pZmdBZGRDbGljaylcclxuICAgICAgdGhpcy5jb25pZmdBZGRDbGljay51bnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGlmICh0aGlzLndpZGdldEFkZEV2ZW50KVxyXG4gICAgICB0aGlzLndpZGdldEFkZEV2ZW50LnVuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgaWYgKHRoaXMud2lkZ2V0RGVsZXRlRXZlbnQpXHJcbiAgICAgIHRoaXMud2lkZ2V0RGVsZXRlRXZlbnQudW5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBpZiAodGhpcy53aWRnZXRMaWJyYXJ5RG9uZUNsaWNrKVxyXG4gICAgICB0aGlzLndpZGdldExpYnJhcnlEb25lQ2xpY2sudW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIC8qKlRvIHVwZGF0ZSBwb3NpdGlvbi9kaW1lbnRpb24gb2YgYWxsIHdpZGdldHMgaW4gdGhlIGFyZWEgKi9cclxuICB1cGRhdGVXaWRnZXRzKCkge1xyXG4gICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLnVwZGF0ZVdpZGdldHModGhpcy5tYXBHcmlkc3Rlckxpc3RUb09iamVjdCh0aGlzLndpZGdldExpc3QpLCB0aGlzLmFwcENvbmZpZykuc3Vic2NyaWJlKHdpZGdldHMgPT4ge1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKiBUbyByZXRyaWV2ZSB3aWRnZXRzIGJhc2VkIG9uIHVzZXJEYXNoYm9hcmRpZCBhbmQgYXJlYSBuYW1lICovXHJcbiAgbG9hZFdpZGdldHModXNlckRhc2hib2FySWQ6IG51bWJlciwgYXJlYUtleTogc3RyaW5nKSB7XHJcbiAgICBsZXQgYXJlYUNvbnRleHQgPSB0aGlzO1xyXG5cclxuICAgIGxldCB3aWRnZXRJbmZvID0gPElXaWRnZXRJbmZvPntcclxuICAgICAgZGFzaGJvYXJkSWQ6IHVzZXJEYXNoYm9hcklkLnRvU3RyaW5nKCksXHJcbiAgICAgIGRhc2hib2FyZEFyZWFLZXk6IGFyZWFLZXlcclxuICAgIH1cclxuICAgIGFyZWFDb250ZXh0LndpZGdldExpc3QgPSBbXTtcclxuICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5nZXRXaWRnZXRzQnlEYXNoYm9hcmRBcmVhKHdpZGdldEluZm8sIHRoaXMuYXBwQ29uZmlnKS5zdWJzY3JpYmUod2lkZ2V0cyA9PiB7XHJcbiAgICAgIGlmICh3aWRnZXRzICYmIHdpZGdldHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGFyZWFDb250ZXh0LndpZGdldExpc3QgPSB0aGlzLm1hcE9iamVjdExpc3RUb0dyaWRzdGVySXRlbUxpc3Qod2lkZ2V0cyk7XHJcbiAgICAgICAgYXJlYUNvbnRleHQuc2V0QXJlYUhlaWdodCgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgLyoqIFRvIHNldCBBcmVhKEdyaWRzdGVyKSBoZWlnaHQgZHluYW1pY2FsbHkgYXMgd2lkZ2V0cyBhcmUgYWRkZWQvcmVtb3ZlZCAqL1xyXG4gIHNldEFyZWFIZWlnaHQoKSB7XHJcbiAgICBsZXQgYXJlYVNjcm9sbEhlaWdodCA9IDA7XHJcbiAgICBsZXQgYXJlYUhlaWdodCA9IDA7XHJcbiAgICBsZXQgY3VyUm93SGVpZ2h0ID0gMDtcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuYXBpKSB7XHJcbiAgICAgIGN1clJvd0hlaWdodCA9IHRoaXMub3B0aW9ucy5hcGkuZ2V0Q3VycmVudFJvd0hlaWdodCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy53aWRnZXRMaXN0LmZvckVhY2goKHQpID0+IHtcclxuICAgICAgbGV0IGN1cnJlbnRIZWlnaHQgPSB0LnkgKyB0LnJvd3M7XHJcbiAgICAgIGlmIChjdXJyZW50SGVpZ2h0ID4gYXJlYVNjcm9sbEhlaWdodCkge1xyXG4gICAgICAgIGFyZWFTY3JvbGxIZWlnaHQgPSBjdXJyZW50SGVpZ2h0O1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjdXJSb3dIZWlnaHQgPT0gMCkge1xyXG4gICAgICAgIGN1cnJlbnRIZWlnaHQgPSB0aGlzLndpZGdldExpc3RbMF0uY3VyUm93SGVpZ2h0O1xyXG4gICAgICB9XHJcbiAgICAgIHQud2lkZ2V0SW5mby5yb3dIZWlnaHQgPSBjdXJSb3dIZWlnaHQ7XHJcbiAgICB9KTtcclxuXHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5hcGkpIHtcclxuICAgICAgYXJlYUhlaWdodCA9IGFyZWFTY3JvbGxIZWlnaHQgKiB0aGlzLm9wdGlvbnMuYXBpLmdldEN1cnJlbnRSb3dIZWlnaHQoKSArIDEwMDtcclxuICAgIH1cclxuICAgIGlmIChhcmVhSGVpZ2h0IDwgNjAwKSB7XHJcbiAgICAgIGFyZWFIZWlnaHQgPSA2MDA7XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZygnZ3JpZCBoZWlnaHQgdmFsdWUgaXMnKTtcclxuICAgIGNvbnNvbGUubG9nKGFyZWFIZWlnaHQpO1xyXG4gICAgdGhpcy5ncmlkaGVpZ2h0ID0gYXJlYUhlaWdodDtcclxuICB9XHJcblxyXG5cclxuICAvKiogVG8gcmVtb3ZlIGEgd2lkZ2V0IGluc3RhbmNlIGZyb20gZGFzaGJvYXJkIGFuZCB0byBzYXZlIGluZm8gaW4gZGF0YWJhc2UgKi9cclxuICBkZWxldGVXaWRnZXQod2lkZ2V0SW5zdGFuY2VJZDogYW55LCBpc2FsZXJ0RGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgbGV0IHdpZGdldCA9IHRoaXMud2lkZ2V0TGlzdC5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgcmV0dXJuIGl0ZW0ud2lkZ2V0SW5mby53aWRnZXRJbnN0YW5jZUlkID09PSB3aWRnZXRJbnN0YW5jZUlkO1xyXG4gICAgfSk7XHJcbiAgICBpZiAod2lkZ2V0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy53aWRnZXRMaXN0LnNwbGljZSh0aGlzLndpZGdldExpc3QuaW5kZXhPZih3aWRnZXRbMF0pLCAxKTtcclxuICAgICAgdGhpcy5zZXRBcmVhSGVpZ2h0KCk7XHJcbiAgICAgIGlmICghaXNhbGVydERpc2FibGVkKSB7XHJcbiAgICAgICAgdGhpcy5ub3RpZmllci5ub3RpZnkoJ3N1Y2Nlc3MnLCBcIiBcIiArIHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoJ1dpZGdldCcpICsgXCIgXCIgKyB3aWRnZXRbMF0ud2lkZ2V0SW5mby53aWRnZXRUaXRsZSArIFwiIFwiICsgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSgnRGVsZXRlZFN1Y2Nlc2Z1bGx5JykgKyBcIiBcIik7XHJcblxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMub3B0aW9ucy5jb21wYWN0VHlwZSA9ICdjb21wYWN0TGVmdCZVcCc7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5hcGkub3B0aW9uc0NoYW5nZWQoKTtcclxuICAgICAgdGhpcy5vcHRpb25zLmNvbXBhY3RUeXBlID0gJ25vbmUnO1xyXG4gICAgICB0aGlzLm9wdGlvbnMuYXBpLm9wdGlvbnNDaGFuZ2VkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIC8qKlRvIGFkZCB3aWRnZXQgaW5zdGFuY2UgdG8gdGhlIGRhdGFiYXNlIHdpdGggdGhlIG5leHQgYXZhaWxhYmxlIHBvc2l0aW9uIGFuZCB0byBtYWtlIGNoYW5nZXMgaW5cclxuICAgKiBkYXNoYm9hcmQgYXJlYS5cclxuICAgKi9cclxuICBhZGRXaWRnZXQoZGF0YTogYW55KSB7XHJcbiAgICBsZXQgd2lkZ2V0aWQgPSBkYXRhLndpZGdldElkO1xyXG4gICAgZGF0YS5oZWlnaHQgPSB0aGlzLndpZGdldEhlaWdodDtcclxuICAgIGRhdGEud2lkdGggPSB0aGlzLndpZGdldFdpZHRoO1xyXG4gICAgZGF0YS5wb3NpdGlvbl94ID0gMDtcclxuICAgIGRhdGEucG9zaXRpb25feSA9IDA7XHJcbiAgICBsZXQgZ3JpZHN0ZXJJdGVtID0gdGhpcy5tYXBPYmplY3RzVG9Hcmlkc3Rlckl0ZW0oZGF0YSk7XHJcblxyXG4gICAgLyoqIHRvIGZpbmQgdGhlIGF2YWlsYWJsZSBwb3NpdGlvbiBpbiBncmlkc3RlciwgdGVtcCBjb21tZW50aW5nIHRoZSBjb2RlLXJldHVybmluZyBoaWdoZXIgeSB2YWx1ZSB0aGFuIG5vcm1hbCAqL1xyXG4gICAgLy8gaWYgKHRoaXMub3B0aW9ucy5hcGkpIHtcclxuICAgIC8vICAgZ3JpZHN0ZXJJdGVtID0gdGhpcy5vcHRpb25zLmFwaS5nZXRGaXJzdFBvc3NpYmxlUG9zaXRpb24oZ3JpZHN0ZXJJdGVtKTtcclxuICAgIC8vIH1cclxuICAgIC8vIGRhdGEucG9zaXRpb25feCA9IGdyaWRzdGVySXRlbS54O1xyXG4gICAgLy8gZGF0YS5wb3NpdGlvbl95ID0gZ3JpZHN0ZXJJdGVtLnk7XHJcbiAgICBkYXRhLmRhc2hib2FyZEFyZWFLZXkgPSB0aGlzLmFyZWFLZXk7XHJcbiAgICBkYXRhLmRhc2hib2FyZElkID0gdGhpcy51c2VyRGFzaGJvYXJkSWQ7XHJcbiAgICB0aGlzLm5neFNlcnZpY2Uuc3RhcnQoKTtcclxuICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5hZGRXaWRnZXQoZGF0YSwgdGhpcy5hcHBDb25maWcpLnN1YnNjcmliZSh3aWRnZXQgPT4ge1xyXG4gICAgICBncmlkc3Rlckl0ZW0gPSB0aGlzLm1hcE9iamVjdHNUb0dyaWRzdGVySXRlbSh3aWRnZXQpO1xyXG4gICAgICB0aGlzLndpZGdldExpc3QucHVzaChncmlkc3Rlckl0ZW0pO1xyXG4gICAgICB0aGlzLnNldEFyZWFIZWlnaHQoKTtcclxuICAgICAgLyoqVG8gc2F2ZSBhZGRlZCB3aWRnZXQgcG9zaXRpb24gaW4gZGIgKi9cclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVXaWRnZXRzKCk7XHJcbiAgICAgIH0sIDEwMDApO1xyXG4gICAgICB0aGlzLnJhRGFzaGJvYXJkRXZlbnRCdXMucHVibGlzaChSQUV2ZW50LldpZGdldEFkZGVkLCB3aWRnZXQpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKiogVG8gYWRkIHdpZGdldCB0byBjdXJyZW50IHdpZGdldCBsaXN0ICxpbnZva2VkIGZyb20gY29weSB3aWRnZXQgd2luZG93Ki9cclxuICBjb3B5V2lkZ2V0KGRhdGE6IGFueSkge1xyXG4gICAgbGV0IGdyaWRzdGVySXRlbSA9IHRoaXMubWFwT2JqZWN0c1RvR3JpZHN0ZXJJdGVtKGRhdGEpO1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5hcGkpIHtcclxuICAgICAgZ3JpZHN0ZXJJdGVtID0gdGhpcy5vcHRpb25zLmFwaS5nZXRGaXJzdFBvc3NpYmxlUG9zaXRpb24oZ3JpZHN0ZXJJdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICBkYXRhLnBvc2l0aW9uX3ggPSBncmlkc3Rlckl0ZW0ueDtcclxuICAgIGRhdGEucG9zaXRpb25feSA9IGdyaWRzdGVySXRlbS55O1xyXG4gICAgZ3JpZHN0ZXJJdGVtID0gdGhpcy5tYXBPYmplY3RzVG9Hcmlkc3Rlckl0ZW0oZGF0YSk7XHJcbiAgICB0aGlzLndpZGdldExpc3QucHVzaChncmlkc3Rlckl0ZW0pO1xyXG4gICAgdGhpcy5zZXRBcmVhSGVpZ2h0KCk7XHJcbiAgfVxyXG5cclxuICAvKipUbyBtYXAgSXdpZGdldEluZm8gb2JqZWN0IHRvIGdyaWRzdGVySXRlbSAqL1xyXG4gIG1hcE9iamVjdHNUb0dyaWRzdGVySXRlbSh3aWRnZXQ6IElXaWRnZXRJbmZvKSB7XHJcbiAgICBsZXQgZ3JpZHN0ZXJJdGVtID0gPEdyaWRzdGVySXRlbT57XHJcbiAgICAgIGNvbHM6IHdpZGdldC53aWR0aCxcclxuICAgICAgcm93czogd2lkZ2V0LmhlaWdodCxcclxuICAgICAgeDogd2lkZ2V0LnBvc2l0aW9uX3gsXHJcbiAgICAgIHk6IHdpZGdldC5wb3NpdGlvbl95LFxyXG4gICAgICB3aWRnZXRJbmZvOiB3aWRnZXRcclxuICAgIH1cclxuICAgIHJldHVybiBncmlkc3Rlckl0ZW07XHJcbiAgfVxyXG5cclxuICBtYXBPYmplY3RMaXN0VG9Hcmlkc3Rlckl0ZW1MaXN0KHdpZGdldExpc3Q6IEFycmF5PElXaWRnZXRJbmZvPikge1xyXG4gICAgbGV0IHdpZGdldEFycmF5ID0gQXJyYXk8R3JpZHN0ZXJJdGVtPigpO1xyXG4gICAgd2lkZ2V0TGlzdC5mb3JFYWNoKHdpZGdldCA9PiB7XHJcbiAgICAgIHdpZGdldEFycmF5LnB1c2godGhpcy5tYXBPYmplY3RzVG9Hcmlkc3Rlckl0ZW0od2lkZ2V0KSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB3aWRnZXRBcnJheTtcclxuICB9XHJcblxyXG4gIG1hcEdyaWRzdGVySXRlbVRvT2JqZWN0KHdpZGdldEl0ZW06IEdyaWRzdGVySXRlbSkge1xyXG4gICAgbGV0IHdpZGdldDogSVdpZGdldEluZm87XHJcbiAgICB3aWRnZXQgPSB3aWRnZXRJdGVtLndpZGdldEluZm87XHJcbiAgICB3aWRnZXQuaGVpZ2h0ID0gd2lkZ2V0SXRlbS5yb3dzO1xyXG4gICAgd2lkZ2V0LndpZHRoID0gd2lkZ2V0SXRlbS5jb2xzO1xyXG4gICAgd2lkZ2V0LnBvc2l0aW9uX3ggPSB3aWRnZXRJdGVtLng7XHJcbiAgICB3aWRnZXQucG9zaXRpb25feSA9IHdpZGdldEl0ZW0ueTtcclxuICAgIHdpZGdldC5yb3dIZWlnaHQgPSB3aWRnZXRJdGVtLmN1clJvd0hlaWdodDtcclxuICAgIHJldHVybiB3aWRnZXQ7XHJcbiAgfVxyXG5cclxuICBtYXBHcmlkc3Rlckxpc3RUb09iamVjdCh3aWRnZXRJdGVtTGlzdDogQXJyYXk8R3JpZHN0ZXJJdGVtPikge1xyXG4gICAgbGV0IHdpZGdldExpc3RBcnJheSA9IEFycmF5PElXaWRnZXRJbmZvPigpO1xyXG4gICAgd2lkZ2V0SXRlbUxpc3QuZm9yRWFjaCh3aWRnZXQgPT4ge1xyXG4gICAgICB3aWRnZXRMaXN0QXJyYXkucHVzaCh0aGlzLm1hcEdyaWRzdGVySXRlbVRvT2JqZWN0KHdpZGdldCkpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gd2lkZ2V0TGlzdEFycmF5O1xyXG4gIH1cclxuXHJcbn0iXX0=