barsa-tiles 2.2.72 → 2.2.74

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 (78) hide show
  1. package/fesm2022/barsa-tiles.mjs +215 -206
  2. package/fesm2022/barsa-tiles.mjs.map +1 -1
  3. package/lib/shellbar/shellbar.component.d.ts +2 -2
  4. package/lib/tiles.service.d.ts +1 -1
  5. package/package.json +3 -5
  6. package/esm2022/barsa-tiles.mjs +0 -5
  7. package/esm2022/lib/action-item/action-item.component.mjs +0 -17
  8. package/esm2022/lib/action-links.pipe.mjs +0 -17
  9. package/esm2022/lib/actions-link/actions-link.component.mjs +0 -50
  10. package/esm2022/lib/app-finder/app-finder.component.mjs +0 -52
  11. package/esm2022/lib/app-finder-app-list/app-finder-app-list.component.mjs +0 -38
  12. package/esm2022/lib/app-finder-group/app-finder-group.component.mjs +0 -41
  13. package/esm2022/lib/app-finder.service.mjs +0 -121
  14. package/esm2022/lib/barsa-pin-app/barsa-pin-app.component.mjs +0 -34
  15. package/esm2022/lib/barsa-shellbar/barsa-shellbar.component.mjs +0 -183
  16. package/esm2022/lib/barsa-tile-group-page/barsa-tile-group-page.component.mjs +0 -85
  17. package/esm2022/lib/barsa-tile-sidebar-page/barsa-tile-sidebar-page.component.mjs +0 -45
  18. package/esm2022/lib/barsa-tiles-routing.module.mjs +0 -58
  19. package/esm2022/lib/barsa-tiles.module.mjs +0 -288
  20. package/esm2022/lib/card-tile/card-tile.component.mjs +0 -34
  21. package/esm2022/lib/change-app-tile/change-app-tile.component.mjs +0 -46
  22. package/esm2022/lib/create-app-group/create-app-group.component.mjs +0 -43
  23. package/esm2022/lib/directives/emptylist.directive.mjs +0 -37
  24. package/esm2022/lib/directives/tile-class.directive.mjs +0 -51
  25. package/esm2022/lib/directives/tile-dynamic-command.directive.mjs +0 -77
  26. package/esm2022/lib/feed-tile/feed-tile.component.mjs +0 -31
  27. package/esm2022/lib/footer-edit-tile/footer-edit-tile.component.mjs +0 -13
  28. package/esm2022/lib/footer-tile/footer-tile.component.mjs +0 -22
  29. package/esm2022/lib/form-app-finder/form-app-finder.component.mjs +0 -96
  30. package/esm2022/lib/form-tile/form-tile.component.mjs +0 -34
  31. package/esm2022/lib/logo-tile/logo-tile.component.mjs +0 -23
  32. package/esm2022/lib/micro-tile-chart-area/micro-tile-chart-area.component.mjs +0 -40
  33. package/esm2022/lib/micro-tile-chart-bar/micro-tile-chart-bar.component.mjs +0 -16
  34. package/esm2022/lib/micro-tile-chart-bullet/micro-tile-chart-bullet.component.mjs +0 -26
  35. package/esm2022/lib/micro-tile-chart-circular/micro-tile-chart-circular.component.mjs +0 -20
  36. package/esm2022/lib/micro-tile-chart-comparison/micro-tile-chart-comparison.component.mjs +0 -31
  37. package/esm2022/lib/micro-tile-chart-line/micro-tile-chart-line.component.mjs +0 -32
  38. package/esm2022/lib/micro-tile-chart-stackbar/micro-tile-chart-stackbar.component.mjs +0 -27
  39. package/esm2022/lib/models/app-tile-footer-section.mjs +0 -2
  40. package/esm2022/lib/models/app-tile-footer.mjs +0 -2
  41. package/esm2022/lib/models/app-tile-group-pin.mjs +0 -2
  42. package/esm2022/lib/models/base-bt-tile-component.mjs +0 -27
  43. package/esm2022/lib/models/base-tile-component.mjs +0 -59
  44. package/esm2022/lib/models/base-tile-setting.mjs +0 -2
  45. package/esm2022/lib/models/feed-tile-setting.mjs +0 -2
  46. package/esm2022/lib/models/index.mjs +0 -14
  47. package/esm2022/lib/models/logo-tile-setting.mjs +0 -2
  48. package/esm2022/lib/models/micro-tile-chart-bullet-setting.mjs +0 -2
  49. package/esm2022/lib/models/news-tile-setting.mjs +0 -2
  50. package/esm2022/lib/models/numeric-tile-setting.mjs +0 -2
  51. package/esm2022/lib/models/profile-tile-setting.mjs +0 -2
  52. package/esm2022/lib/models/tile-setting.mjs +0 -2
  53. package/esm2022/lib/models/user-portal-settings.mjs +0 -2
  54. package/esm2022/lib/news-tile/news-tile.component.mjs +0 -53
  55. package/esm2022/lib/notification-group/notification-group.component.mjs +0 -111
  56. package/esm2022/lib/notification-group-header/notification-group-header.component.mjs +0 -38
  57. package/esm2022/lib/numeric-tile/numeric-tile.component.mjs +0 -64
  58. package/esm2022/lib/pin-tile/pin-tile.component.mjs +0 -110
  59. package/esm2022/lib/pipes/group-tiles.pipe.mjs +0 -32
  60. package/esm2022/lib/pipes/home-group.pipe.mjs +0 -18
  61. package/esm2022/lib/pipes/tile-home-filter.pipe.mjs +0 -29
  62. package/esm2022/lib/pipes/tile-prop.pipe.mjs +0 -51
  63. package/esm2022/lib/popover-app-finder/filter-apps-grouped.pipe.mjs +0 -36
  64. package/esm2022/lib/popover-app-finder/popover-app-finder.component.mjs +0 -102
  65. package/esm2022/lib/profile-tile/profile-tile.component.mjs +0 -34
  66. package/esm2022/lib/report-tile/report-tile.component.mjs +0 -38
  67. package/esm2022/lib/shellbar/shellbar.component.mjs +0 -234
  68. package/esm2022/lib/simple-tile/simple-tile.component.mjs +0 -28
  69. package/esm2022/lib/tile/tile.component.mjs +0 -51
  70. package/esm2022/lib/tile-renderer.directive.mjs +0 -86
  71. package/esm2022/lib/tile-size.directive.mjs +0 -31
  72. package/esm2022/lib/tile-style.directive.mjs +0 -30
  73. package/esm2022/lib/tiles-viewer/tiles-viewer.component.mjs +0 -188
  74. package/esm2022/lib/tiles-viewer-container/tiles-viewer-container.component.mjs +0 -173
  75. package/esm2022/lib/tiles-viewer-group/tiles-viewer-group.component.mjs +0 -91
  76. package/esm2022/lib/tiles-viewer.service.mjs +0 -130
  77. package/esm2022/lib/tiles.service.mjs +0 -614
  78. package/esm2022/public-api.mjs +0 -52
@@ -1,30 +0,0 @@
1
- import { Directive, Input } from '@angular/core';
2
- import { BaseDirective } from 'barsa-novin-ray-core';
3
- import * as i0 from "@angular/core";
4
- export class TileStyleDirective extends BaseDirective {
5
- constructor(_renderer2, _el) {
6
- super(_el);
7
- this._renderer2 = _renderer2;
8
- this._el = _el;
9
- }
10
- ngOnInit() {
11
- super.ngOnInit();
12
- const firstChild = this._el.nativeElement.firstChild;
13
- if (this.backColor && firstChild) {
14
- this._renderer2.setStyle(firstChild, 'background-color', `${this.backColor}`);
15
- this._renderer2.addClass(firstChild, 'customColor');
16
- }
17
- }
18
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TileStyleDirective, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
19
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: TileStyleDirective, selector: "[tileStyle]", inputs: { backColor: "backColor" }, usesInheritance: true, ngImport: i0 }); }
20
- }
21
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TileStyleDirective, decorators: [{
22
- type: Directive,
23
- args: [{
24
- selector: '[tileStyle]',
25
- standalone: false
26
- }]
27
- }], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i0.ElementRef }], propDecorators: { backColor: [{
28
- type: Input
29
- }] } });
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlsZS1zdHlsZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS10aWxlcy9zcmMvbGliL3RpbGUtc3R5bGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUEyQyxNQUFNLGVBQWUsQ0FBQztBQUN0RyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7O0FBTXJELE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxhQUFhO0lBR2pELFlBQW9CLFVBQXFCLEVBQVksR0FBZTtRQUNoRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFESyxlQUFVLEdBQVYsVUFBVSxDQUFXO1FBQVksUUFBRyxHQUFILEdBQUcsQ0FBWTtJQUVwRSxDQUFDO0lBRUQsUUFBUTtRQUNKLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUM7UUFDckQsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxrQkFBa0IsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1lBQzlFLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUN4RCxDQUFDO0lBQ0wsQ0FBQzsrR0FkUSxrQkFBa0I7bUdBQWxCLGtCQUFrQjs7NEZBQWxCLGtCQUFrQjtrQkFKOUIsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsYUFBYTtvQkFDdkIsVUFBVSxFQUFFLEtBQUs7aUJBQ3BCO3VHQUVZLFNBQVM7c0JBQWpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQmFzZURpcmVjdGl2ZSB9IGZyb20gJ2JhcnNhLW5vdmluLXJheS1jb3JlJztcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gICAgc2VsZWN0b3I6ICdbdGlsZVN0eWxlXScsXHJcbiAgICBzdGFuZGFsb25lOiBmYWxzZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGlsZVN0eWxlRGlyZWN0aXZlIGV4dGVuZHMgQmFzZURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG4gICAgQElucHV0KCkgYmFja0NvbG9yOiBzdHJpbmc7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfcmVuZGVyZXIyOiBSZW5kZXJlcjIsIHByb3RlY3RlZCBfZWw6IEVsZW1lbnRSZWYpIHtcclxuICAgICAgICBzdXBlcihfZWwpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICAgICAgY29uc3QgZmlyc3RDaGlsZCA9IHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQuZmlyc3RDaGlsZDtcclxuICAgICAgICBpZiAodGhpcy5iYWNrQ29sb3IgJiYgZmlyc3RDaGlsZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlcjIuc2V0U3R5bGUoZmlyc3RDaGlsZCwgJ2JhY2tncm91bmQtY29sb3InLCBgJHt0aGlzLmJhY2tDb2xvcn1gKTtcclxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIyLmFkZENsYXNzKGZpcnN0Q2hpbGQsICdjdXN0b21Db2xvcicpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXX0=
@@ -1,188 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, HostBinding, Input, Output, ViewChild } from '@angular/core';
2
- import { BaseComponent, BarsaApi, IntersectionStatus, fromIntersectionObserver } from 'barsa-novin-ray-core';
3
- import { takeUntil } from 'rxjs';
4
- import { IconTabBarComponent } from '@fundamental-ngx/platform';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "barsa-novin-ray-core";
7
- import * as i2 from "@angular/cdk/scrolling";
8
- import * as i3 from "@fundamental-ngx/core/bar";
9
- import * as i4 from "@fundamental-ngx/core/button";
10
- import * as i5 from "@fundamental-ngx/core/dynamic-page";
11
- import * as i6 from "@fundamental-ngx/core/form";
12
- import * as i7 from "@fundamental-ngx/core/switch";
13
- import * as i8 from "@fundamental-ngx/core/toolbar";
14
- import * as i9 from "@fundamental-ngx/platform";
15
- import * as i10 from "../tiles-viewer-group/tiles-viewer-group.component";
16
- export class TilesViewerComponent extends BaseComponent {
17
- constructor(_cdr, _saveScrollPosition) {
18
- super();
19
- this._cdr = _cdr;
20
- this._saveScrollPosition = _saveScrollPosition;
21
- this.pageContentClass = true;
22
- this.stackContentChange = new EventEmitter();
23
- this.closeEditHome = new EventEmitter();
24
- this.save = new EventEmitter();
25
- this.listDropped = new EventEmitter();
26
- this.tabChanged = new EventEmitter();
27
- this.toggleGroup = new EventEmitter();
28
- this.resetGroup = new EventEmitter();
29
- this.deleteGroup = new EventEmitter();
30
- this.hideAppTileClick = new EventEmitter();
31
- this.renameAppTileClick = new EventEmitter();
32
- this.tilesDropped = new EventEmitter();
33
- this._rtl = BarsaApi.LoginFormData.IsRtl;
34
- this.color = 'default';
35
- this.id = 'tilesviewer';
36
- }
37
- ngOnInit() {
38
- super.ngOnInit();
39
- if (this.contentPageRef) {
40
- const elDom = this.contentPageRef.nativeElement;
41
- elDom.addEventListener('scroll', () => {
42
- this._saveScrollPosition.setScrollPosition(this.id, elDom.scrollTop);
43
- });
44
- this._tilesIntersection = fromIntersectionObserver(elDom, {
45
- root: null,
46
- rootMargin: '0px',
47
- threshold: 0
48
- }, 0, false)
49
- .pipe(takeUntil(this._onDestroy$))
50
- .subscribe((e) => {
51
- this._onInView(e);
52
- });
53
- }
54
- }
55
- ngAfterViewInit() {
56
- super.ngAfterViewInit();
57
- if (this.tabListComponent) {
58
- this.tabListComponent._disableScrollSpy = true;
59
- }
60
- }
61
- onSelectedTabChange(selectedTab) {
62
- let firstSelected = false;
63
- if (!this.selectedTabTitle) {
64
- firstSelected = true;
65
- }
66
- const selectedTabTitle = selectedTab.label || '';
67
- this.selectedTabTitle = selectedTabTitle;
68
- if (firstSelected) {
69
- const tab = this.appTileGroups.find((c) => c.Id === this.defaultTab);
70
- if (tab) {
71
- if (!this.tabListComponent) {
72
- setTimeout(() => {
73
- this._selectTab(tab.Id);
74
- });
75
- }
76
- else {
77
- this._selectTab(tab.Id);
78
- }
79
- return;
80
- }
81
- }
82
- setTimeout(() => {
83
- this.tabChanged.emit({
84
- firstSelected,
85
- selectedTabTitle,
86
- tabPanels: this.tabListComponent.children(),
87
- appTileGroups: this.appTileGroups,
88
- tabbarComponent: this.tabListComponent
89
- });
90
- });
91
- }
92
- onDropGroup(appTileGroups, event) {
93
- if (!this.edit) {
94
- return;
95
- }
96
- this.listDropped.emit({ appTileGroups, event });
97
- }
98
- onDrop($event) {
99
- this.tilesDropped.emit($event);
100
- }
101
- onStackContentChanged(checked) {
102
- this.stackContentChange.emit(checked);
103
- }
104
- onExitEditHome(appGroups) {
105
- this.save.emit(appGroups);
106
- }
107
- onCloseEditHome() {
108
- this.closeEditHome.emit();
109
- }
110
- _trackById(index, item) {
111
- return item ? item.Id : index;
112
- }
113
- _selectTab(tabId) {
114
- if (this.tabListComponent) {
115
- this.tabListComponent.selectTab(tabId);
116
- }
117
- }
118
- _onInView(e) {
119
- this.formVisibilityStatus = e;
120
- if (this.formVisibilityStatus === IntersectionStatus.Visible) {
121
- const scrollTop = this._saveScrollPosition.getScrollPosition(this.id);
122
- // window.scrollTo({ top: scrollTop, behavior: 'smooth' });
123
- this.contentPageRef.nativeElement.scrollTop = scrollTop;
124
- // this._cdr.detectChanges();
125
- }
126
- }
127
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TilesViewerComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.SaveScrollPositionService }], target: i0.ɵɵFactoryTarget.Component }); }
128
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: TilesViewerComponent, selector: "bt-tiles-viewer", inputs: { appTileGroups: "appTileGroups", loading: "loading", edit: "edit", rtl: "rtl", defaultTab: "defaultTab", stackContent: "stackContent", deviceSize: "deviceSize", selectedAppGroupId: "selectedAppGroupId", hideTabs: "hideTabs", DynamicComponents: "DynamicComponents" }, outputs: { stackContentChange: "stackContentChange", closeEditHome: "closeEditHome", save: "save", listDropped: "listDropped", tabChanged: "tabChanged", toggleGroup: "toggleGroup", resetGroup: "resetGroup", deleteGroup: "deleteGroup", hideAppTileClick: "hideAppTileClick", renameAppTileClick: "renameAppTileClick", tilesDropped: "tilesDropped" }, host: { properties: { "class.page-content": "this.pageContentClass", "attr.rtl": "this._rtl" } }, viewQueries: [{ propertyName: "tabListComponent", first: true, predicate: IconTabBarComponent, descendants: true }, { propertyName: "contentPageRef", first: true, predicate: ["contentPage"], descendants: true, read: ElementRef, static: true }], usesInheritance: true, ngImport: i0, template: "<fd-dynamic-page size=\"large\" [autoResponsive]=\"true\" [class.hideTabs]=\"hideTabs\">\r\n <fd-dynamic-page-header [class.hide]=\"!edit\" [title]=\"'HomeEdit' | bbbTranslate\">\r\n <fd-dynamic-page-global-actions>\r\n <fd-toolbar fdType=\"transparent\" [clearBorder]=\"true\">\r\n <label fd-form-label fd-toolbar-item>Stacked Content </label>\r\n <fd-switch\r\n fd-toolbar-item\r\n [checked]=\"stackContent\"\r\n (checkedChange)=\"onStackContentChanged($event)\"\r\n ></fd-switch>\r\n </fd-toolbar>\r\n </fd-dynamic-page-global-actions>\r\n <fd-dynamic-page-layout-actions>\r\n <fd-toolbar fdType=\"transparent\" [clearBorder]=\"true\">\r\n <button fd-button fdType=\"transparent\" aria-label=\"Close\" title=\"Close\" (click)=\"onCloseEditHome()\">\r\n <i class=\"sap-icon--decline\"></i>\r\n </button>\r\n </fd-toolbar>\r\n </fd-dynamic-page-layout-actions>\r\n </fd-dynamic-page-header>\r\n\r\n <fdp-icon-tab-bar\r\n [stackContent]=\"stackContent\"\r\n maxContentHeight=\"auto\"\r\n ariaRoledescription=\"Tiles Container\"\r\n (iconTabSelected)=\"onSelectedTabChange($event)\"\r\n >\r\n @for (appTileGroup of appTileGroups; track _trackById(i, appTileGroup); let i = $index) { @if (edit ||\r\n appTileGroup.navigatorVisible) {\r\n\r\n <fdp-icon-tab-bar-tab\r\n [id]=\"appTileGroup.Id\"\r\n [color]=\"color\"\r\n [label]=\"appTileGroup.navigatorTitle | bbbTranslate\"\r\n [title]=\"appTileGroup.navigatorTitle | bbbTranslate\"\r\n >\r\n <fd-dynamic-page-content [id]=\"appTileGroup.Id\" cdkScrollable>\r\n <bt-tiles-viewer-group\r\n [class]=\"deviceSize\"\r\n [appTileGroup]=\"appTileGroup\"\r\n [edit]=\"edit\"\r\n [rtl]=\"rtl\"\r\n [cssStyle]=\"appTileGroup.CssStyles\"\r\n [deviceSize]=\"deviceSize\"\r\n [stackContent]=\"stackContent\"\r\n [isAppTileSubGroup]=\"(false || hideTabs) && i>0\"\r\n (tilesDropped)=\"onDrop($event)\"\r\n (renameAppTileClick)=\"renameAppTileClick.emit($event)\"\r\n (hideAppTileClick)=\"hideAppTileClick.emit($event)\"\r\n (resetGroup)=\"resetGroup.emit($event)\"\r\n (deleteGroup)=\"deleteGroup.emit($event)\"\r\n (toggleGroup)=\"toggleGroup.emit($event)\"\r\n ></bt-tiles-viewer-group>\r\n </fd-dynamic-page-content>\r\n </fdp-icon-tab-bar-tab>\r\n\r\n } }\r\n </fdp-icon-tab-bar>\r\n\r\n <fd-dynamic-page-footer>\r\n @if (edit) {\r\n <div fd-bar barDesign=\"footer\">\r\n <div fd-bar-right>\r\n <fd-button-bar\r\n [label]=\"'SaveAndClose' | bbbTranslate\"\r\n fdType=\"emphasized\"\r\n (click)=\"onExitEditHome(appTileGroups)\"\r\n ></fd-button-bar>\r\n </div>\r\n </div>\r\n }\r\n </fd-dynamic-page-footer>\r\n</fd-dynamic-page>\r\n", styles: [":host{display:block}:host ::ng-deep .fd-panel__header{border:none;padding-left:0;padding-right:0}:host ::ng-deep fd-panel[edithome=false] .fd-panel__header:first-child{display:none}:host ::ng-deep .fd-panel__content{border-bottom:none;padding:1px}:host ::ng-deep fd-tab-list[noSpy] .fd-tabs__content{overflow-y:initial}:host ::ng-deep fd-dynamic-page article{height:calc(100vh - 44px)!important}:host ::ng-deep .footer-spacer{height:0}.fd-tabs__panel:not(.is-expanded){display:none}fd-dynamic-page.stack-mode fd-dynamic-page-content{overflow-y:hidden}fd-dynamic-page.hideTabs ::ng-deep fdp-icon-tab-bar-text-type{display:none}@media (max-width: 599px){bnrc-dynamic-component{margin-right:0!important;margin-left:0!important}}\n"], dependencies: [{ kind: "directive", type: i2.CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }, { kind: "component", type: i3.BarComponent, selector: "[fd-bar]", inputs: ["class", "barDesign", "inPage", "inHomePage", "size"] }, { kind: "directive", type: i3.BarRightDirective, selector: "[fd-bar-right]" }, { kind: "component", type: i3.ButtonBarComponent, selector: "fd-button-bar", inputs: ["fullWidth", "fdType", "title", "ariaLabelledby", "id"] }, { kind: "component", type: i4.ButtonComponent, selector: "button[fd-button], a[fd-button], span[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i5.DynamicPageComponent, selector: "fd-dynamic-page", inputs: ["disableSnapOnScroll", "ariaLabel", "ariaRoledescription", "background", "autoResponsive", "size", "offset", "expandContent", "positionRelative"] }, { kind: "component", type: i5.DynamicPageHeaderComponent, selector: "fd-dynamic-page-header", inputs: ["title", "titleWrap", "subtitle", "subtitleWrap", "headingLevel", "titleId"] }, { kind: "component", type: i5.DynamicPageGlobalActionsComponent, selector: "fd-dynamic-page-global-actions" }, { kind: "component", type: i5.DynamicPageLayoutActionsComponent, selector: "fd-dynamic-page-layout-actions" }, { kind: "component", type: i5.DynamicPageContentComponent, selector: "fd-dynamic-page-content", inputs: ["tabLabel", "id"] }, { kind: "component", type: i5.DynamicPageFooterComponent, selector: "fd-dynamic-page-footer" }, { kind: "component", type: i6.FormLabelComponent, selector: "[fd-form-label]", inputs: ["required", "colon", "alignLabelEnd", "inlineHelpContent", "inlineHelpGlyph", "inlineHelpTriggers", "inlineHelpBodyPlacement", "inlineHelpPlacement", "allowWrap", "inlineHelpLabel", "id"] }, { kind: "component", type: i7.SwitchComponent, selector: "fd-switch", inputs: ["activeText", "inactiveText", "id", "required", "checked", "semantic", "ariaLabel", "ariaLabelledBy"], outputs: ["checkedChange"] }, { kind: "component", type: i8.ToolbarComponent, selector: "fd-toolbar", inputs: ["titleId", "class", "shouldOverflow", "fdType", "title", "active", "clearBorder", "forceOverflow", "tabindex", "headingLevel", "ariaLabel", "ariaLabelledBy"] }, { kind: "directive", type: i8.ToolbarItemDirective, selector: "[fd-toolbar-item], [fdOverflowGroup], [fdOverflowPriority]", inputs: ["fdOverflowPriority", "fdOverflowGroup"] }, { kind: "directive", type: i1.DynamicStyleDirective, selector: "[cssStyle]", inputs: ["cssStyle"] }, { kind: "component", type: i9.IconTabBarComponent, selector: "fdp-icon-tab-bar", inputs: ["stackContent", "iconTabType", "tabsConfig", "densityMode", "iconTabFont", "enableTabReordering", "showTotalTab", "multiClick", "layoutMode", "iconTabBackground", "iconTabSize", "colorAssociations", "maxContentHeight"], outputs: ["tabsConfigChange", "densityModeChange", "iconTabSelected", "iconTabReordered", "closeTab"] }, { kind: "component", type: i9.IconTabBarTabComponent, selector: "fdp-icon-tab-bar-tab", inputs: ["label", "color", "icon", "iconFont", "counter", "active", "badge", "closable", "id"] }, { kind: "component", type: i10.TilesViewerGroupComponent, selector: "bt-tiles-viewer-group", inputs: ["appTileGroup", "stackContent", "edit", "rtl", "isAppTileSubGroup", "deviceSize", "isLast"], outputs: ["tilesDropped", "hideAppTileClick", "renameAppTileClick", "toggleGroup", "resetGroup", "deleteGroup"] }, { kind: "pipe", type: i1.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
129
- }
130
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TilesViewerComponent, decorators: [{
131
- type: Component,
132
- args: [{ selector: 'bt-tiles-viewer', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<fd-dynamic-page size=\"large\" [autoResponsive]=\"true\" [class.hideTabs]=\"hideTabs\">\r\n <fd-dynamic-page-header [class.hide]=\"!edit\" [title]=\"'HomeEdit' | bbbTranslate\">\r\n <fd-dynamic-page-global-actions>\r\n <fd-toolbar fdType=\"transparent\" [clearBorder]=\"true\">\r\n <label fd-form-label fd-toolbar-item>Stacked Content </label>\r\n <fd-switch\r\n fd-toolbar-item\r\n [checked]=\"stackContent\"\r\n (checkedChange)=\"onStackContentChanged($event)\"\r\n ></fd-switch>\r\n </fd-toolbar>\r\n </fd-dynamic-page-global-actions>\r\n <fd-dynamic-page-layout-actions>\r\n <fd-toolbar fdType=\"transparent\" [clearBorder]=\"true\">\r\n <button fd-button fdType=\"transparent\" aria-label=\"Close\" title=\"Close\" (click)=\"onCloseEditHome()\">\r\n <i class=\"sap-icon--decline\"></i>\r\n </button>\r\n </fd-toolbar>\r\n </fd-dynamic-page-layout-actions>\r\n </fd-dynamic-page-header>\r\n\r\n <fdp-icon-tab-bar\r\n [stackContent]=\"stackContent\"\r\n maxContentHeight=\"auto\"\r\n ariaRoledescription=\"Tiles Container\"\r\n (iconTabSelected)=\"onSelectedTabChange($event)\"\r\n >\r\n @for (appTileGroup of appTileGroups; track _trackById(i, appTileGroup); let i = $index) { @if (edit ||\r\n appTileGroup.navigatorVisible) {\r\n\r\n <fdp-icon-tab-bar-tab\r\n [id]=\"appTileGroup.Id\"\r\n [color]=\"color\"\r\n [label]=\"appTileGroup.navigatorTitle | bbbTranslate\"\r\n [title]=\"appTileGroup.navigatorTitle | bbbTranslate\"\r\n >\r\n <fd-dynamic-page-content [id]=\"appTileGroup.Id\" cdkScrollable>\r\n <bt-tiles-viewer-group\r\n [class]=\"deviceSize\"\r\n [appTileGroup]=\"appTileGroup\"\r\n [edit]=\"edit\"\r\n [rtl]=\"rtl\"\r\n [cssStyle]=\"appTileGroup.CssStyles\"\r\n [deviceSize]=\"deviceSize\"\r\n [stackContent]=\"stackContent\"\r\n [isAppTileSubGroup]=\"(false || hideTabs) && i>0\"\r\n (tilesDropped)=\"onDrop($event)\"\r\n (renameAppTileClick)=\"renameAppTileClick.emit($event)\"\r\n (hideAppTileClick)=\"hideAppTileClick.emit($event)\"\r\n (resetGroup)=\"resetGroup.emit($event)\"\r\n (deleteGroup)=\"deleteGroup.emit($event)\"\r\n (toggleGroup)=\"toggleGroup.emit($event)\"\r\n ></bt-tiles-viewer-group>\r\n </fd-dynamic-page-content>\r\n </fdp-icon-tab-bar-tab>\r\n\r\n } }\r\n </fdp-icon-tab-bar>\r\n\r\n <fd-dynamic-page-footer>\r\n @if (edit) {\r\n <div fd-bar barDesign=\"footer\">\r\n <div fd-bar-right>\r\n <fd-button-bar\r\n [label]=\"'SaveAndClose' | bbbTranslate\"\r\n fdType=\"emphasized\"\r\n (click)=\"onExitEditHome(appTileGroups)\"\r\n ></fd-button-bar>\r\n </div>\r\n </div>\r\n }\r\n </fd-dynamic-page-footer>\r\n</fd-dynamic-page>\r\n", styles: [":host{display:block}:host ::ng-deep .fd-panel__header{border:none;padding-left:0;padding-right:0}:host ::ng-deep fd-panel[edithome=false] .fd-panel__header:first-child{display:none}:host ::ng-deep .fd-panel__content{border-bottom:none;padding:1px}:host ::ng-deep fd-tab-list[noSpy] .fd-tabs__content{overflow-y:initial}:host ::ng-deep fd-dynamic-page article{height:calc(100vh - 44px)!important}:host ::ng-deep .footer-spacer{height:0}.fd-tabs__panel:not(.is-expanded){display:none}fd-dynamic-page.stack-mode fd-dynamic-page-content{overflow-y:hidden}fd-dynamic-page.hideTabs ::ng-deep fdp-icon-tab-bar-text-type{display:none}@media (max-width: 599px){bnrc-dynamic-component{margin-right:0!important;margin-left:0!important}}\n"] }]
133
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.SaveScrollPositionService }], propDecorators: { tabListComponent: [{
134
- type: ViewChild,
135
- args: [IconTabBarComponent]
136
- }], contentPageRef: [{
137
- type: ViewChild,
138
- args: ['contentPage', { static: true, read: ElementRef }]
139
- }], pageContentClass: [{
140
- type: HostBinding,
141
- args: ['class.page-content']
142
- }], appTileGroups: [{
143
- type: Input
144
- }], loading: [{
145
- type: Input
146
- }], edit: [{
147
- type: Input
148
- }], rtl: [{
149
- type: Input
150
- }], defaultTab: [{
151
- type: Input
152
- }], stackContent: [{
153
- type: Input
154
- }], deviceSize: [{
155
- type: Input
156
- }], selectedAppGroupId: [{
157
- type: Input
158
- }], hideTabs: [{
159
- type: Input
160
- }], DynamicComponents: [{
161
- type: Input
162
- }], stackContentChange: [{
163
- type: Output
164
- }], closeEditHome: [{
165
- type: Output
166
- }], save: [{
167
- type: Output
168
- }], listDropped: [{
169
- type: Output
170
- }], tabChanged: [{
171
- type: Output
172
- }], toggleGroup: [{
173
- type: Output
174
- }], resetGroup: [{
175
- type: Output
176
- }], deleteGroup: [{
177
- type: Output
178
- }], hideAppTileClick: [{
179
- type: Output
180
- }], renameAppTileClick: [{
181
- type: Output
182
- }], tilesDropped: [{
183
- type: Output
184
- }], _rtl: [{
185
- type: HostBinding,
186
- args: ['attr.rtl']
187
- }] } });
188
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlsZXMtdmlld2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLXRpbGVzL3NyYy9saWIvdGlsZXMtdmlld2VyL3RpbGVzLXZpZXdlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS10aWxlcy9zcmMvbGliL3RpbGVzLXZpZXdlci90aWxlcy12aWV3ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNILHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUNILGFBQWEsRUFFYixRQUFRLEVBR1Isa0JBQWtCLEVBQ2xCLHdCQUF3QixFQUMzQixNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakMsT0FBTyxFQUFFLG1CQUFtQixFQUF5RCxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7Ozs7Ozs7QUFTdkgsTUFBTSxPQUFPLG9CQUFxQixTQUFRLGFBQWE7SUErQ25ELFlBQXNCLElBQXVCLEVBQVksbUJBQThDO1FBQ25HLEtBQUssRUFBRSxDQUFDO1FBRFUsU0FBSSxHQUFKLElBQUksQ0FBbUI7UUFBWSx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQTJCO1FBNUNwRSxxQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFZakQsdUJBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUNqRCxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDbkMsU0FBSSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDMUIsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFHcEMsQ0FBQztRQUNLLGVBQVUsR0FBRyxJQUFJ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O2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csSUFBSTtzQkFBYixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBSUcsVUFBVTtzQkFBbkIsTUFBTTtnQkFRRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUVHLFlBQVk7c0JBQXJCLE1BQU07Z0JBS2tCLElBQUk7c0JBQTVCLFdBQVc7dUJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENka0RyYWdEcm9wIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XHJcbmltcG9ydCB7XHJcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICAgIENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgRWxlbWVudFJlZixcclxuICAgIEV2ZW50RW1pdHRlcixcclxuICAgIEhvc3RCaW5kaW5nLFxyXG4gICAgSW5wdXQsXHJcbiAgICBPbkluaXQsXHJcbiAgICBPdXRwdXQsXHJcbiAgICBWaWV3Q2hpbGRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7XHJcbiAgICBCYXNlQ29tcG9uZW50LFxyXG4gICAgTWV0YW9iamVjdERhdGFNb2RlbCxcclxuICAgIEJhcnNhQXBpLFxyXG4gICAgQWJicmV2YXRpb25EZXZpY2VTaXplLFxyXG4gICAgU2F2ZVNjcm9sbFBvc2l0aW9uU2VydmljZSxcclxuICAgIEludGVyc2VjdGlvblN0YXR1cyxcclxuICAgIGZyb21JbnRlcnNlY3Rpb25PYnNlcnZlclxyXG59IGZyb20gJ2JhcnNhLW5vdmluLXJheS1jb3JlJztcclxuaW1wb3J0IHsgTnVsbGFibGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgSWNvblRhYkJhckNvbXBvbmVudCwgSWNvblRhYkJhckl0ZW0sIEljb25UYWJCYXJUYWJDb21wb25lbnQsIFNlbWFudGljQ29sb3IgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdidC10aWxlcy12aWV3ZXInLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RpbGVzLXZpZXdlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi90aWxlcy12aWV3ZXIuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gICAgc3RhbmRhbG9uZTogZmFsc2VcclxufSlcclxuZXhwb3J0IGNsYXNzIFRpbGVzVmlld2VyQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBAVmlld0NoaWxkKEljb25UYWJCYXJDb21wb25lbnQpIHRhYkxpc3RDb21wb25lbnQ6IEljb25UYWJCYXJDb21wb25lbnQ7XHJcbiAgICBAVmlld0NoaWxkKCdjb250ZW50UGFnZScsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBFbGVtZW50UmVmIH0pIGNvbnRlbnRQYWdlUmVmOiBFbGVtZW50UmVmPGFueT47XHJcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnBhZ2UtY29udGVudCcpIHBhZ2VDb250ZW50Q2xhc3MgPSB0cnVlO1xyXG4gICAgQElucHV0KCkgYXBwVGlsZUdyb3VwczogQXJyYXk8TWV0YW9iamVjdERhdGFNb2RlbD47XHJcbiAgICBASW5wdXQoKSBsb2FkaW5nOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgZWRpdDogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIHJ0bDogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIGRlZmF1bHRUYWI6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIHN0YWNrQ29udGVudDogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIGRldmljZVNpemU6IEFiYnJldmF0aW9uRGV2aWNlU2l6ZTtcclxuICAgIEBJbnB1dCgpIHNlbGVjdGVkQXBwR3JvdXBJZDogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgaGlkZVRhYnM6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XHJcbiAgICBASW5wdXQoKSBEeW5hbWljQ29tcG9uZW50czogYW55O1xyXG5cclxuICAgIEBPdXRwdXQoKSBzdGFja0NvbnRlbnRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcbiAgICBAT3V0cHV0KCkgY2xvc2VFZGl0SG9tZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoKSBzYXZlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgQE91dHB1dCgpIGxpc3REcm9wcGVkID0gbmV3IEV2ZW50RW1pdHRlcjx7XHJcbiAgICAgICAgYXBwVGlsZUdyb3VwczogTWV0YW9iamVjdERhdGFNb2RlbFtdO1xyXG4gICAgICAgIGV2ZW50OiBDZGtEcmFnRHJvcDxNZXRhb2JqZWN0RGF0YU1vZGVsW10+O1xyXG4gICAgfT4oKTtcclxuICAgIEBPdXRwdXQoKSB0YWJDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjx7XHJcbiAgICAgICAgZmlyc3RTZWxlY3RlZDogYm9vbGVhbjtcclxuICAgICAgICBzZWxlY3RlZFRhYlRpdGxlOiBzdHJpbmc7XHJcbiAgICAgICAgdGFiUGFuZWxzOiBJY29uVGFiQmFyVGFiQ29tcG9uZW50W107XHJcbiAgICAgICAgYXBwVGlsZUdyb3VwczogTWV0YW9iamVjdERhdGFNb2RlbFtdO1xyXG4gICAgICAgIHRhYmJhckNvbXBvbmVudDogSWNvblRhYkJhckNvbXBvbmVudDtcclxuICAgIH0+KCk7XHJcblxyXG4gICAgQE91dHB1dCgpIHRvZ2dsZUdyb3VwID0gbmV3IEV2ZW50RW1pdHRlcjxNZXRhb2JqZWN0RGF0YU1vZGVsPigpO1xyXG4gICAgQE91dHB1dCgpIHJlc2V0R3JvdXAgPSBuZXcgRXZlbnRFbWl0dGVyPE1ldGFvYmplY3REYXRhTW9kZWw+KCk7XHJcbiAgICBAT3V0cHV0KCkgZGVsZXRlR3JvdXAgPSBuZXcgRXZlbnRFbWl0dGVyPE1ldGFvYmplY3REYXRhTW9kZWw+KCk7XHJcbiAgICBAT3V0cHV0KCkgaGlkZUFwcFRpbGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8TWV0YW9iamVjdERhdGFNb2RlbD4oKTtcclxuICAgIEBPdXRwdXQoKSByZW5hbWVBcHBUaWxlQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPE1ldGFvYmplY3REYXRhTW9kZWw+KCk7XHJcblxyXG4gICAgQE91dHB1dCgpIHRpbGVzRHJvcHBlZCA9IG5ldyBFdmVudEVtaXR0ZXI8e1xyXG4gICAgICAgIGFwcFRpbGVHcm91cDogTWV0YW9iamVjdERhdGFNb2RlbDtcclxuICAgICAgICBldmVudDogQ2RrRHJhZ0Ryb3A8eyBpc1RpbGU6IGJvb2xlYW47IGl0ZW1zOiBNZXRhb2JqZWN0RGF0YU1vZGVsW10gfT47XHJcbiAgICB9PigpO1xyXG5cclxuICAgIEBIb3N0QmluZGluZygnYXR0ci5ydGwnKSBfcnRsID0gQmFyc2FBcGkuTG9naW5Gb3JtRGF0YS5Jc1J0bDtcclxuICAgIHNlbGVjdGVkVGFiVGl0bGU6IE51bGxhYmxlPHN0cmluZz47XHJcbiAgICBzZWxlY3RlZFRhYklkOiBzdHJpbmc7XHJcbiAgICBfdGlsZXNJbnRlcnNlY3Rpb246IGFueTtcclxuICAgIGZvcm1WaXNpYmlsaXR5U3RhdHVzOiBJbnRlcnNlY3Rpb25TdGF0dXM7XHJcbiAgICBjb2xvcjogU2VtYW50aWNDb2xvciA9ICdkZWZhdWx0JztcclxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBfY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJvdGVjdGVkIF9zYXZlU2Nyb2xsUG9zaXRpb246IFNhdmVTY3JvbGxQb3NpdGlvblNlcnZpY2UpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgfVxyXG4gICAgaWQgPSAndGlsZXN2aWV3ZXInO1xyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29udGVudFBhZ2VSZWYpIHtcclxuICAgICAgICAgICAgY29uc3QgZWxEb20gPSB0aGlzLmNvbnRlbnRQYWdlUmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGVsRG9tLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NhdmVTY3JvbGxQb3NpdGlvbi5zZXRTY3JvbGxQb3NpdGlvbih0aGlzLmlkLCBlbERvbS5zY3JvbGxUb3ApO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5fdGlsZXNJbnRlcnNlY3Rpb24gPSBmcm9tSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoXHJcbiAgICAgICAgICAgICAgICBlbERvbSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICByb290OiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIHJvb3RNYXJnaW46ICcwcHgnLFxyXG4gICAgICAgICAgICAgICAgICAgIHRocmVzaG9sZDogMFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgICAgICBmYWxzZVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpXHJcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25JblZpZXcoZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICAgICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XHJcbiAgICAgICAgaWYgKHRoaXMudGFiTGlzdENvbXBvbmVudCkge1xyXG4gICAgICAgICAgICB0aGlzLnRhYkxpc3RDb21wb25lbnQuX2Rpc2FibGVTY3JvbGxTcHkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIG9uU2VsZWN0ZWRUYWJDaGFuZ2Uoc2VsZWN0ZWRUYWI6IEljb25UYWJCYXJJdGVtKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IGZpcnN0U2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRUYWJUaXRsZSkge1xyXG4gICAgICAgICAgICBmaXJzdFNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUYWJUaXRsZSA9IChzZWxlY3RlZFRhYi5sYWJlbCBhcyBzdHJpbmcpIHx8ICcnO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJUaXRsZSA9IHNlbGVjdGVkVGFiVGl0bGU7XHJcbiAgICAgICAgaWYgKGZpcnN0U2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgY29uc3QgdGFiID0gdGhpcy5hcHBUaWxlR3JvdXBzLmZpbmQoKGMpID0+IGMuSWQgPT09IHRoaXMuZGVmYXVsdFRhYik7XHJcbiAgICAgICAgICAgIGlmICh0YWIpIHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy50YWJMaXN0Q29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdFRhYih0YWIuSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RUYWIodGFiLklkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy50YWJDaGFuZ2VkLmVtaXQoe1xyXG4gICAgICAgICAgICAgICAgZmlyc3RTZWxlY3RlZCxcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkVGFiVGl0bGUsXHJcbiAgICAgICAgICAgICAgICB0YWJQYW5lbHM6IHRoaXMudGFiTGlzdENvbXBvbmVudC5jaGlsZHJlbigpIGFzIGFueSxcclxuICAgICAgICAgICAgICAgIGFwcFRpbGVHcm91cHM6IHRoaXMuYXBwVGlsZUdyb3VwcyxcclxuICAgICAgICAgICAgICAgIHRhYmJhckNvbXBvbmVudDogdGhpcy50YWJMaXN0Q29tcG9uZW50XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgb25Ecm9wR3JvdXAoYXBwVGlsZUdyb3VwczogTWV0YW9iamVjdERhdGFNb2RlbFtdLCBldmVudDogQ2RrRHJhZ0Ryb3A8TWV0YW9iamVjdERhdGFNb2RlbFtdPik6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5lZGl0KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5saXN0RHJvcHBlZC5lbWl0KHsgYXBwVGlsZUdyb3VwcywgZXZlbnQgfSk7XHJcbiAgICB9XHJcbiAgICBvbkRyb3AoJGV2ZW50KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy50aWxlc0Ryb3BwZWQuZW1pdCgkZXZlbnQpO1xyXG4gICAgfVxyXG4gICAgb25TdGFja0NvbnRlbnRDaGFuZ2VkKGNoZWNrZWQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnN0YWNrQ29udGVudENoYW5nZS5lbWl0KGNoZWNrZWQpO1xyXG4gICAgfVxyXG4gICAgb25FeGl0RWRpdEhvbWUoYXBwR3JvdXBzOiBNZXRhb2JqZWN0RGF0YU1vZGVsW10pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNhdmUuZW1pdChhcHBHcm91cHMpO1xyXG4gICAgfVxyXG4gICAgb25DbG9zZUVkaXRIb21lKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY2xvc2VFZGl0SG9tZS5lbWl0KCk7XHJcbiAgICB9XHJcbiAgICBfdHJhY2tCeUlkKGluZGV4LCBpdGVtKTogc3RyaW5nIHwgbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gaXRlbSA/IGl0ZW0uSWQgOiBpbmRleDtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfc2VsZWN0VGFiKHRhYklkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy50YWJMaXN0Q29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMudGFiTGlzdENvbXBvbmVudC5zZWxlY3RUYWIodGFiSWQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfb25JblZpZXcoZSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZm9ybVZpc2liaWxpdHlTdGF0dXMgPSBlO1xyXG4gICAgICAgIGlmICh0aGlzLmZvcm1WaXNpYmlsaXR5U3RhdHVzID09PSBJbnRlcnNlY3Rpb25TdGF0dXMuVmlzaWJsZSkge1xyXG4gICAgICAgICAgICBjb25zdCBzY3JvbGxUb3AgPSB0aGlzLl9zYXZlU2Nyb2xsUG9zaXRpb24uZ2V0U2Nyb2xsUG9zaXRpb24odGhpcy5pZCk7XHJcbiAgICAgICAgICAgIC8vIHdpbmRvdy5zY3JvbGxUbyh7IHRvcDogc2Nyb2xsVG9wLCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XHJcbiAgICAgICAgICAgICh0aGlzLmNvbnRlbnRQYWdlUmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLnNjcm9sbFRvcCA9IHNjcm9sbFRvcDtcclxuICAgICAgICAgICAgLy8gdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiPGZkLWR5bmFtaWMtcGFnZSBzaXplPVwibGFyZ2VcIiBbYXV0b1Jlc3BvbnNpdmVdPVwidHJ1ZVwiIFtjbGFzcy5oaWRlVGFic109XCJoaWRlVGFic1wiPlxyXG4gICAgPGZkLWR5bmFtaWMtcGFnZS1oZWFkZXIgW2NsYXNzLmhpZGVdPVwiIWVkaXRcIiBbdGl0bGVdPVwiJ0hvbWVFZGl0JyB8IGJiYlRyYW5zbGF0ZVwiPlxyXG4gICAgICAgIDxmZC1keW5hbWljLXBhZ2UtZ2xvYmFsLWFjdGlvbnM+XHJcbiAgICAgICAgICAgIDxmZC10b29sYmFyIGZkVHlwZT1cInRyYW5zcGFyZW50XCIgW2NsZWFyQm9yZGVyXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBmZC1mb3JtLWxhYmVsIGZkLXRvb2xiYXItaXRlbT5TdGFja2VkIENvbnRlbnQgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxmZC1zd2l0Y2hcclxuICAgICAgICAgICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cclxuICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJzdGFja0NvbnRlbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjaGVja2VkQ2hhbmdlKT1cIm9uU3RhY2tDb250ZW50Q2hhbmdlZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgID48L2ZkLXN3aXRjaD5cclxuICAgICAgICAgICAgPC9mZC10b29sYmFyPlxyXG4gICAgICAgIDwvZmQtZHluYW1pYy1wYWdlLWdsb2JhbC1hY3Rpb25zPlxyXG4gICAgICAgIDxmZC1keW5hbWljLXBhZ2UtbGF5b3V0LWFjdGlvbnM+XHJcbiAgICAgICAgICAgIDxmZC10b29sYmFyIGZkVHlwZT1cInRyYW5zcGFyZW50XCIgW2NsZWFyQm9yZGVyXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gZmQtYnV0dG9uIGZkVHlwZT1cInRyYW5zcGFyZW50XCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgdGl0bGU9XCJDbG9zZVwiIChjbGljayk9XCJvbkNsb3NlRWRpdEhvbWUoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwic2FwLWljb24tLWRlY2xpbmVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9mZC10b29sYmFyPlxyXG4gICAgICAgIDwvZmQtZHluYW1pYy1wYWdlLWxheW91dC1hY3Rpb25zPlxyXG4gICAgPC9mZC1keW5hbWljLXBhZ2UtaGVhZGVyPlxyXG5cclxuICAgIDxmZHAtaWNvbi10YWItYmFyXHJcbiAgICAgICAgW3N0YWNrQ29udGVudF09XCJzdGFja0NvbnRlbnRcIlxyXG4gICAgICAgIG1heENvbnRlbnRIZWlnaHQ9XCJhdXRvXCJcclxuICAgICAgICBhcmlhUm9sZWRlc2NyaXB0aW9uPVwiVGlsZXMgQ29udGFpbmVyXCJcclxuICAgICAgICAoaWNvblRhYlNlbGVjdGVkKT1cIm9uU2VsZWN0ZWRUYWJDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICA+XHJcbiAgICAgICAgQGZvciAoYXBwVGlsZUdyb3VwIG9mIGFwcFRpbGVHcm91cHM7IHRyYWNrIF90cmFja0J5SWQoaSwgYXBwVGlsZUdyb3VwKTsgbGV0IGkgPSAkaW5kZXgpIHsgQGlmIChlZGl0IHx8XHJcbiAgICAgICAgYXBwVGlsZUdyb3VwLm5hdmlnYXRvclZpc2libGUpIHtcclxuXHJcbiAgICAgICAgPGZkcC1pY29uLXRhYi1iYXItdGFiXHJcbiAgICAgICAgICAgIFtpZF09XCJhcHBUaWxlR3JvdXAuSWRcIlxyXG4gICAgICAgICAgICBbY29sb3JdPVwiY29sb3JcIlxyXG4gICAgICAgICAgICBbbGFiZWxdPVwiYXBwVGlsZUdyb3VwLm5hdmlnYXRvclRpdGxlIHwgYmJiVHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgW3RpdGxlXT1cImFwcFRpbGVHcm91cC5uYXZpZ2F0b3JUaXRsZSB8IGJiYlRyYW5zbGF0ZVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZmQtZHluYW1pYy1wYWdlLWNvbnRlbnQgW2lkXT1cImFwcFRpbGVHcm91cC5JZFwiIGNka1Njcm9sbGFibGU+XHJcbiAgICAgICAgICAgICAgICA8YnQtdGlsZXMtdmlld2VyLWdyb3VwXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImRldmljZVNpemVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFthcHBUaWxlR3JvdXBdPVwiYXBwVGlsZUdyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICBbZWRpdF09XCJlZGl0XCJcclxuICAgICAgICAgICAgICAgICAgICBbcnRsXT1cInJ0bFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Nzc1N0eWxlXT1cImFwcFRpbGVHcm91cC5Dc3NTdHlsZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkZXZpY2VTaXplXT1cImRldmljZVNpemVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzdGFja0NvbnRlbnRdPVwic3RhY2tDb250ZW50XCJcclxuICAgICAgICAgICAgICAgICAgICBbaXNBcHBUaWxlU3ViR3JvdXBdPVwiKGZhbHNlIHx8IGhpZGVUYWJzKSAmJiBpPjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICh0aWxlc0Ryb3BwZWQpPVwib25Ecm9wKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgIChyZW5hbWVBcHBUaWxlQ2xpY2spPVwicmVuYW1lQXBwVGlsZUNsaWNrLmVtaXQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGhpZGVBcHBUaWxlQ2xpY2spPVwiaGlkZUFwcFRpbGVDbGljay5lbWl0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgIChyZXNldEdyb3VwKT1cInJlc2V0R3JvdXAuZW1pdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAoZGVsZXRlR3JvdXApPVwiZGVsZXRlR3JvdXAuZW1pdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAodG9nZ2xlR3JvdXApPVwidG9nZ2xlR3JvdXAuZW1pdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgID48L2J0LXRpbGVzLXZpZXdlci1ncm91cD5cclxuICAgICAgICAgICAgPC9mZC1keW5hbWljLXBhZ2UtY29udGVudD5cclxuICAgICAgICA8L2ZkcC1pY29uLXRhYi1iYXItdGFiPlxyXG5cclxuICAgICAgICB9IH1cclxuICAgIDwvZmRwLWljb24tdGFiLWJhcj5cclxuXHJcbiAgICA8ZmQtZHluYW1pYy1wYWdlLWZvb3Rlcj5cclxuICAgICAgICBAaWYgKGVkaXQpIHtcclxuICAgICAgICA8ZGl2IGZkLWJhciBiYXJEZXNpZ249XCJmb290ZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBmZC1iYXItcmlnaHQ+XHJcbiAgICAgICAgICAgICAgICA8ZmQtYnV0dG9uLWJhclxyXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInU2F2ZUFuZENsb3NlJyB8IGJiYlRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgZmRUeXBlPVwiZW1waGFzaXplZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRXhpdEVkaXRIb21lKGFwcFRpbGVHcm91cHMpXCJcclxuICAgICAgICAgICAgICAgID48L2ZkLWJ1dHRvbi1iYXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH1cclxuICAgIDwvZmQtZHluYW1pYy1wYWdlLWZvb3Rlcj5cclxuPC9mZC1keW5hbWljLXBhZ2U+XHJcbiJdfQ==
@@ -1,173 +0,0 @@
1
- import { moveItemInArray, transferArrayItem } from '@angular/cdk/drag-drop';
2
- import { ChangeDetectionStrategy, Component, inject } from '@angular/core';
3
- import { takeUntil, map, distinctUntilChanged, withLatestFrom } from 'rxjs/operators';
4
- import { BaseComponent } from 'barsa-novin-ray-core';
5
- import { TilesViewerService } from '../tiles-viewer.service';
6
- import { ActivatedRoute, Router } from '@angular/router';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "barsa-novin-ray-core";
9
- import * as i2 from "../tiles.service";
10
- import * as i3 from "../tiles-viewer.service";
11
- import * as i4 from "barsa-sap-ui";
12
- import * as i5 from "../tiles-viewer/tiles-viewer.component";
13
- import * as i6 from "@angular/common";
14
- export class TilesViewerContainerComponent extends BaseComponent {
15
- constructor(_portalService, _tilesService, _tilesViewerService) {
16
- super();
17
- this._portalService = _portalService;
18
- this._tilesService = _tilesService;
19
- this._tilesViewerService = _tilesViewerService;
20
- this.changedOrder = false;
21
- this.userStackContent = false;
22
- this.initialStackContentValue = false;
23
- this.firstSelected = false;
24
- this.stackContent = false;
25
- this._activatedRoute = inject(ActivatedRoute);
26
- this._router = inject(Router);
27
- this.stackContent$ = this._portalService.userPortalSettings$.pipe(takeUntil(this._onDestroy$), map((settings) => settings['UserPortalSettings']), map((settings) => settings?.TilesStackContent), distinctUntilChanged());
28
- this.stackContent$.subscribe((stackContent) => {
29
- this.initialStackContentValue = this.userStackContent = stackContent;
30
- if (stackContent) {
31
- this.stackContent = stackContent;
32
- }
33
- });
34
- }
35
- ngOnInit() {
36
- super.ngOnInit();
37
- this.viewLoading$ = this._tilesViewerService.viewLoading$;
38
- this.selectedAppGroupId = this._tilesViewerService.selectedAppGroupId;
39
- this.rtl$ = this._portalService.rtl$;
40
- this.deviceSize$ = this._portalService.deviceSize$;
41
- this.edit$ = this._tilesService.edit$;
42
- this.appTileGroups$ = this._tilesService.homeAppTileGroups$;
43
- this.appTileGroups$.pipe(withLatestFrom(this.stackContent$)).subscribe(([tiles, stackContent]) => {
44
- if (tiles && stackContent) {
45
- tiles.forEach((c) => {
46
- this._tilesService.loadAppTileGroups(c);
47
- });
48
- }
49
- });
50
- // setTimeout(() => {
51
- // this._router.navigate(
52
- // ['home', { outlets: { dialog: ['appgroupdialog', '_2tevxXK-rtcFnX_ZsfG1LX_VvR0K81'] } }],
53
- // { relativeTo: this._activatedRoute }
54
- // );
55
- // }, 3000);
56
- }
57
- ngOnDestroy() {
58
- super.ngOnDestroy();
59
- this._tilesService.setEditHome(false);
60
- }
61
- onSelectedTabChange(e) {
62
- const { firstSelected, selectedTabTitle, appTileGroups: appGroups, tabPanels, tabbarComponent } = e;
63
- let appTileGroup;
64
- if (this.stackContent) {
65
- return;
66
- }
67
- if (firstSelected) {
68
- const lastSelectedAppGroupId = this._tilesViewerService.selectedAppGroupId;
69
- if (lastSelectedAppGroupId) {
70
- appTileGroup = appGroups.find((c) => c.Id === lastSelectedAppGroupId);
71
- if (appTileGroup) {
72
- const lastTab = tabPanels.find((c) => c.label === appTileGroup?.navigatorTitle);
73
- if (lastTab && selectedTabTitle !== lastTab.label()) {
74
- appTileGroup = appGroups.find((c) => c.Id === lastSelectedAppGroupId);
75
- tabbarComponent.selectTab(lastTab.id());
76
- }
77
- }
78
- }
79
- }
80
- if (!appTileGroup) {
81
- appTileGroup = appGroups.find((c) => c.navigatorTitle === selectedTabTitle);
82
- }
83
- if (appTileGroup) {
84
- this._tilesViewerService.setSelectedTab(appTileGroup);
85
- this._tilesViewerService.loadAppGroup(appTileGroup);
86
- }
87
- }
88
- onDropGroup(e) {
89
- const { event, appTileGroups: appGroups } = e;
90
- moveItemInArray(appGroups, event.previousIndex, event.currentIndex);
91
- this.changedOrder = true;
92
- // this.saveOrderAppTiles(allApps, group);
93
- }
94
- onDrop(e) {
95
- const { appTileGroup: group, event } = e;
96
- const previousContainer = event.previousContainer;
97
- const container = event.container;
98
- const containerIsTile = container.data.isTile;
99
- const previousItems = previousContainer.data.items;
100
- const containerItems = container.data.items;
101
- const { previousIndex, currentIndex } = event;
102
- if (previousContainer === container) {
103
- moveItemInArray(previousItems, previousIndex, currentIndex);
104
- if (containerIsTile) {
105
- this._saveOrderAppTiles(group);
106
- }
107
- else {
108
- this._saveOrderActionLinks(group);
109
- }
110
- }
111
- else {
112
- transferArrayItem(previousItems, containerItems, previousIndex, currentIndex);
113
- const appTileIdTransferedId = containerItems[currentIndex]?.AppTile?.Id ?? containerItems[currentIndex].Id;
114
- if (containerIsTile) {
115
- this._saveOrderActionLinks(group);
116
- this._saveOrderAppTiles(group, appTileIdTransferedId);
117
- }
118
- else {
119
- this._saveOrderAppTiles(group);
120
- this._saveOrderActionLinks(group, appTileIdTransferedId);
121
- }
122
- }
123
- }
124
- onStackContentChanged(checked) {
125
- this.userStackContent = checked;
126
- }
127
- onExitEditHome(appTileGroups) {
128
- if (this.changedOrder) {
129
- this._tilesViewerService.saveAppGroupOrders(appTileGroups);
130
- this.changedOrder = false;
131
- }
132
- if (this.userStackContent !== this.initialStackContentValue) {
133
- this._tilesService.saveTilesStackContent(this.userStackContent);
134
- }
135
- this._setEditHome(false);
136
- }
137
- onCloseEditHome() {
138
- this._setEditHome(false);
139
- }
140
- onDelete(appTileGroup) {
141
- this._tilesViewerService.deleteAppGroup(appTileGroup);
142
- }
143
- onToggleShowHide(appTileGroup) {
144
- this._tilesViewerService.toggleAppGroupSettingVisible(appTileGroup);
145
- }
146
- onReset(appTileGroup) {
147
- this._tilesViewerService.resetAppGroup(appTileGroup);
148
- }
149
- onHideAppTile(appTile) {
150
- this._tilesViewerService.hideTile(appTile);
151
- }
152
- onRenameAppTile(appTile) {
153
- this._tilesViewerService.openRenameForm(appTile);
154
- }
155
- _setEditHome(val) {
156
- this._tilesService.setEditHome(val);
157
- }
158
- _saveOrderAppTiles(appTileGroup, appTileIdTransferedId = '0') {
159
- const appTiles = appTileGroup.navigatorTiles.map((appTile) => appTile.AppTile ? appTile.AppTile.Id : appTile.Id);
160
- this._tilesService.saveOrderAppTiles(appTileGroup, appTiles, false, appTileIdTransferedId);
161
- }
162
- _saveOrderActionLinks(appTileGroup, appTileIdTransferedId = '0') {
163
- const actionLinks = appTileGroup.navigatorActionLinks.map((appTile) => appTile.AppTile ? appTile.AppTile.Id : appTile.Id);
164
- this._tilesService.saveOrderAppTiles(appTileGroup, actionLinks, true, appTileIdTransferedId);
165
- }
166
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TilesViewerContainerComponent, deps: [{ token: i1.PortalService }, { token: i2.TilesService }, { token: i3.TilesViewerService }], target: i0.ɵɵFactoryTarget.Component }); }
167
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: TilesViewerContainerComponent, selector: "bt-tiles-viewer-container", providers: [TilesViewerService], usesInheritance: true, ngImport: i0, template: "@if (appTileGroups$ | async; as appTileGroups) { @if (appTileGroups) {\r\n<bt-tiles-viewer\r\n [class.edit]=\"(edit$ | async)!!\"\r\n [appTileGroups]=\"appTileGroups\"\r\n [loading]=\"(viewLoading$ | async)!!\"\r\n [hideTabs]=\"settings?.HideTabs\"\r\n [edit]=\"(edit$ | async)!!\"\r\n [rtl]=\"(rtl$ | async)!!\"\r\n [stackContent]=\"(stackContent$ | async)!!\"\r\n [deviceSize]=\"(deviceSize$ | async)!!\"\r\n [defaultTab]=\"selectedAppGroupId\"\r\n (stackContentChange)=\"onStackContentChanged($event)\"\r\n (closeEditHome)=\"onCloseEditHome()\"\r\n (save)=\"onExitEditHome($event)\"\r\n (listDropped)=\"onDropGroup($event)\"\r\n (tabChanged)=\"onSelectedTabChange($event)\"\r\n (toggleGroup)=\"onToggleShowHide($event)\"\r\n (resetGroup)=\"onReset($event)\"\r\n (deleteGroup)=\"onDelete($event)\"\r\n (tilesDropped)=\"onDrop($event)\"\r\n (hideAppTileClick)=\"onHideAppTile($event)\"\r\n (renameAppTileClick)=\"onRenameAppTile($event)\"\r\n></bt-tiles-viewer>\r\n} @else {\r\n<bsu-no-data></bsu-no-data>\r\n} } @else {\r\n<bsu-mask></bsu-mask>\r\n}\r\n\r\n<ng-template #loading>\r\n <bsu-mask></bsu-mask>\r\n</ng-template>\r\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "component", type: i4.MaskComponent, selector: "bsu-mask", inputs: ["size", "top"] }, { kind: "component", type: i4.NoDataComponent, selector: "bsu-no-data", inputs: ["simple"] }, { kind: "component", type: i5.TilesViewerComponent, selector: "bt-tiles-viewer", inputs: ["appTileGroups", "loading", "edit", "rtl", "defaultTab", "stackContent", "deviceSize", "selectedAppGroupId", "hideTabs", "DynamicComponents"], outputs: ["stackContentChange", "closeEditHome", "save", "listDropped", "tabChanged", "toggleGroup", "resetGroup", "deleteGroup", "hideAppTileClick", "renameAppTileClick", "tilesDropped"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
168
- }
169
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TilesViewerContainerComponent, decorators: [{
170
- type: Component,
171
- args: [{ selector: 'bt-tiles-viewer-container', providers: [TilesViewerService], changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "@if (appTileGroups$ | async; as appTileGroups) { @if (appTileGroups) {\r\n<bt-tiles-viewer\r\n [class.edit]=\"(edit$ | async)!!\"\r\n [appTileGroups]=\"appTileGroups\"\r\n [loading]=\"(viewLoading$ | async)!!\"\r\n [hideTabs]=\"settings?.HideTabs\"\r\n [edit]=\"(edit$ | async)!!\"\r\n [rtl]=\"(rtl$ | async)!!\"\r\n [stackContent]=\"(stackContent$ | async)!!\"\r\n [deviceSize]=\"(deviceSize$ | async)!!\"\r\n [defaultTab]=\"selectedAppGroupId\"\r\n (stackContentChange)=\"onStackContentChanged($event)\"\r\n (closeEditHome)=\"onCloseEditHome()\"\r\n (save)=\"onExitEditHome($event)\"\r\n (listDropped)=\"onDropGroup($event)\"\r\n (tabChanged)=\"onSelectedTabChange($event)\"\r\n (toggleGroup)=\"onToggleShowHide($event)\"\r\n (resetGroup)=\"onReset($event)\"\r\n (deleteGroup)=\"onDelete($event)\"\r\n (tilesDropped)=\"onDrop($event)\"\r\n (hideAppTileClick)=\"onHideAppTile($event)\"\r\n (renameAppTileClick)=\"onRenameAppTile($event)\"\r\n></bt-tiles-viewer>\r\n} @else {\r\n<bsu-no-data></bsu-no-data>\r\n} } @else {\r\n<bsu-mask></bsu-mask>\r\n}\r\n\r\n<ng-template #loading>\r\n <bsu-mask></bsu-mask>\r\n</ng-template>\r\n", styles: [":host{display:block}\n"] }]
172
- }], ctorParameters: () => [{ type: i1.PortalService }, { type: i2.TilesService }, { type: i3.TilesViewerService }] });
173
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlsZXMtdmlld2VyLWNvbnRhaW5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS10aWxlcy9zcmMvbGliL3RpbGVzLXZpZXdlci1jb250YWluZXIvdGlsZXMtdmlld2VyLWNvbnRhaW5lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS10aWxlcy9zcmMvbGliL3RpbGVzLXZpZXdlci1jb250YWluZXIvdGlsZXMtdmlld2VyLWNvbnRhaW5lci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBRTlGLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLG9CQUFvQixFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRGLE9BQU8sRUFBRSxhQUFhLEVBQTZELE1BQU0sc0JBQXNCLENBQUM7QUFFaEgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7Ozs7QUFXekQsTUFBTSxPQUFPLDZCQUE4QixTQUFRLGFBQWE7SUFpQjVELFlBQ2MsY0FBNkIsRUFDN0IsYUFBMkIsRUFDM0IsbUJBQXVDO1FBRWpELEtBQUssRUFBRSxDQUFDO1FBSkUsbUJBQWMsR0FBZCxjQUFjLENBQWU7UUFDN0Isa0JBQWEsR0FBYixhQUFhLENBQWM7UUFDM0Isd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFvQjtRQWRyRCxpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUNyQixxQkFBZ0IsR0FBRyxLQUFLLENBQUM7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QUMsRUFBRSxDQUNwRCxDQUFDO1FBQ0YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0lBQ2pHLENBQUM7K0dBdkxRLDZCQUE2QjttR0FBN0IsNkJBQTZCLG9EQUozQixDQUFDLGtCQUFrQixDQUFDLGlEQ2ZuQywwcUNBZ0NBOzs0RkRiYSw2QkFBNkI7a0JBUnpDLFNBQVM7K0JBQ0ksMkJBQTJCLGFBRzFCLENBQUMsa0JBQWtCLENBQUMsbUJBQ2QsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2RrRHJhZ0Ryb3AsIG1vdmVJdGVtSW5BcnJheSwgdHJhbnNmZXJBcnJheUl0ZW0gfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgaW5qZWN0LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHRha2VVbnRpbCwgbWFwLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgd2l0aExhdGVzdEZyb20gfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50LCBNZXRhb2JqZWN0RGF0YU1vZGVsLCBQb3J0YWxTZXJ2aWNlLCBBYmJyZXZhdGlvbkRldmljZVNpemUgfSBmcm9tICdiYXJzYS1ub3Zpbi1yYXktY29yZSc7XHJcbmltcG9ydCB7IFRpbGVzU2VydmljZSB9IGZyb20gJy4uL3RpbGVzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUaWxlc1ZpZXdlclNlcnZpY2UgfSBmcm9tICcuLi90aWxlcy12aWV3ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBJY29uVGFiQmFyQ29tcG9uZW50LCBJY29uVGFiQmFyVGFiQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnYnQtdGlsZXMtdmlld2VyLWNvbnRhaW5lcicsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGlsZXMtdmlld2VyLWNvbnRhaW5lci5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi90aWxlcy12aWV3ZXItY29udGFpbmVyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBwcm92aWRlcnM6IFtUaWxlc1ZpZXdlclNlcnZpY2VdLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgICBzdGFuZGFsb25lOiBmYWxzZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGlsZXNWaWV3ZXJDb250YWluZXJDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gICAgc2V0dGluZ3M6IFRpbGVWaWV3ZXJTZXR0aW5ncztcclxuICAgIGFwcFRpbGVHcm91cHMkOiBPYnNlcnZhYmxlPE1ldGFvYmplY3REYXRhTW9kZWxbXT47XHJcbiAgICB2aWV3TG9hZGluZyQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XHJcbiAgICBkZXZpY2VTaXplJDogT2JzZXJ2YWJsZTxBYmJyZXZhdGlvbkRldmljZVNpemU+O1xyXG4gICAgZWRpdCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XHJcbiAgICBjaGFuZ2VkT3JkZXIgPSBmYWxzZTtcclxuICAgIHVzZXJTdGFja0NvbnRlbnQgPSBmYWxzZTtcclxuICAgIGluaXRpYWxTdGFja0NvbnRlbnRWYWx1ZSA9IGZhbHNlO1xyXG4gICAgdXNlclBvcnRhbFNldHRpbmdzOiBNZXRhb2JqZWN0RGF0YU1vZGVsO1xyXG4gICAgc3RhY2tDb250ZW50JDogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuICAgIGZpcnN0U2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgIHJ0bCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XHJcbiAgICBzZWxlY3RlZEFwcEdyb3VwSWQ6IHN0cmluZztcclxuICAgIHN0YWNrQ29udGVudCA9IGZhbHNlO1xyXG4gICAgcHJvdGVjdGVkIF9hY3RpdmF0ZWRSb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSk7XHJcbiAgICBwcm90ZWN0ZWQgX3JvdXRlciA9IGluamVjdChSb3V0ZXIpO1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJvdGVjdGVkIF9wb3J0YWxTZXJ2aWNlOiBQb3J0YWxTZXJ2aWNlLFxyXG4gICAgICAgIHByb3RlY3RlZCBfdGlsZXNTZXJ2aWNlOiBUaWxlc1NlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkIF90aWxlc1ZpZXdlclNlcnZpY2U6IFRpbGVzVmlld2VyU2VydmljZVxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLnN0YWNrQ29udGVudCQgPSB0aGlzLl9wb3J0YWxTZXJ2aWNlLnVzZXJQb3J0YWxTZXR0aW5ncyQucGlwZShcclxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpLFxyXG4gICAgICAgICAgICBtYXAoKHNldHRpbmdzOiBSZWNvcmQ8c3RyaW5nLCBNZXRhb2JqZWN0RGF0YU1vZGVsPikgPT4gc2V0dGluZ3NbJ1VzZXJQb3J0YWxTZXR0aW5ncyddKSxcclxuICAgICAgICAgICAgbWFwKChzZXR0aW5nczogTWV0YW9iamVjdERhdGFNb2RlbCkgPT4gc2V0dGluZ3M/LlRpbGVzU3RhY2tDb250ZW50KSxcclxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5zdGFja0NvbnRlbnQkLnN1YnNjcmliZSgoc3RhY2tDb250ZW50KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbFN0YWNrQ29udGVudFZhbHVlID0gdGhpcy51c2VyU3RhY2tDb250ZW50ID0gc3RhY2tDb250ZW50O1xyXG4gICAgICAgICAgICBpZiAoc3RhY2tDb250ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YWNrQ29udGVudCA9IHN0YWNrQ29udGVudDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICAgICAgdGhpcy52aWV3TG9hZGluZyQgPSB0aGlzLl90aWxlc1ZpZXdlclNlcnZpY2Uudmlld0xvYWRpbmckO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRBcHBHcm91cElkID0gdGhpcy5fdGlsZXNWaWV3ZXJTZXJ2aWNlLnNlbGVjdGVkQXBwR3JvdXBJZDtcclxuICAgICAgICB0aGlzLnJ0bCQgPSB0aGlzLl9wb3J0YWxTZXJ2aWNlLnJ0bCQ7XHJcbiAgICAgICAgdGhpcy5kZXZpY2VTaXplJCA9IHRoaXMuX3BvcnRhbFNlcnZpY2UuZGV2aWNlU2l6ZSQ7XHJcbiAgICAgICAgdGhpcy5lZGl0JCA9IHRoaXMuX3RpbGVzU2VydmljZS5lZGl0JDtcclxuICAgICAgICB0aGlzLmFwcFRpbGVHcm91cHMkID0gdGhpcy5fdGlsZXNTZXJ2aWNlLmhvbWVBcHBUaWxlR3JvdXBzJDtcclxuICAgICAgICB0aGlzLmFwcFRpbGVHcm91cHMkLnBpcGUod2l0aExhdGVzdEZyb20odGhpcy5zdGFja0NvbnRlbnQkKSkuc3Vic2NyaWJlKChbdGlsZXMsIHN0YWNrQ29udGVudF0pID0+IHtcclxuICAgICAgICAgICAgaWYgKHRpbGVzICYmIHN0YWNrQ29udGVudCkge1xyXG4gICAgICAgICAgICAgICAgdGlsZXMuZm9yRWFjaCgoYykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RpbGVzU2VydmljZS5sb2FkQXBwVGlsZUdyb3VwcyhjKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgLy8gICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShcclxuICAgICAgICAvLyAgICAgICAgIFsnaG9tZScsIHsgb3V0bGV0czogeyBkaWFsb2c6IFsnYXBwZ3JvdXBkaWFsb2cnLCAnXzJ0ZXZ4WEstcnRjRm5YX1pzZkcxTFhfVnZSMEs4MSddIH0gfV0sXHJcbiAgICAgICAgLy8gICAgICAgICB7IHJlbGF0aXZlVG86IHRoaXMuX2FjdGl2YXRlZFJvdXRlIH1cclxuICAgICAgICAvLyAgICAgKTtcclxuICAgICAgICAvLyB9LCAzMDAwKTtcclxuICAgIH1cclxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XHJcbiAgICAgICAgdGhpcy5fdGlsZXNTZXJ2aWNlLnNldEVkaXRIb21lKGZhbHNlKTtcclxuICAgIH1cclxuICAgIG9uU2VsZWN0ZWRUYWJDaGFuZ2UoZToge1xyXG4gICAgICAgIGZpcnN0U2VsZWN0ZWQ6IGJvb2xlYW47XHJcbiAgICAgICAgc2VsZWN0ZWRUYWJUaXRsZTogc3RyaW5nO1xyXG4gICAgICAgIHRhYlBhbmVsczogSWNvblRhYkJhclRhYkNvbXBvbmVudFtdO1xyXG4gICAgICAgIGFwcFRpbGVHcm91cHM6IE1ldGFvYmplY3REYXRhTW9kZWxbXTtcclxuICAgICAgICB0YWJiYXJDb21wb25lbnQ6IEljb25UYWJCYXJDb21wb25lbnQ7XHJcbiAgICB9KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgeyBmaXJzdFNlbGVjdGVkLCBzZWxlY3RlZFRhYlRpdGxlLCBhcHBUaWxlR3JvdXBzOiBhcHBHcm91cHMsIHRhYlBhbmVscywgdGFiYmFyQ29tcG9uZW50IH0gPSBlO1xyXG5cclxuICAgICAgICBsZXQgYXBwVGlsZUdyb3VwOiBNZXRhb2JqZWN0RGF0YU1vZGVsIHwgdW5kZWZpbmVkO1xyXG4gICAgICAgIGlmICh0aGlzLnN0YWNrQ29udGVudCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChmaXJzdFNlbGVjdGVkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxhc3RTZWxlY3RlZEFwcEdyb3VwSWQgPSB0aGlzLl90aWxlc1ZpZXdlclNlcnZpY2Uuc2VsZWN0ZWRBcHBHcm91cElkO1xyXG4gICAgICAgICAgICBpZiAobGFzdFNlbGVjdGVkQXBwR3JvdXBJZCkge1xyXG4gICAgICAgICAgICAgICAgYXBwVGlsZUdyb3VwID0gYXBwR3JvdXBzLmZpbmQoKGMpID0+IGMuSWQgPT09IGxhc3RTZWxlY3RlZEFwcEdyb3VwSWQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFwcFRpbGVHcm91cCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RUYWIgPSB0YWJQYW5lbHMuZmluZCgoYykgPT4gYy5sYWJlbCA9PT0gYXBwVGlsZUdyb3VwPy5uYXZpZ2F0b3JUaXRsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3RUYWIgJiYgc2VsZWN0ZWRUYWJUaXRsZSAhPT0gbGFzdFRhYi5sYWJlbCgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcFRpbGVHcm91cCA9IGFwcEdyb3Vwcy5maW5kKChjKSA9PiBjLklkID09PSBsYXN0U2VsZWN0ZWRBcHBHcm91cElkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFiYmFyQ29tcG9uZW50LnNlbGVjdFRhYihsYXN0VGFiLmlkKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWFwcFRpbGVHcm91cCkge1xyXG4gICAgICAgICAgICBhcHBUaWxlR3JvdXAgPSBhcHBHcm91cHMuZmluZCgoYykgPT4gYy5uYXZpZ2F0b3JUaXRsZSA9PT0gc2VsZWN0ZWRUYWJUaXRsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChhcHBUaWxlR3JvdXApIHtcclxuICAgICAgICAgICAgdGhpcy5fdGlsZXNWaWV3ZXJTZXJ2aWNlLnNldFNlbGVjdGVkVGFiKGFwcFRpbGVHcm91cCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3RpbGVzVmlld2VyU2VydmljZS5sb2FkQXBwR3JvdXAoYXBwVGlsZUdyb3VwKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBvbkRyb3BHcm91cChlOiB7IGFwcFRpbGVHcm91cHM6IE1ldGFvYmplY3REYXRhTW9kZWxbXTsgZXZlbnQ6IENka0RyYWdEcm9wPE1ldGFvYmplY3REYXRhTW9kZWxbXT4gfSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHsgZXZlbnQsIGFwcFRpbGVHcm91cHM6IGFwcEdyb3VwcyB9ID0gZTtcclxuXHJcbiAgICAgICAgbW92ZUl0ZW1JbkFycmF5KGFwcEdyb3VwcywgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcclxuXHJcbiAgICAgICAgdGhpcy5jaGFuZ2VkT3JkZXIgPSB0cnVlO1xyXG4gICAgICAgIC8vIHRoaXMuc2F2ZU9yZGVyQXBwVGlsZXMoYWxsQXBwcywgZ3JvdXApO1xyXG4gICAgfVxyXG4gICAgb25Ecm9wKGU6IHsgYXBwVGlsZUdyb3VwOyBldmVudDogQ2RrRHJhZ0Ryb3A8eyBpc1RpbGU6IGJvb2xlYW47IGl0ZW1zOiBNZXRhb2JqZWN0RGF0YU1vZGVsW10gfT4gfSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHsgYXBwVGlsZUdyb3VwOiBncm91cCwgZXZlbnQgfSA9IGU7XHJcbiAgICAgICAgY29uc3QgcHJldmlvdXNDb250YWluZXIgPSBldmVudC5wcmV2aW91c0NvbnRhaW5lcjtcclxuICAgICAgICBjb25zdCBjb250YWluZXIgPSBldmVudC5jb250YWluZXI7XHJcbiAgICAgICAgY29uc3QgY29udGFpbmVySXNUaWxlID0gY29udGFpbmVyLmRhdGEuaXNUaWxlO1xyXG4gICAgICAgIGNvbnN0IHByZXZpb3VzSXRlbXMgPSBwcmV2aW91c0NvbnRhaW5lci5kYXRhLml0ZW1zO1xyXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lckl0ZW1zID0gY29udGFpbmVyLmRhdGEuaXRlbXM7XHJcbiAgICAgICAgY29uc3QgeyBwcmV2aW91c0luZGV4LCBjdXJyZW50SW5kZXggfSA9IGV2ZW50O1xyXG4gICAgICAgIGlmIChwcmV2aW91c0NvbnRhaW5lciA9PT0gY29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgIG1vdmVJdGVtSW5BcnJheShwcmV2aW91c0l0ZW1zLCBwcmV2aW91c0luZGV4LCBjdXJyZW50SW5kZXgpO1xyXG4gICAgICAgICAgICBpZiAoY29udGFpbmVySXNUaWxlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zYXZlT3JkZXJBcHBUaWxlcyhncm91cCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zYXZlT3JkZXJBY3Rpb25MaW5rcyhncm91cCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0cmFuc2ZlckFycmF5SXRlbShwcmV2aW91c0l0ZW1zLCBjb250YWluZXJJdGVtcywgcHJldmlvdXNJbmRleCwgY3VycmVudEluZGV4KTtcclxuICAgICAgICAgICAgY29uc3QgYXBwVGlsZUlkVHJhbnNmZXJlZElkID0gY29udGFpbmVySXRlbXNbY3VycmVudEluZGV4XT8uQXBwVGlsZT8uSWQgPz8gY29udGFpbmVySXRlbXNbY3VycmVudEluZGV4XS5JZDtcclxuICAgICAgICAgICAgaWYgKGNvbnRhaW5lcklzVGlsZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2F2ZU9yZGVyQWN0aW9uTGlua3MoZ3JvdXApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2F2ZU9yZGVyQXBwVGlsZXMoZ3JvdXAsIGFwcFRpbGVJZFRyYW5zZmVyZWRJZCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zYXZlT3JkZXJBcHBUaWxlcyhncm91cCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zYXZlT3JkZXJBY3Rpb25MaW5rcyhncm91cCwgYXBwVGlsZUlkVHJhbnNmZXJlZElkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIG9uU3RhY2tDb250ZW50Q2hhbmdlZChjaGVja2VkKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy51c2VyU3RhY2tDb250ZW50ID0gY2hlY2tlZDtcclxuICAgIH1cclxuXHJcbiAgICBvbkV4aXRFZGl0SG9tZShhcHBUaWxlR3JvdXBzOiBNZXRhb2JqZWN0RGF0YU1vZGVsW10pOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5jaGFuZ2VkT3JkZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5fdGlsZXNWaWV3ZXJTZXJ2aWNlLnNhdmVBcHBHcm91cE9yZGVycyhhcHBUaWxlR3JvdXBzKTtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkT3JkZXIgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMudXNlclN0YWNrQ29udGVudCAhPT0gdGhpcy5pbml0aWFsU3RhY2tDb250ZW50VmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5fdGlsZXNTZXJ2aWNlLnNhdmVUaWxlc1N0YWNrQ29udGVudCh0aGlzLnVzZXJTdGFja0NvbnRlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9zZXRFZGl0SG9tZShmYWxzZSk7XHJcbiAgICB9XHJcbiAgICBvbkNsb3NlRWRpdEhvbWUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fc2V0RWRpdEhvbWUoZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uRGVsZXRlKGFwcFRpbGVHcm91cDogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3RpbGVzVmlld2VyU2VydmljZS5kZWxldGVBcHBHcm91cChhcHBUaWxlR3JvdXApO1xyXG4gICAgfVxyXG5cclxuICAgIG9uVG9nZ2xlU2hvd0hpZGUoYXBwVGlsZUdyb3VwOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fdGlsZXNWaWV3ZXJTZXJ2aWNlLnRvZ2dsZUFwcEdyb3VwU2V0dGluZ1Zpc2libGUoYXBwVGlsZUdyb3VwKTtcclxuICAgIH1cclxuXHJcbiAgICBvblJlc2V0KGFwcFRpbGVHcm91cDogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3RpbGVzVmlld2VyU2VydmljZS5yZXNldEFwcEdyb3VwKGFwcFRpbGVHcm91cCk7XHJcbiAgICB9XHJcbiAgICBvbkhpZGVBcHBUaWxlKGFwcFRpbGU6IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl90aWxlc1ZpZXdlclNlcnZpY2UuaGlkZVRpbGUoYXBwVGlsZSk7XHJcbiAgICB9XHJcbiAgICBvblJlbmFtZUFwcFRpbGUoYXBwVGlsZTogTWV0YW9iamVjdERhdGFNb2RlbCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3RpbGVzVmlld2VyU2VydmljZS5vcGVuUmVuYW1lRm9ybShhcHBUaWxlKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgX3NldEVkaXRIb21lKHZhbCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3RpbGVzU2VydmljZS5zZXRFZGl0SG9tZSh2YWwpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3NhdmVPcmRlckFwcFRpbGVzKGFwcFRpbGVHcm91cDogTWV0YW9iamVjdERhdGFNb2RlbCwgYXBwVGlsZUlkVHJhbnNmZXJlZElkOiBzdHJpbmcgPSAnMCcpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBhcHBUaWxlcyA9IGFwcFRpbGVHcm91cC5uYXZpZ2F0b3JUaWxlcy5tYXAoKGFwcFRpbGUpID0+XHJcbiAgICAgICAgICAgIGFwcFRpbGUuQXBwVGlsZSA/IGFwcFRpbGUuQXBwVGlsZS5JZCA6IGFwcFRpbGUuSWRcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuX3RpbGVzU2VydmljZS5zYXZlT3JkZXJBcHBUaWxlcyhhcHBUaWxlR3JvdXAsIGFwcFRpbGVzLCBmYWxzZSwgYXBwVGlsZUlkVHJhbnNmZXJlZElkKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9zYXZlT3JkZXJBY3Rpb25MaW5rcyhhcHBUaWxlR3JvdXA6IE1ldGFvYmplY3REYXRhTW9kZWwsIGFwcFRpbGVJZFRyYW5zZmVyZWRJZDogc3RyaW5nID0gJzAnKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgYWN0aW9uTGlua3MgPSBhcHBUaWxlR3JvdXAubmF2aWdhdG9yQWN0aW9uTGlua3MubWFwKChhcHBUaWxlKSA9PlxyXG4gICAgICAgICAgICBhcHBUaWxlLkFwcFRpbGUgPyBhcHBUaWxlLkFwcFRpbGUuSWQgOiBhcHBUaWxlLklkXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLl90aWxlc1NlcnZpY2Uuc2F2ZU9yZGVyQXBwVGlsZXMoYXBwVGlsZUdyb3VwLCBhY3Rpb25MaW5rcywgdHJ1ZSwgYXBwVGlsZUlkVHJhbnNmZXJlZElkKTtcclxuICAgIH1cclxufVxyXG5pbnRlcmZhY2UgVGlsZVZpZXdlclNldHRpbmdzIGV4dGVuZHMgTWV0YW9iamVjdERhdGFNb2RlbCB7XHJcbiAgICBIaWRlVGFiczogYm9vbGVhbjtcclxufVxyXG4iLCJAaWYgKGFwcFRpbGVHcm91cHMkIHwgYXN5bmM7IGFzIGFwcFRpbGVHcm91cHMpIHsgQGlmIChhcHBUaWxlR3JvdXBzKSB7XHJcbjxidC10aWxlcy12aWV3ZXJcclxuICAgIFtjbGFzcy5lZGl0XT1cIihlZGl0JCB8IGFzeW5jKSEhXCJcclxuICAgIFthcHBUaWxlR3JvdXBzXT1cImFwcFRpbGVHcm91cHNcIlxyXG4gICAgW2xvYWRpbmddPVwiKHZpZXdMb2FkaW5nJCB8IGFzeW5jKSEhXCJcclxuICAgIFtoaWRlVGFic109XCJzZXR0aW5ncz8uSGlkZVRhYnNcIlxyXG4gICAgW2VkaXRdPVwiKGVkaXQkIHwgYXN5bmMpISFcIlxyXG4gICAgW3J0bF09XCIocnRsJCB8IGFzeW5jKSEhXCJcclxuICAgIFtzdGFja0NvbnRlbnRdPVwiKHN0YWNrQ29udGVudCQgfCBhc3luYykhIVwiXHJcbiAgICBbZGV2aWNlU2l6ZV09XCIoZGV2aWNlU2l6ZSQgfCBhc3luYykhIVwiXHJcbiAgICBbZGVmYXVsdFRhYl09XCJzZWxlY3RlZEFwcEdyb3VwSWRcIlxyXG4gICAgKHN0YWNrQ29udGVudENoYW5nZSk9XCJvblN0YWNrQ29udGVudENoYW5nZWQoJGV2ZW50KVwiXHJcbiAgICAoY2xvc2VFZGl0SG9tZSk9XCJvbkNsb3NlRWRpdEhvbWUoKVwiXHJcbiAgICAoc2F2ZSk9XCJvbkV4aXRFZGl0SG9tZSgkZXZlbnQpXCJcclxuICAgIChsaXN0RHJvcHBlZCk9XCJvbkRyb3BHcm91cCgkZXZlbnQpXCJcclxuICAgICh0YWJDaGFuZ2VkKT1cIm9uU2VsZWN0ZWRUYWJDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAodG9nZ2xlR3JvdXApPVwib25Ub2dnbGVTaG93SGlkZSgkZXZlbnQpXCJcclxuICAgIChyZXNldEdyb3VwKT1cIm9uUmVzZXQoJGV2ZW50KVwiXHJcbiAgICAoZGVsZXRlR3JvdXApPVwib25EZWxldGUoJGV2ZW50KVwiXHJcbiAgICAodGlsZXNEcm9wcGVkKT1cIm9uRHJvcCgkZXZlbnQpXCJcclxuICAgIChoaWRlQXBwVGlsZUNsaWNrKT1cIm9uSGlkZUFwcFRpbGUoJGV2ZW50KVwiXHJcbiAgICAocmVuYW1lQXBwVGlsZUNsaWNrKT1cIm9uUmVuYW1lQXBwVGlsZSgkZXZlbnQpXCJcclxuPjwvYnQtdGlsZXMtdmlld2VyPlxyXG59IEBlbHNlIHtcclxuPGJzdS1uby1kYXRhPjwvYnN1LW5vLWRhdGE+XHJcbn0gfSBAZWxzZSB7XHJcbjxic3UtbWFzaz48L2JzdS1tYXNrPlxyXG59XHJcblxyXG48bmctdGVtcGxhdGUgI2xvYWRpbmc+XHJcbiAgICA8YnN1LW1hc2s+PC9ic3UtbWFzaz5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19