barsa-tiles 1.0.456 → 2.0.2

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 (172) hide show
  1. package/{esm2020 → esm2022}/barsa-tiles.mjs +4 -4
  2. package/esm2022/lib/action-item/action-item.component.mjs +17 -0
  3. package/{esm2020 → esm2022}/lib/action-links.pipe.mjs +16 -16
  4. package/esm2022/lib/actions-link/actions-link.component.mjs +41 -0
  5. package/esm2022/lib/app-finder/app-finder.component.mjs +52 -0
  6. package/esm2022/lib/app-finder-app-list/app-finder-app-list.component.mjs +39 -0
  7. package/esm2022/lib/app-finder-group/app-finder-group.component.mjs +41 -0
  8. package/esm2022/lib/app-finder.service.mjs +121 -0
  9. package/esm2022/lib/barsa-shellbar/barsa-shellbar.component.mjs +183 -0
  10. package/esm2022/lib/barsa-tiles.module.mjs +225 -0
  11. package/esm2022/lib/change-app-tile/change-app-tile.component.mjs +46 -0
  12. package/esm2022/lib/create-app-group/create-app-group.component.mjs +43 -0
  13. package/esm2022/lib/directives/emptylist.directive.mjs +36 -0
  14. package/esm2022/lib/feed-tile/feed-tile.component.mjs +31 -0
  15. package/{esm2020 → esm2022}/lib/footer-edit-tile/footer-edit-tile.component.mjs +13 -13
  16. package/esm2022/lib/footer-tile/footer-tile.component.mjs +27 -0
  17. package/esm2022/lib/form-app-finder/form-app-finder.component.mjs +95 -0
  18. package/esm2022/lib/form-tile/form-tile.component.mjs +34 -0
  19. package/esm2022/lib/logo-tile/logo-tile.component.mjs +23 -0
  20. package/{esm2020 → esm2022}/lib/micro-tile-chart-area/micro-tile-chart-area.component.mjs +40 -40
  21. package/{esm2020 → esm2022}/lib/micro-tile-chart-bar/micro-tile-chart-bar.component.mjs +29 -29
  22. package/esm2022/lib/micro-tile-chart-bullet/micro-tile-chart-bullet.component.mjs +26 -0
  23. package/{esm2020 → esm2022}/lib/micro-tile-chart-circular/micro-tile-chart-circular.component.mjs +20 -20
  24. package/{esm2020 → esm2022}/lib/micro-tile-chart-comparison/micro-tile-chart-comparison.component.mjs +31 -31
  25. package/{esm2020 → esm2022}/lib/micro-tile-chart-line/micro-tile-chart-line.component.mjs +32 -32
  26. package/{esm2020 → esm2022}/lib/micro-tile-chart-stackbar/micro-tile-chart-stackbar.component.mjs +27 -27
  27. package/{esm2020 → esm2022}/lib/models/app-tile-footer-section.mjs +1 -1
  28. package/{esm2020 → esm2022}/lib/models/app-tile-footer.mjs +1 -1
  29. package/{esm2020 → esm2022}/lib/models/app-tile-group-pin.mjs +1 -1
  30. package/esm2022/lib/models/base-bt-tile-component.mjs +26 -0
  31. package/{esm2020 → esm2022}/lib/models/base-tile-component.mjs +58 -58
  32. package/{esm2020 → esm2022}/lib/models/base-tile-setting.mjs +1 -1
  33. package/{esm2020 → esm2022}/lib/models/feed-tile-setting.mjs +1 -1
  34. package/{esm2020 → esm2022}/lib/models/index.mjs +13 -13
  35. package/{esm2020 → esm2022}/lib/models/logo-tile-setting.mjs +1 -1
  36. package/{esm2020 → esm2022}/lib/models/micro-tile-chart-bullet-setting.mjs +1 -1
  37. package/{esm2020 → esm2022}/lib/models/news-tile-setting.mjs +1 -1
  38. package/{esm2020 → esm2022}/lib/models/numeric-tile-setting.mjs +1 -1
  39. package/{esm2020 → esm2022}/lib/models/profile-tile-setting.mjs +1 -1
  40. package/esm2022/lib/models/tile-setting.mjs +2 -0
  41. package/{esm2020 → esm2022}/lib/models/user-portal-settings.mjs +1 -1
  42. package/esm2022/lib/news-tile/news-tile.component.mjs +53 -0
  43. package/esm2022/lib/notification-group/notification-group.component.mjs +116 -0
  44. package/esm2022/lib/notification-group-header/notification-group-header.component.mjs +38 -0
  45. package/esm2022/lib/numeric-tile/numeric-tile.component.mjs +64 -0
  46. package/esm2022/lib/pin-tile/pin-tile.component.mjs +110 -0
  47. package/esm2022/lib/pipes/group-tiles.pipe.mjs +31 -0
  48. package/{esm2020 → esm2022}/lib/pipes/home-group.pipe.mjs +17 -17
  49. package/esm2022/lib/pipes/tile-home-filter.pipe.mjs +28 -0
  50. package/esm2022/lib/pipes/tile-prop.pipe.mjs +32 -0
  51. package/esm2022/lib/popover-app-finder/filter-apps-grouped.pipe.mjs +36 -0
  52. package/esm2022/lib/popover-app-finder/popover-app-finder.component.mjs +112 -0
  53. package/esm2022/lib/profile-tile/profile-tile.component.mjs +25 -0
  54. package/esm2022/lib/shellbar/shellbar.component.mjs +201 -0
  55. package/esm2022/lib/simple-tile/simple-tile.component.mjs +22 -0
  56. package/esm2022/lib/tile/tile.component.mjs +70 -0
  57. package/esm2022/lib/tile-renderer.directive.mjs +70 -0
  58. package/esm2022/lib/tile-style.directive.mjs +29 -0
  59. package/esm2022/lib/tiles-viewer/tiles-viewer.component.mjs +167 -0
  60. package/esm2022/lib/tiles-viewer-container/tiles-viewer-container.component.mjs +164 -0
  61. package/esm2022/lib/tiles-viewer-group/tiles-viewer-group.component.mjs +88 -0
  62. package/esm2022/lib/tiles-viewer.service.mjs +130 -0
  63. package/esm2022/lib/tiles.service.mjs +589 -0
  64. package/{esm2020 → esm2022}/public-api.mjs +46 -45
  65. package/fesm2022/barsa-tiles.mjs +3179 -0
  66. package/fesm2022/barsa-tiles.mjs.map +1 -0
  67. package/index.d.ts +5 -5
  68. package/lib/action-item/action-item.component.d.ts +6 -6
  69. package/lib/action-links.pipe.d.ts +7 -7
  70. package/lib/actions-link/actions-link.component.d.ts +17 -17
  71. package/lib/app-finder/app-finder.component.d.ts +24 -24
  72. package/lib/app-finder-app-list/app-finder-app-list.component.d.ts +20 -20
  73. package/lib/app-finder-group/app-finder-group.component.d.ts +14 -14
  74. package/lib/app-finder.service.d.ts +33 -33
  75. package/lib/barsa-shellbar/barsa-shellbar.component.d.ts +104 -97
  76. package/lib/barsa-tiles.module.d.ts +91 -86
  77. package/lib/change-app-tile/change-app-tile.component.d.ts +20 -20
  78. package/lib/create-app-group/create-app-group.component.d.ts +19 -19
  79. package/lib/directives/emptylist.directive.d.ts +14 -14
  80. package/lib/feed-tile/feed-tile.component.d.ts +11 -11
  81. package/lib/footer-edit-tile/footer-edit-tile.component.d.ts +6 -6
  82. package/lib/footer-tile/footer-tile.component.d.ts +11 -11
  83. package/lib/form-app-finder/form-app-finder.component.d.ts +38 -38
  84. package/lib/form-tile/form-tile.component.d.ts +24 -24
  85. package/lib/logo-tile/logo-tile.component.d.ts +7 -7
  86. package/lib/micro-tile-chart-area/micro-tile-chart-area.component.d.ts +8 -8
  87. package/lib/micro-tile-chart-bar/micro-tile-chart-bar.component.d.ts +12 -12
  88. package/lib/micro-tile-chart-bullet/micro-tile-chart-bullet.component.d.ts +16 -16
  89. package/lib/micro-tile-chart-circular/micro-tile-chart-circular.component.d.ts +7 -7
  90. package/lib/micro-tile-chart-comparison/micro-tile-chart-comparison.component.d.ts +8 -8
  91. package/lib/micro-tile-chart-line/micro-tile-chart-line.component.d.ts +8 -8
  92. package/lib/micro-tile-chart-stackbar/micro-tile-chart-stackbar.component.d.ts +8 -8
  93. package/lib/models/app-tile-footer-section.d.ts +6 -6
  94. package/lib/models/app-tile-footer.d.ts +8 -8
  95. package/lib/models/app-tile-group-pin.d.ts +5 -5
  96. package/lib/models/base-bt-tile-component.d.ts +9 -9
  97. package/lib/models/base-tile-component.d.ts +26 -26
  98. package/lib/models/base-tile-setting.d.ts +5 -5
  99. package/lib/models/feed-tile-setting.d.ts +7 -7
  100. package/lib/models/index.d.ts +13 -13
  101. package/lib/models/logo-tile-setting.d.ts +6 -6
  102. package/lib/models/micro-tile-chart-bullet-setting.d.ts +10 -10
  103. package/lib/models/news-tile-setting.d.ts +4 -4
  104. package/lib/models/numeric-tile-setting.d.ts +9 -9
  105. package/lib/models/profile-tile-setting.d.ts +7 -7
  106. package/lib/models/tile-setting.d.ts +10 -10
  107. package/lib/models/user-portal-settings.d.ts +9 -9
  108. package/lib/news-tile/news-tile.component.d.ts +19 -19
  109. package/lib/notification-group/notification-group.component.d.ts +54 -55
  110. package/lib/notification-group-header/notification-group-header.component.d.ts +15 -15
  111. package/lib/numeric-tile/numeric-tile.component.d.ts +16 -12
  112. package/lib/pin-tile/pin-tile.component.d.ts +30 -30
  113. package/lib/pipes/group-tiles.pipe.d.ts +14 -14
  114. package/lib/pipes/home-group.pipe.d.ts +9 -9
  115. package/lib/pipes/tile-home-filter.pipe.d.ts +8 -8
  116. package/lib/pipes/tile-prop.pipe.d.ts +8 -8
  117. package/lib/popover-app-finder/filter-apps-grouped.pipe.d.ts +13 -0
  118. package/lib/popover-app-finder/popover-app-finder.component.d.ts +39 -0
  119. package/lib/profile-tile/profile-tile.component.d.ts +7 -7
  120. package/lib/shellbar/shellbar.component.d.ts +94 -94
  121. package/lib/simple-tile/simple-tile.component.d.ts +10 -10
  122. package/lib/tile/tile.component.d.ts +22 -20
  123. package/lib/tile-renderer.directive.d.ts +28 -28
  124. package/lib/tile-style.directive.d.ts +12 -0
  125. package/lib/tiles-viewer/tiles-viewer.component.d.ts +65 -63
  126. package/lib/tiles-viewer-container/tiles-viewer-container.component.d.ts +59 -57
  127. package/lib/tiles-viewer-group/tiles-viewer-group.component.d.ts +39 -39
  128. package/lib/tiles-viewer.service.d.ts +42 -42
  129. package/lib/tiles.service.d.ts +75 -75
  130. package/package.json +7 -13
  131. package/public-api.d.ts +42 -41
  132. package/esm2020/lib/action-item/action-item.component.mjs +0 -18
  133. package/esm2020/lib/actions-link/actions-link.component.mjs +0 -42
  134. package/esm2020/lib/app-finder/app-finder.component.mjs +0 -53
  135. package/esm2020/lib/app-finder-app-list/app-finder-app-list.component.mjs +0 -40
  136. package/esm2020/lib/app-finder-group/app-finder-group.component.mjs +0 -42
  137. package/esm2020/lib/app-finder.service.mjs +0 -121
  138. package/esm2020/lib/barsa-shellbar/barsa-shellbar.component.mjs +0 -166
  139. package/esm2020/lib/barsa-tiles.module.mjs +0 -206
  140. package/esm2020/lib/change-app-tile/change-app-tile.component.mjs +0 -47
  141. package/esm2020/lib/create-app-group/create-app-group.component.mjs +0 -44
  142. package/esm2020/lib/directives/emptylist.directive.mjs +0 -36
  143. package/esm2020/lib/feed-tile/feed-tile.component.mjs +0 -32
  144. package/esm2020/lib/footer-tile/footer-tile.component.mjs +0 -28
  145. package/esm2020/lib/form-app-finder/form-app-finder.component.mjs +0 -95
  146. package/esm2020/lib/form-tile/form-tile.component.mjs +0 -35
  147. package/esm2020/lib/logo-tile/logo-tile.component.mjs +0 -23
  148. package/esm2020/lib/micro-tile-chart-bullet/micro-tile-chart-bullet.component.mjs +0 -27
  149. package/esm2020/lib/models/base-bt-tile-component.mjs +0 -30
  150. package/esm2020/lib/models/tile-setting.mjs +0 -2
  151. package/esm2020/lib/news-tile/news-tile.component.mjs +0 -54
  152. package/esm2020/lib/notification-group/notification-group.component.mjs +0 -116
  153. package/esm2020/lib/notification-group-header/notification-group-header.component.mjs +0 -39
  154. package/esm2020/lib/numeric-tile/numeric-tile.component.mjs +0 -34
  155. package/esm2020/lib/pin-tile/pin-tile.component.mjs +0 -111
  156. package/esm2020/lib/pipes/group-tiles.pipe.mjs +0 -31
  157. package/esm2020/lib/pipes/tile-home-filter.pipe.mjs +0 -28
  158. package/esm2020/lib/pipes/tile-prop.pipe.mjs +0 -32
  159. package/esm2020/lib/profile-tile/profile-tile.component.mjs +0 -26
  160. package/esm2020/lib/shellbar/shellbar.component.mjs +0 -200
  161. package/esm2020/lib/simple-tile/simple-tile.component.mjs +0 -23
  162. package/esm2020/lib/tile/tile.component.mjs +0 -61
  163. package/esm2020/lib/tile-renderer.directive.mjs +0 -70
  164. package/esm2020/lib/tiles-viewer/tiles-viewer.component.mjs +0 -157
  165. package/esm2020/lib/tiles-viewer-container/tiles-viewer-container.component.mjs +0 -158
  166. package/esm2020/lib/tiles-viewer-group/tiles-viewer-group.component.mjs +0 -88
  167. package/esm2020/lib/tiles-viewer.service.mjs +0 -130
  168. package/esm2020/lib/tiles.service.mjs +0 -589
  169. package/fesm2015/barsa-tiles.mjs +0 -2977
  170. package/fesm2015/barsa-tiles.mjs.map +0 -1
  171. package/fesm2020/barsa-tiles.mjs +0 -2941
  172. package/fesm2020/barsa-tiles.mjs.map +0 -1
@@ -0,0 +1,3179 @@
1
+ import * as i0 from '@angular/core';
2
+ import { Injectable, Component, ChangeDetectionStrategy, Input, Directive, HostListener, Pipe, HostBinding, EventEmitter, Output, ElementRef, ViewChild, inject, ChangeDetectorRef, TemplateRef, Inject, NgModule, NO_ERRORS_SCHEMA } from '@angular/core';
3
+ import * as i1 from 'barsa-novin-ray-core';
4
+ import { BarsaApi, TilePropsComponent, BaseComponent, BaseDirective, PreventDefaulEvent, fromIntersectionObserver, IntersectionStatus, APP_VERSION, getDeviceIsMobile, BaseModule, BarsaNovinRayCoreModule } from 'barsa-novin-ray-core';
5
+ import { Subject, BehaviorSubject, of, from, takeUntil as takeUntil$1, filter as filter$1, interval, combineLatest, forkJoin } from 'rxjs';
6
+ import { startWith, shareReplay, takeUntil, distinctUntilChanged, filter, tap, concatMap, debounceTime, exhaustMap, finalize, map, withLatestFrom } from 'rxjs/operators';
7
+ import * as i1$1 from '@fundamental-ngx/core';
8
+ import { TabListComponent, CarouselComponent, ComboboxComponent, FundamentalNgxCoreModule, GridListModule } from '@fundamental-ngx/core';
9
+ import * as i1$3 from '@fundamental-ngx/core/tile';
10
+ import * as i3 from '@angular/common';
11
+ import { DOCUMENT, CommonModule, LowerCasePipe } from '@angular/common';
12
+ import * as i2 from '@fundamental-ngx/core/button';
13
+ import * as i3$1 from '@fundamental-ngx/core/menu';
14
+ import * as i4 from 'barsa-sap-ui';
15
+ import { BarsaSapUiModule } from 'barsa-sap-ui';
16
+ import * as i1$2 from '@fundamental-ngx/core/icon';
17
+ import * as i2$1 from '@angular/cdk/drag-drop';
18
+ import { moveItemInArray, transferArrayItem, DragDropModule } from '@angular/cdk/drag-drop';
19
+ import * as i3$2 from '@fundamental-ngx/core/busy-indicator';
20
+ import * as i6 from '@fundamental-ngx/core/layout-panel';
21
+ import * as i8 from '@fundamental-ngx/core/title';
22
+ import * as i9 from '@fundamental-ngx/core/panel';
23
+ import * as i10 from '@fundamental-ngx/core/toolbar';
24
+ import * as i1$4 from '@fundamental-ngx/core/avatar';
25
+ import * as i3$3 from '@fundamental-ngx/core/card';
26
+ import * as i4$1 from '@fundamental-ngx/core/fixed-card-layout';
27
+ import * as i8$1 from '@fundamental-ngx/core/list';
28
+ import * as i1$5 from '@angular/forms';
29
+ import { UntypedFormControl, Validators, FormsModule, ReactiveFormsModule } from '@angular/forms';
30
+ import * as i6$1 from '@fundamental-ngx/core/input-group';
31
+ import * as i4$2 from '@fundamental-ngx/core/bar';
32
+ import * as i5 from '@fundamental-ngx/core/form';
33
+ import * as i7 from '@fundamental-ngx/core/dialog';
34
+ import * as i9$1 from '@fundamental-ngx/cdk/utils';
35
+ import * as i6$2 from '@fundamental-ngx/core/dynamic-page';
36
+ import * as i8$2 from '@fundamental-ngx/core/switch';
37
+ import * as i9$2 from '@fundamental-ngx/core/tabs';
38
+ import * as i2$2 from 'barsa-echarts';
39
+ import { BarsaEchartsModule } from 'barsa-echarts';
40
+ import * as i2$3 from '@fundamental-ngx/core/carousel';
41
+ import * as i5$1 from '@fundamental-ngx/core/checkbox';
42
+ import * as i3$4 from '@angular/platform-browser';
43
+ import * as i9$3 from '@fundamental-ngx/core/product-switch';
44
+ import * as i10$1 from '@fundamental-ngx/core/popover';
45
+ import * as i11 from '@fundamental-ngx/core/shellbar';
46
+ import * as i4$3 from '@fundamental-ngx/core/content-density';
47
+ import * as i4$4 from '@fundamental-ngx/core/notification';
48
+ import { CdkTableModule } from '@angular/cdk/table';
49
+ import { IconTabBarComponent, IconTabBarTabComponent, IconTabBarTabContentDirective } from '@fundamental-ngx/platform';
50
+
51
+ class TilesService {
52
+ constructor(_portalService, _rtlService, _bbbTranslatePipe) {
53
+ this._portalService = _portalService;
54
+ this._rtlService = _rtlService;
55
+ this._bbbTranslatePipe = _bbbTranslatePipe;
56
+ this.shellbarSource = new Subject();
57
+ this._OnDestroy$ = new Subject();
58
+ this._homeAppTileGroupsSource = new BehaviorSubject([]);
59
+ this.pinTilesSource = new Subject();
60
+ this._appTileGroupsSource = new BehaviorSubject(null);
61
+ this._edithomeSource = new BehaviorSubject(false);
62
+ this._componentSettings$ = new Subject();
63
+ BarsaApi.Bw.TilesService = this;
64
+ this.homeAppTileGroups$ = this._homeAppTileGroupsSource.asObservable();
65
+ this.pinTiles$ = this.pinTilesSource.asObservable().pipe(startWith(null));
66
+ this.shellbarSource = new Subject();
67
+ this.shellbar$ = this.shellbarSource.asObservable().pipe(shareReplay(1));
68
+ this.appTileGroups$ = this._appTileGroupsSource.pipe(shareReplay(1));
69
+ this.edit$ = this._edithomeSource.asObservable().pipe(takeUntil(this._OnDestroy$), distinctUntilChanged());
70
+ this.deviceSize$ = this._portalService.deviceSize$;
71
+ this._rtlService.rtl.next(BarsaApi.LoginFormData.IsRtl);
72
+ this.loadAllAppTileGroups();
73
+ this.appTileGroups$
74
+ .pipe(filter((moForReportModel) => moForReportModel !== null), tap((moForReportModel) => {
75
+ if (moForReportModel) {
76
+ this._allAppsLoaded(moForReportModel);
77
+ }
78
+ }))
79
+ .subscribe();
80
+ BarsaApi.Ul.ApplicationCtrlr.on('GlobalRefreshTile', this._onApplication_GlobalRefreshTile.bind(this));
81
+ }
82
+ get componentSettings$() {
83
+ return this._componentSettings$.asObservable();
84
+ }
85
+ get appTileGroups() {
86
+ return this._appTileGroupsSource.getValue();
87
+ }
88
+ ngOnDestroy() {
89
+ this._OnDestroy$.next();
90
+ }
91
+ _onApplication_GlobalRefreshTile(sender, appTilesTitle) {
92
+ const allApps = this._appTileGroupsSource.getValue();
93
+ const appTiles = [];
94
+ if (allApps) {
95
+ appTilesTitle.forEach((c) => {
96
+ const selectedTile = this.findAppTileWithKey(allApps, 'A_App_AppKey', c);
97
+ if (selectedTile) {
98
+ appTiles.push(selectedTile);
99
+ }
100
+ });
101
+ this._updateAppTileFromNotification(allApps, appTiles);
102
+ this._appTileGroupsSource.next(allApps);
103
+ }
104
+ }
105
+ _updateAppTileFromNotification(allApps, appTiles) {
106
+ if (!appTiles?.length) {
107
+ return;
108
+ }
109
+ BarsaApi.Bw.RunBlMethodAsync({
110
+ Parameters: [appTiles.map((c) => (c.AppTile?.Id ? c.AppTile?.Id : c.Id))],
111
+ Method: 'RefreshAppTiles',
112
+ SuccessFn: (result) => {
113
+ result.MoDataList.forEach((c) => this.updateAppTile(allApps, c));
114
+ this._appTileGroupsSource.next({ ...allApps });
115
+ },
116
+ FailFn: () => { }
117
+ });
118
+ }
119
+ loadAppTileGroups(appTileGroup) {
120
+ if (!appTileGroup || appTileGroup.$TilesLoaded) {
121
+ return;
122
+ }
123
+ const allApps = this._appTileGroupsSource.getValue();
124
+ if (allApps) {
125
+ const selectedAppTilegroup = allApps?.MoDataList.find((c) => c.Id === appTileGroup.Id);
126
+ if (selectedAppTilegroup) {
127
+ this._loadAppTilesOfAppTileGroup(selectedAppTilegroup, allApps);
128
+ selectedAppTilegroup.$Children?.forEach((subGroup) => {
129
+ this._loadAppTilesOfAppTileGroup(subGroup, allApps);
130
+ });
131
+ }
132
+ }
133
+ }
134
+ saveTilesStackContent(tilesStackContent) {
135
+ const userPortalSettings = this._portalService.userPortalSettings['UserPortalSettings'];
136
+ if (userPortalSettings == null) {
137
+ return Promise.resolve();
138
+ }
139
+ userPortalSettings.TilesStackContent = tilesStackContent;
140
+ userPortalSettings.$State = 'Modified';
141
+ return this._saveUserPortalSettings(userPortalSettings).then(() => this._portalService.setUserPortalSettings(userPortalSettings));
142
+ }
143
+ loadUserPortalSettings() {
144
+ return this._portalService.getData('UserPortalSetting').pipe(concatMap((data) => {
145
+ if (data) {
146
+ return of(data);
147
+ }
148
+ else {
149
+ return this.loadFromServerUserPortalSetting();
150
+ }
151
+ }));
152
+ }
153
+ refreshTile(appTile) {
154
+ return new Promise((resolve, reject) => {
155
+ BarsaApi.Bw.RunBlMethodAsync({
156
+ Parameters: [appTile.Id],
157
+ Method: 'RefreshTile',
158
+ SuccessFn: (newAppTile) => {
159
+ if (newAppTile.MoDataList?.length) {
160
+ resolve(newAppTile.MoDataList[0]);
161
+ }
162
+ reject(`refresh tile not found apptile width title: ${appTile.Title}`);
163
+ },
164
+ FailFn: () => {
165
+ reject(null);
166
+ }
167
+ });
168
+ });
169
+ }
170
+ loadFromServerUserPortalSetting() {
171
+ return from(new Promise((resolve, reject) => {
172
+ BarsaApi.Bw.RunBlMethodAsync({
173
+ Parameters: [],
174
+ Method: 'GetUserPortalSettings',
175
+ SuccessFn: (userPortalSetting) => {
176
+ this._portalService.setData('UserPortalSetting', userPortalSetting);
177
+ resolve(userPortalSetting);
178
+ },
179
+ FailFn: () => {
180
+ reject(null);
181
+ }
182
+ });
183
+ }));
184
+ }
185
+ toggleAppGroupSettingVisible(appGroup) {
186
+ return from(new Promise((resolve, reject) => {
187
+ BarsaApi.Bw.RunBlMethodAsync({
188
+ Parameters: [appGroup.Id],
189
+ Method: 'ToggleAppTileGroupSettingVisible',
190
+ SuccessFn: (appGroupSetting) => {
191
+ this._updateAppTileGroupSettings(appGroup, appGroupSetting);
192
+ resolve(appGroupSetting);
193
+ },
194
+ FailFn: () => {
195
+ reject(null);
196
+ }
197
+ });
198
+ })).pipe(tap((appGroupSetting) => {
199
+ this._updateAppGroupSetting(appGroup, appGroupSetting);
200
+ }));
201
+ }
202
+ resetAppGroupSetting(appGroup) {
203
+ return from(new Promise((resolve, reject) => {
204
+ BarsaApi.Bw.RunBlMethodAsync({
205
+ Parameters: [appGroup.Id],
206
+ Method: 'ResetAppTileGroupSettingVisible',
207
+ SuccessFn: (appGroupSetting) => {
208
+ this._updateAppTileGroupSettings(appGroup, appGroupSetting);
209
+ resolve(appGroupSetting);
210
+ },
211
+ FailFn: () => {
212
+ reject(null);
213
+ }
214
+ });
215
+ })).pipe(tap((appGroupSetting) => {
216
+ this._updateAppGroupSetting(appGroup, appGroupSetting);
217
+ }));
218
+ }
219
+ deleteAppGroup(appGroup) {
220
+ return from(new Promise((resolve, reject) => {
221
+ BarsaApi.Bw.RunBlMethodAsync({
222
+ Parameters: [appGroup.Id],
223
+ Method: 'DeleteAppGroup',
224
+ SuccessFn: () => {
225
+ resolve(appGroup.Id);
226
+ },
227
+ FailFn: () => {
228
+ reject(null);
229
+ }
230
+ });
231
+ })).pipe(tap((appGroupId) => {
232
+ const allApps = this.appTileGroups;
233
+ if (allApps) {
234
+ allApps.MoDataList = allApps.MoDataList.filter((c) => c.Id !== appGroupId);
235
+ this._appTileGroupsSource.next(allApps);
236
+ }
237
+ }));
238
+ }
239
+ changeAppTileSetting(appTile) {
240
+ const allApps = this.appTileGroups;
241
+ const selectedGroup = this.findGroupWithAppTileId(allApps, appTile.Id);
242
+ if (selectedGroup === null) {
243
+ return of(null);
244
+ }
245
+ return from(new Promise((resolve, reject) => {
246
+ BarsaApi.Bw.RunBlMethodAsync({
247
+ Parameters: [selectedGroup.Id, appTile.Id, appTile.Title, appTile.Subtitle],
248
+ Method: 'ChangeAppTileSetting',
249
+ SuccessFn: () => {
250
+ this._nextAllAppTileGroups(allApps);
251
+ resolve(selectedGroup);
252
+ },
253
+ FailFn: () => {
254
+ reject(null);
255
+ }
256
+ });
257
+ })).pipe(tap((appGroupSetting) => this.updataAppTileSetting(selectedGroup, appGroupSetting)));
258
+ }
259
+ saveAppGroupOrders(appGroups) {
260
+ const groupOrders = appGroups.map((c) => c.Id);
261
+ return from(new Promise((resolve, reject) => {
262
+ BarsaApi.Bw.RunBlMethodAsync({
263
+ Parameters: [groupOrders],
264
+ Method: 'ChangeOrderAppTileGroups',
265
+ SuccessFn: () => {
266
+ resolve();
267
+ },
268
+ FailFn: () => {
269
+ reject(null);
270
+ }
271
+ });
272
+ })).pipe();
273
+ }
274
+ createAppGroup(title) {
275
+ return from(new Promise((resolve, reject) => {
276
+ BarsaApi.Bw.RunBlMethodAsync({
277
+ Parameters: [title],
278
+ Method: 'CreateAppTileGroup',
279
+ SuccessFn: (mo) => {
280
+ resolve(mo);
281
+ },
282
+ FailFn: () => {
283
+ reject(null);
284
+ }
285
+ });
286
+ })).pipe(tap((mo) => this.addAppGroup(mo)));
287
+ }
288
+ saveOrderAppTiles(appGroup, appTiles, isActionLink = false, appTileIdTransferedId = '0') {
289
+ BarsaApi.Bw.RunBlMethodAsync({
290
+ Parameters: [appGroup.Id, appTiles, isActionLink, appTileIdTransferedId],
291
+ Method: 'ChangeOrderAppTiles',
292
+ SuccessFn: () => { },
293
+ FailFn: () => { }
294
+ });
295
+ }
296
+ updateAppTile(allApps, appTile) {
297
+ const selectedAppTile = this.findAppTileWithKey(allApps, 'A_App_Component.Settings.Id', appTile.A_App_Component.Settings.Id);
298
+ if (selectedAppTile) {
299
+ BarsaApi.Common.Merger.FastMerge(selectedAppTile.A_App_Component.Settings, appTile.A_App_Component.Settings);
300
+ this._componentSettings$.next(selectedAppTile.A_App_Component.Settings);
301
+ }
302
+ }
303
+ updataAppTileSetting(selectedGroup, appGroupSetting) {
304
+ const allApps = this.appTileGroups;
305
+ allApps?.MoDataList.forEach((appGroup) => {
306
+ if (appGroup.Id === selectedGroup.Id) {
307
+ appGroup.UserAppTileGroupSetting = appGroupSetting;
308
+ }
309
+ });
310
+ this._appTileGroupsSource.next(allApps);
311
+ }
312
+ addAppGroup(mo) {
313
+ const allApps = this.appTileGroups;
314
+ if (allApps) {
315
+ allApps.MoDataList.push(mo);
316
+ this._appTileGroupsSource.next(allApps);
317
+ }
318
+ }
319
+ singlePinTileChanged(appTileId) {
320
+ const allApps = this.appTileGroups;
321
+ const group = this.findGroupWithAppTileId(allApps, appTileId);
322
+ if (group === null) {
323
+ return of(false);
324
+ }
325
+ return from(new Promise((resolve, reject) => {
326
+ BarsaApi.Bw.RunBlMethodAsync({
327
+ Parameters: [group.Id, appTileId],
328
+ Method: 'RemoveAppTileFromTileGroup',
329
+ SuccessFn: (setting) => {
330
+ this._updateAppTileGroupSettings(group, setting);
331
+ this._nextAllAppTileGroups(allApps);
332
+ resolve(true);
333
+ },
334
+ FailFn: () => {
335
+ reject(false);
336
+ }
337
+ });
338
+ }));
339
+ }
340
+ pinTileChanged(appTileGroupsPin, app, callback) {
341
+ const allApps = this.appTileGroups;
342
+ const visible = appTileGroupsPin.map((c) => c.visible);
343
+ const groupChanges = appTileGroupsPin.map((c) => new BarsaApi.Common.MetaObjectWeb({
344
+ Id: c.appTileGroup.Id,
345
+ TypeDefId: allApps?.TypeDefId
346
+ }));
347
+ BarsaApi.Bw.RunBlMethodAsync({
348
+ Parameters: [groupChanges, visible, app.Id],
349
+ Method: 'TilePinChanged',
350
+ SuccessFn: (settings) => {
351
+ this._tilePinChange(appTileGroupsPin, allApps);
352
+ callback(settings);
353
+ },
354
+ FailFn: () => {
355
+ // TODO show error
356
+ }
357
+ });
358
+ }
359
+ _tilePinChange(appTileGroupsPin, allApps) {
360
+ for (const appTileGroupPin of appTileGroupsPin) {
361
+ let selectedAppGroup;
362
+ const appGroupId = appTileGroupPin.appTileGroup.Id;
363
+ allApps?.MoDataList.forEach((c) => {
364
+ if (c.Id === appGroupId) {
365
+ selectedAppGroup = c;
366
+ }
367
+ else if (!selectedAppGroup) {
368
+ selectedAppGroup = c.$Children?.find((child) => child.Id === appGroupId);
369
+ }
370
+ });
371
+ if (selectedAppGroup && selectedAppGroup.$TilesLoaded) {
372
+ // let moDataList = selectedAppGroup.AppTiles.MoDataList;
373
+ // if (appTileGroups[i].visible)
374
+ // selectedAppGroup.AppTiles.MoDataList = [...moDataList, settings[i]];
375
+ // else
376
+ // selectedAppGroup.AppTiles.MoDataList = moDataList.filter(
377
+ // (c) => c.App.Id !== app.Id
378
+ // );
379
+ this._loadAppTilesOfAppTileGroup(selectedAppGroup, allApps);
380
+ }
381
+ }
382
+ this._nextAllAppTileGroups(allApps);
383
+ }
384
+ loadShellbar() {
385
+ BarsaApi.Bw.RunBlMethodAsync({
386
+ Parameters: [BarsaApi.LoginFormData.PortalId],
387
+ Method: 'LoadShellbarByPortalId',
388
+ SuccessFn: (shellbar) => {
389
+ this.shellbarSource.next(shellbar);
390
+ },
391
+ FailFn: () => {
392
+ // TODO show error
393
+ }
394
+ });
395
+ // this._portalService
396
+ // .ReportExecutePromise('Shellbar')
397
+ // .then((moForReportModel) => this.shellbarSource.next(moForReportModel.MoDataList[0]));
398
+ }
399
+ loadAllAppTileGroups() {
400
+ this._portalService
401
+ .ReportExecute('AllAppTileGroups')
402
+ .subscribe((allApps) => this._nextAllAppTileGroups(allApps));
403
+ }
404
+ _setTileInfo(appTile) {
405
+ {
406
+ const title = BarsaApi.Common.Util.TryGetValue(appTile, 'Component.Settings.TileSetting.Title', null);
407
+ appTile.TileTitle = !appTile.Title ? title : appTile.Title;
408
+ const subtitle = BarsaApi.Common.Util.TryGetValue(appTile, 'Component.Settings.TileSetting.Subtitle', null);
409
+ appTile.Subtitle = !appTile.Subtitle ? subtitle : appTile.Subtitle;
410
+ }
411
+ }
412
+ getTileGroups() {
413
+ return this._appTileGroupsSource.getValue();
414
+ }
415
+ setEditHome(edit) {
416
+ this._edithomeSource.next(edit);
417
+ }
418
+ _allAppsLoaded(moForReportModel) {
419
+ moForReportModel.MoDataList.forEach((c) => {
420
+ this._prepareNavigator(c);
421
+ });
422
+ this._setHomeAppTileGroups(moForReportModel.MoDataList);
423
+ }
424
+ _loadAppTilesOfAppTileGroup(selectedAppTilegroup, allApps) {
425
+ const callback = () => {
426
+ this._nextAllAppTileGroups(allApps);
427
+ };
428
+ if (!selectedAppTilegroup.UserAppTileGroupSetting) {
429
+ this._loadAppTilesByAppTileGroup(selectedAppTilegroup, callback);
430
+ }
431
+ else {
432
+ this._loadAppTilesByAppTileGroupSetting(selectedAppTilegroup, callback);
433
+ }
434
+ }
435
+ _loadAppTilesByAppTileGroup(appGroup, callback) {
436
+ BarsaApi.Bw.RunBlMethodAsync({
437
+ Parameters: [appGroup.Id],
438
+ Method: 'LoadAllAppTilesByAppTileGroup',
439
+ SuccessFn: (appTiles) => {
440
+ this._updateAppTilesOfAppTileGroup(appGroup, appTiles);
441
+ callback();
442
+ },
443
+ FailFn: () => {
444
+ // TODO show error
445
+ }
446
+ });
447
+ }
448
+ _updateAppTilesOfAppTileGroup(selectedAppTilegroup, appTiles) {
449
+ if (this.appTileGroups) {
450
+ selectedAppTilegroup = { ...selectedAppTilegroup, $TilesLoaded: true };
451
+ appTiles.MoDataList.forEach((element) => {
452
+ element.Component = element.A_App_Component ?? element.A_AppTile_App_Component;
453
+ element.DynamicCommand = element.A_App_DynamicCommand ?? element.A_AppTile_App_DynamicCommand;
454
+ element.Predefined = element.Predefined ?? element.A_AppTile_Predefined;
455
+ });
456
+ const apptileGroupIndex = this.appTileGroups?.MoDataList.findIndex((c) => c.Id === selectedAppTilegroup.Id || c.Id === selectedAppTilegroup.$ParentId);
457
+ selectedAppTilegroup.AppTiles = appTiles;
458
+ const tileGroup = this.appTileGroups.MoDataList[apptileGroupIndex];
459
+ if (selectedAppTilegroup.$ParentId) {
460
+ if (tileGroup.$Children) {
461
+ const idOfSubGroup = tileGroup.$Children.findIndex((c) => c.Id === selectedAppTilegroup.Id);
462
+ tileGroup.$Children[idOfSubGroup] = selectedAppTilegroup;
463
+ }
464
+ this.appTileGroups.MoDataList[apptileGroupIndex] = { ...tileGroup };
465
+ }
466
+ else {
467
+ this.appTileGroups.MoDataList[apptileGroupIndex] = selectedAppTilegroup;
468
+ }
469
+ }
470
+ }
471
+ _loadAppTilesByAppTileGroupSetting(appTileGroup, callback) {
472
+ BarsaApi.Bw.RunBlMethodAsync({
473
+ Parameters: [appTileGroup.Id],
474
+ Method: 'LoadAllAppTilesByUserAppTileGroupSettings',
475
+ SuccessFn: (appTiles) => {
476
+ this._updateAppTilesOfAppTileGroup(appTileGroup, appTiles);
477
+ callback();
478
+ },
479
+ FailFn: () => {
480
+ // TODO show error
481
+ }
482
+ });
483
+ }
484
+ _nextAllAppTileGroups(newAllApps = null) {
485
+ const allApps = newAllApps ?? this._appTileGroupsSource.getValue();
486
+ this._appTileGroupsSource.next(allApps ? { ...allApps } : null);
487
+ }
488
+ _setHomeAppTileGroups(appGroups) {
489
+ let newAppGroups = [...appGroups];
490
+ newAppGroups = newAppGroups
491
+ .filter((c) => c.Visible)
492
+ .sort((a, b) => Number(a.navigatorOrderItem) - Number(b.navigatorOrderItem));
493
+ this._homeAppTileGroupsSource.next(newAppGroups);
494
+ }
495
+ _saveUserPortalSettings(userPortalSettings) {
496
+ return new Promise((resolve, reject) => {
497
+ BarsaApi.Bw.RunBlMethodAsync({
498
+ Parameters: [new BarsaApi.Common.MetaObjectWeb(userPortalSettings)],
499
+ Method: 'SaveUserPortalSettings',
500
+ SuccessFn: () => {
501
+ resolve();
502
+ },
503
+ FailFn: () => {
504
+ reject(null);
505
+ }
506
+ });
507
+ });
508
+ }
509
+ _updateAppGroupSetting(appGroup, appGroupSetting) {
510
+ const allApps = this.appTileGroups;
511
+ const selectedAppGroup = allApps?.MoDataList.find((c) => c.Id === appGroup.Id);
512
+ if (selectedAppGroup && allApps) {
513
+ selectedAppGroup.UserAppTileGroupSetting = appGroupSetting;
514
+ this._nextAllAppTileGroups(allApps);
515
+ }
516
+ }
517
+ findAppTileWithKey(allApps, key, value) {
518
+ let selectedTile;
519
+ if (typeof value === 'string') {
520
+ value = BarsaApi.Common.Util.ReplaceArabicCharchter(value);
521
+ }
522
+ if (!allApps) {
523
+ return null;
524
+ }
525
+ allApps.MoDataList.forEach((appGroup) => {
526
+ if (selectedTile) {
527
+ return;
528
+ }
529
+ selectedTile = appGroup.navigatorTiles.find((c) => BarsaApi.Common.Util.TryGetValue(c, key, null) === value);
530
+ appGroup.$Children?.forEach((subGroup) => {
531
+ if (selectedTile) {
532
+ return;
533
+ }
534
+ selectedTile = subGroup.navigatorTiles.find((c) => BarsaApi.Common.Util.TryGetValue(c, key, null) === value);
535
+ });
536
+ });
537
+ return selectedTile;
538
+ }
539
+ findGroupWithAppTileId(allApps, appTileId) {
540
+ let selectedGroup;
541
+ if (!allApps) {
542
+ return null;
543
+ }
544
+ allApps.MoDataList.forEach((appGroup) => {
545
+ if (selectedGroup) {
546
+ return;
547
+ }
548
+ if (appGroup.navigatorTiles.some((appTile) => appTile.Id === appTileId)) {
549
+ selectedGroup = appGroup;
550
+ return;
551
+ }
552
+ appGroup.$Children?.forEach((subGroup) => {
553
+ if (subGroup.navigatorTiles.some((appTile) => appTile.Id === appTileId)) {
554
+ selectedGroup = subGroup;
555
+ return;
556
+ }
557
+ });
558
+ });
559
+ return selectedGroup;
560
+ }
561
+ _findGroupWithAppGroupId(allApps, appGroupId) {
562
+ let selectedGroup;
563
+ if (!allApps) {
564
+ return null;
565
+ }
566
+ allApps.MoDataList.forEach((appGroup) => {
567
+ if (selectedGroup) {
568
+ return;
569
+ }
570
+ if (appGroup.Id === appGroupId) {
571
+ selectedGroup = appGroup;
572
+ return;
573
+ }
574
+ appGroup.$Children?.forEach((subGroup) => {
575
+ if (subGroup.Id === appGroupId) {
576
+ selectedGroup = subGroup;
577
+ return;
578
+ }
579
+ });
580
+ });
581
+ return selectedGroup;
582
+ }
583
+ _updateAppTileGroupSettings(appTileGroup, setting) {
584
+ appTileGroup.UserAppTileGroupSetting = setting;
585
+ appTileGroup = JSON.parse(JSON.stringify(appTileGroup));
586
+ this._nextAllAppTileGroups();
587
+ return appTileGroup;
588
+ }
589
+ _prepareNavigator(appTileGroup) {
590
+ appTileGroup.$TileSettingChanged = false;
591
+ appTileGroup.$Disabledpin = false;
592
+ appTileGroup.navigatorTitle = BarsaApi.Common.Util.TryGetValue(appTileGroup, 'UserAppTileGroupSetting.Title', appTileGroup.Title);
593
+ appTileGroup.navigatorTitle = appTileGroup.navigatorTitle =
594
+ appTileGroup.navigatorTitle === '' ? appTileGroup.Title : appTileGroup.navigatorTitle;
595
+ appTileGroup.navigatorTitle = this._bbbTranslatePipe.transform(appTileGroup.navigatorTitle);
596
+ const orderItem = BarsaApi.Common.Util.TryGetValue(appTileGroup, 'UserAppTileGroupSetting.OrderItem', null);
597
+ if (orderItem !== null) {
598
+ appTileGroup.navigatorOrderItem = orderItem;
599
+ }
600
+ else {
601
+ appTileGroup.navigatorOrderItem = appTileGroup.OrderItem;
602
+ }
603
+ const visible = BarsaApi.Common.Util.TryGetValue(appTileGroup, 'UserAppTileGroupSetting.Visible', null);
604
+ if (visible !== null) {
605
+ appTileGroup.navigatorVisible = visible;
606
+ }
607
+ else {
608
+ appTileGroup.navigatorVisible = appTileGroup.Visible;
609
+ }
610
+ const appTiles = appTileGroup.AppTiles?.MoDataList ?? [];
611
+ appTileGroup.navigatorTiles = appTiles
612
+ .filter((c) => c.Visible && !c.IsActionLink)
613
+ .sort((a, b) => Number(a.OrderItem) - Number(b.OrderItem));
614
+ appTileGroup.navigatorActionLinks = appTiles
615
+ .filter((c) => c.Visible && c.IsActionLink)
616
+ .sort((a, b) => Number(a.OrderItemActionLink) - Number(b.OrderItemActionLink));
617
+ appTileGroup.navigatorTiles.forEach((appTile) => this._setTileInfo(appTile));
618
+ appTileGroup.navigatorActionLinks.forEach((appTile) => this._setTileInfo(appTile));
619
+ appTileGroup.$Children?.forEach((subAppTileGroup) => {
620
+ this._prepareNavigator(subAppTileGroup);
621
+ });
622
+ }
623
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TilesService, deps: [{ token: i1.PortalService }, { token: i1$1.RtlService }, { token: i1.BbbTranslatePipe }], target: i0.ɵɵFactoryTarget.Injectable }); }
624
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TilesService, providedIn: 'root' }); }
625
+ }
626
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TilesService, decorators: [{
627
+ type: Injectable,
628
+ args: [{
629
+ providedIn: 'root'
630
+ }]
631
+ }], ctorParameters: () => [{ type: i1.PortalService }, { type: i1$1.RtlService }, { type: i1.BbbTranslatePipe }] });
632
+
633
+ class BaseTileComponent extends TilePropsComponent {
634
+ constructor(el, _renderer2, _cdr, _tilesService) {
635
+ super(el, _renderer2, _cdr);
636
+ this.el = el;
637
+ this._renderer2 = _renderer2;
638
+ this._cdr = _cdr;
639
+ this._tilesService = _tilesService;
640
+ }
641
+ get settings() {
642
+ const data = this.data?.Component?.Settings;
643
+ return data ? data : this.parameters;
644
+ }
645
+ get backColor() {
646
+ return this.settings.TileSetting.BackColor;
647
+ }
648
+ get title() {
649
+ return this.data.TileTitle;
650
+ }
651
+ get subtitle() {
652
+ return this.data.Subtitle;
653
+ }
654
+ get double() {
655
+ return this.settings.TileSetting.IsDouble;
656
+ }
657
+ get badge() {
658
+ return this.settings.TileSetting.Badge;
659
+ }
660
+ get footer() {
661
+ return this.settings.TileSetting.Footer;
662
+ }
663
+ get tileSetting() {
664
+ return this.settings.TileSetting;
665
+ }
666
+ setEditHome(val) {
667
+ this.edit = val;
668
+ this._cdr.detectChanges();
669
+ }
670
+ onTileClick() {
671
+ if (this.context) {
672
+ this.context.FireEvent('click', this.context);
673
+ }
674
+ }
675
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: BaseTileComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: TilesService }], target: i0.ɵɵFactoryTarget.Component }); }
676
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.5", type: BaseTileComponent, selector: "bt-base-tile", usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
677
+ }
678
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: BaseTileComponent, decorators: [{
679
+ type: Component,
680
+ args: [{
681
+ selector: 'bt-base-tile',
682
+ template: '',
683
+ changeDetection: ChangeDetectionStrategy.OnPush
684
+ }]
685
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: TilesService }] });
686
+
687
+ class BaseBtTileComponent extends BaseTileComponent {
688
+ ngOnInit() {
689
+ super.ngOnInit();
690
+ this._tilesService.componentSettings$
691
+ .pipe(takeUntil$1(this._onDestroy$), filter$1((c) => c.Id === this.settings.Id))
692
+ .subscribe((c) => {
693
+ this._cdr.detectChanges();
694
+ });
695
+ this._renderer2.addClass(this.el.nativeElement, 'barsa-tile');
696
+ }
697
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: BaseBtTileComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
698
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.5", type: BaseBtTileComponent, selector: "bt-base-bt-tile", usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
699
+ }
700
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: BaseBtTileComponent, decorators: [{
701
+ type: Component,
702
+ args: [{
703
+ selector: 'bt-base-bt-tile',
704
+ template: '',
705
+ changeDetection: ChangeDetectionStrategy.OnPush
706
+ }]
707
+ }] });
708
+
709
+ class FooterTileComponent extends BaseComponent {
710
+ get twoColumn() {
711
+ return this.settings.TwoColumn;
712
+ }
713
+ get firstSection() {
714
+ return this.settings.FirstSection;
715
+ }
716
+ get secondSection() {
717
+ return this.settings.SecondSection;
718
+ }
719
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: FooterTileComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
720
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: FooterTileComponent, selector: "bt-footer-tile", inputs: { settings: "settings" }, usesInheritance: true, ngImport: i0, template: "<div fd-tile-footer [twoColumn]=\"twoColumn\">\r\n @if (twoColumn) {\r\n <div fd-tile-section>\r\n <fd-icon fd-tile-refresh [font]=\"firstSection.Icon | sapFont\" [glyph]=\"firstSection.Icon\"></fd-icon>\r\n <span fd-tile-footer-text>{{ firstSection.Text | bbbTranslate }}</span>\r\n </div>\r\n <div fd-tile-section>\r\n <fd-icon fd-tile-refresh [font]=\"secondSection.Icon | sapFont\" [glyph]=\"secondSection.Icon\"></fd-icon>\r\n <span fd-tile-footer-text>{{ secondSection.Text | bbbTranslate }}</span>\r\n </div>\r\n } @else {\r\n <fd-icon fd-tile-refresh [font]=\"firstSection.Icon | sapFont\" [glyph]=\"firstSection.Icon\"></fd-icon>\r\n <span fd-tile-footer-text>{{ firstSection.Text | bbbTranslate }}</span>\r\n }\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "component", type: i1$2.IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "color", "background", "class", "ariaLabel", "ariaHidden"] }, { kind: "directive", type: i1$3.TileFooterDirective, selector: "[fdTileFooter], [fd-tile-footer]", inputs: ["twoColumn"] }, { kind: "directive", type: i1$3.TileSectionDirective, selector: "[fdTileSection], [fd-tile-section]" }, { kind: "directive", type: i1$3.TileRefreshDirective, selector: "[fdTileRefresh], [fd-tile-refresh]", inputs: ["glyph", "glyphFont", "class", "ariaLabel"] }, { kind: "directive", type: i1$3.TileFooterTextDirective, selector: "[fdTileFooterText], [fd-tile-footer-text]" }, { kind: "pipe", type: i1.BbbTranslatePipe, name: "bbbTranslate" }, { kind: "pipe", type: i4.SapFontPipe, name: "sapFont" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
721
+ }
722
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: FooterTileComponent, decorators: [{
723
+ type: Component,
724
+ args: [{ selector: 'bt-footer-tile', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div fd-tile-footer [twoColumn]=\"twoColumn\">\r\n @if (twoColumn) {\r\n <div fd-tile-section>\r\n <fd-icon fd-tile-refresh [font]=\"firstSection.Icon | sapFont\" [glyph]=\"firstSection.Icon\"></fd-icon>\r\n <span fd-tile-footer-text>{{ firstSection.Text | bbbTranslate }}</span>\r\n </div>\r\n <div fd-tile-section>\r\n <fd-icon fd-tile-refresh [font]=\"secondSection.Icon | sapFont\" [glyph]=\"secondSection.Icon\"></fd-icon>\r\n <span fd-tile-footer-text>{{ secondSection.Text | bbbTranslate }}</span>\r\n </div>\r\n } @else {\r\n <fd-icon fd-tile-refresh [font]=\"firstSection.Icon | sapFont\" [glyph]=\"firstSection.Icon\"></fd-icon>\r\n <span fd-tile-footer-text>{{ firstSection.Text | bbbTranslate }}</span>\r\n }\r\n</div>\r\n" }]
725
+ }], propDecorators: { settings: [{
726
+ type: Input
727
+ }] } });
728
+
729
+ class TileStyleDirective extends BaseDirective {
730
+ constructor(_renderer2, _el) {
731
+ super(_el);
732
+ this._renderer2 = _renderer2;
733
+ this._el = _el;
734
+ }
735
+ ngOnInit() {
736
+ super.ngOnInit();
737
+ const firstChild = this._el.nativeElement.firstChild;
738
+ if (this.backColor && firstChild) {
739
+ this._renderer2.setStyle(firstChild, 'background-color', `${this.backColor}`);
740
+ this._renderer2.addClass(firstChild, 'customColor');
741
+ }
742
+ }
743
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TileStyleDirective, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
744
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.5", type: TileStyleDirective, selector: "[tileStyle]", inputs: { backColor: "backColor" }, usesInheritance: true, ngImport: i0 }); }
745
+ }
746
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TileStyleDirective, decorators: [{
747
+ type: Directive,
748
+ args: [{
749
+ selector: '[tileStyle]'
750
+ }]
751
+ }], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i0.ElementRef }], propDecorators: { backColor: [{
752
+ type: Input
753
+ }] } });
754
+
755
+ class TileComponent extends TilePropsComponent {
756
+ constructor() {
757
+ super(...arguments);
758
+ this.runningCommand = false;
759
+ }
760
+ onClick(ev) {
761
+ if (this.edit || this.disableClick || this.runningCommand || !this.dynamicCommand) {
762
+ return false;
763
+ }
764
+ PreventDefaulEvent(ev);
765
+ const command = this.dynamicCommand;
766
+ const e = { command, DynamicSetting: null };
767
+ this.runningCommand = true;
768
+ this._cdr.detectChanges();
769
+ BarsaApi.Common.CustomCodeManager.RunDynamicCommand(command.Id, e, (res) => {
770
+ this.runningCommand = false;
771
+ if (res && typeof res.Detail !== 'undefined') {
772
+ BarsaApi.Bw.Msg.Error(res.message || res.Text);
773
+ }
774
+ this._cdr.detectChanges();
775
+ });
776
+ return false;
777
+ }
778
+ ngOnInit() {
779
+ super.ngOnInit();
780
+ }
781
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TileComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
782
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: TileComponent, selector: "bt-tile", inputs: { type: "type", footerTemplate: "footerTemplate", footer: "footer", disableClick: "disableClick", title: "title", icon: "icon", subtitle: "subtitle", isDouble: "isDouble", edit: "edit", backColor: "backColor", dynamicCommand: "dynamicCommand" }, host: { listeners: { "click": "onClick($event)" } }, usesInheritance: true, ngImport: i0, template: "<fd-tile [type]=\"type\" [double]=\"isDouble\" [action]=\"edit\" tileStyle [backColor]=\"backColor\">\n @if (edit && !data.Locked) {\n <button fd-button fd-tile-action-close fdType=\"transparent\" (click)=\"hideClick.emit()\"></button>\n } @if (edit && !data.Locked) {\n <button fd-button fd-tile-action-indicator fdType=\"transparent\" [fdMenuTrigger]=\"menu\"></button>\n }\n <div fd-tile-header>\n <h1 fd-tile-title>\n {{ title | bbbTranslate }}\n </h1>\n <h2 fd-tile-subtitle>\n {{ subtitle | bbbTranslate }}\n </h2>\n </div>\n <ng-content></ng-content>\n <ng-container [ngTemplateOutlet]=\"footerTemplate ? footerTemplate : defaultFooter\"></ng-container>\n</fd-tile>\n<ng-template #defaultFooter>\n @if (footer) {\n <bt-footer-tile [settings]=\"footer\"></bt-footer-tile>\n }\n</ng-template>\n<fd-menu #menu>\n <li fd-menu-item>\n <a (click)=\"menu.close(); renameClick.emit()\" fd-menu-interactive>\n <span fd-menu-title>{{ 'Rename' | bbbTranslate }}</span>\n </a>\n </li>\n</fd-menu>\n@if (runningCommand) {\n<bsu-mask></bsu-mask>\n}\n", styles: [":host,fd-tile{display:block}\n"], dependencies: [{ kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i3$1.MenuComponent, selector: "fd-menu", inputs: ["mobile", "disabled", "focusTrapped", "focusAutoCapture", "openOnHoverTime", "mobileConfig", "ariaLabel", "ariaLabelledby", "id"], outputs: ["activePath"] }, { kind: "component", type: i3$1.MenuItemComponent, selector: "li[fd-menu-item]", inputs: ["disabled", "itemId", "submenu", "parentSubmenu", "hasSeparator"], outputs: ["onSelect"], exportAs: ["fd-menu-item"] }, { kind: "component", type: i3$1.MenuInteractiveComponent, selector: "[fd-menu-interactive]" }, { kind: "directive", type: i3$1.MenuTitleDirective, selector: "[fd-menu-title]" }, { kind: "directive", type: i3$1.MenuTriggerDirective, selector: "[fdMenuTrigger]", inputs: ["fdMenuTrigger"] }, { kind: "component", type: i1$3.TileComponent, selector: "fd-tile", inputs: ["class", "size", "double", "type", "action", "clickable"], outputs: ["tileClick"] }, { kind: "directive", type: i1$3.TileHeaderDirective, selector: "[fdTileHeader], [fd-tile-header]", inputs: ["twoColumn"] }, { kind: "directive", type: i1$3.TileTitleDirective, selector: "[fdTileTitle], [fd-tile-title]" }, { kind: "directive", type: i1$3.TileSubtitleDirective, selector: "[fdTileTitle], [fd-tile-subtitle]" }, { kind: "directive", type: i1$3.TileActionCloseDirective, selector: "[fdTileActionClose], [fd-tile-action-close]", inputs: ["class"] }, { kind: "directive", type: i1$3.TileActionIndicatorDirective, selector: "[fdTileActionIndicator], [fd-tile-action-indicator]", inputs: ["class"] }, { kind: "component", type: i4.MaskComponent, selector: "bsu-mask", inputs: ["size", "top"] }, { kind: "component", type: FooterTileComponent, selector: "bt-footer-tile", inputs: ["settings"] }, { kind: "directive", type: TileStyleDirective, selector: "[tileStyle]", inputs: ["backColor"] }, { kind: "pipe", type: i1.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
783
+ }
784
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TileComponent, decorators: [{
785
+ type: Component,
786
+ args: [{ selector: 'bt-tile', changeDetection: ChangeDetectionStrategy.OnPush, template: "<fd-tile [type]=\"type\" [double]=\"isDouble\" [action]=\"edit\" tileStyle [backColor]=\"backColor\">\n @if (edit && !data.Locked) {\n <button fd-button fd-tile-action-close fdType=\"transparent\" (click)=\"hideClick.emit()\"></button>\n } @if (edit && !data.Locked) {\n <button fd-button fd-tile-action-indicator fdType=\"transparent\" [fdMenuTrigger]=\"menu\"></button>\n }\n <div fd-tile-header>\n <h1 fd-tile-title>\n {{ title | bbbTranslate }}\n </h1>\n <h2 fd-tile-subtitle>\n {{ subtitle | bbbTranslate }}\n </h2>\n </div>\n <ng-content></ng-content>\n <ng-container [ngTemplateOutlet]=\"footerTemplate ? footerTemplate : defaultFooter\"></ng-container>\n</fd-tile>\n<ng-template #defaultFooter>\n @if (footer) {\n <bt-footer-tile [settings]=\"footer\"></bt-footer-tile>\n }\n</ng-template>\n<fd-menu #menu>\n <li fd-menu-item>\n <a (click)=\"menu.close(); renameClick.emit()\" fd-menu-interactive>\n <span fd-menu-title>{{ 'Rename' | bbbTranslate }}</span>\n </a>\n </li>\n</fd-menu>\n@if (runningCommand) {\n<bsu-mask></bsu-mask>\n}\n", styles: [":host,fd-tile{display:block}\n"] }]
787
+ }], propDecorators: { type: [{
788
+ type: Input
789
+ }], footerTemplate: [{
790
+ type: Input
791
+ }], footer: [{
792
+ type: Input
793
+ }], disableClick: [{
794
+ type: Input
795
+ }], title: [{
796
+ type: Input
797
+ }], icon: [{
798
+ type: Input
799
+ }], subtitle: [{
800
+ type: Input
801
+ }], isDouble: [{
802
+ type: Input
803
+ }], edit: [{
804
+ type: Input
805
+ }], backColor: [{
806
+ type: Input
807
+ }], dynamicCommand: [{
808
+ type: Input
809
+ }], onClick: [{
810
+ type: HostListener,
811
+ args: ['click', ['$event']]
812
+ }] } });
813
+
814
+ class TilePropPipe {
815
+ transform(data, prop, parameters) {
816
+ if (data) {
817
+ if (prop === 'Title') {
818
+ return data.TileTitle;
819
+ }
820
+ if (prop === 'Subtitle') {
821
+ return data.Subtitle;
822
+ }
823
+ if (prop === 'DynamicCommand') {
824
+ return data['DynamicCommand'];
825
+ }
826
+ const val = data.Component.Settings.TileSetting[prop];
827
+ if (typeof val === 'undefined') {
828
+ return data.Component.Settings[prop];
829
+ }
830
+ return val;
831
+ }
832
+ return parameters ? parameters.TileSetting[prop] : '';
833
+ }
834
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TilePropPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
835
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.5", ngImport: i0, type: TilePropPipe, name: "tileProp" }); }
836
+ }
837
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TilePropPipe, decorators: [{
838
+ type: Pipe,
839
+ args: [{
840
+ name: 'tileProp'
841
+ }]
842
+ }] });
843
+
844
+ class FormTileComponent extends BaseBtTileComponent {
845
+ ngOnInit() {
846
+ super.ngOnInit();
847
+ const options = {
848
+ Parameters: [],
849
+ Method: this.settings.RunBlMethod,
850
+ SuccessFn: (mo) => {
851
+ this.params = {
852
+ moId: mo.$State === 'New' ? '0' : mo.Id,
853
+ typeDefId: this.settings.TypeDef.Id,
854
+ viewId: this.settings.TypeViewEntity.Id
855
+ };
856
+ this._cdr.detectChanges();
857
+ },
858
+ FailFn: () => { }
859
+ };
860
+ BarsaApi.Bw.RunBlMethodAsync(options);
861
+ }
862
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: FormTileComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
863
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: FormTileComponent, selector: "bt-form-tile", usesInheritance: true, ngImport: i0, template: "<bt-tile\r\n [data]=\"data\"\r\n [type]=\"'launch'\"\r\n [edit]=\"edit\"\r\n [title]=\"data | tileProp: 'Title':parameters\"\r\n [subtitle]=\"data | tileProp: 'Subtitle':parameters\"\r\n [dynamicCommand]=\"data | tileProp: 'DynamicCommand':parameters\"\r\n [isDouble]=\"data | tileProp: 'IsDouble':parameters\"\r\n [footer]=\"data | tileProp: 'Footer':parameters\"\r\n [disableClick]=\"true\"\r\n (hideClick)=\"hideClick.emit()\"\r\n (renameClick)=\"renameClick.emit()\"\r\n>\r\n <div fd-tile-content>\r\n @if (params) {\r\n <bnrc-form [params]=\"params\"></bnrc-form>\r\n }\r\n </div>\r\n</bt-tile>\r\n", styles: [":host{display:block}bnrc-form{z-index:3}\n"], dependencies: [{ kind: "directive", type: i1$3.TileContentDirective, selector: "[fdTileContent], [fd-tile-content]", inputs: ["twoColumn"] }, { kind: "component", type: i1.FormComponent, selector: "bnrc-form", inputs: ["params", "customFormPanelUi", "formPanelCtrl", "UlvMainCtrlr", "formPanelCtrlId", "saveOnChange", "inlineEditInReport"], outputs: ["titleChanged", "moChanged", "formClose", "formRendered", "bruleAction", "beforeTransition", "afterTransition"] }, { kind: "component", type: TileComponent, selector: "bt-tile", inputs: ["type", "footerTemplate", "footer", "disableClick", "title", "icon", "subtitle", "isDouble", "edit", "backColor", "dynamicCommand"] }, { kind: "pipe", type: TilePropPipe, name: "tileProp" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
864
+ }
865
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: FormTileComponent, decorators: [{
866
+ type: Component,
867
+ args: [{ selector: 'bt-form-tile', changeDetection: ChangeDetectionStrategy.OnPush, template: "<bt-tile\r\n [data]=\"data\"\r\n [type]=\"'launch'\"\r\n [edit]=\"edit\"\r\n [title]=\"data | tileProp: 'Title':parameters\"\r\n [subtitle]=\"data | tileProp: 'Subtitle':parameters\"\r\n [dynamicCommand]=\"data | tileProp: 'DynamicCommand':parameters\"\r\n [isDouble]=\"data | tileProp: 'IsDouble':parameters\"\r\n [footer]=\"data | tileProp: 'Footer':parameters\"\r\n [disableClick]=\"true\"\r\n (hideClick)=\"hideClick.emit()\"\r\n (renameClick)=\"renameClick.emit()\"\r\n>\r\n <div fd-tile-content>\r\n @if (params) {\r\n <bnrc-form [params]=\"params\"></bnrc-form>\r\n }\r\n </div>\r\n</bt-tile>\r\n", styles: [":host{display:block}bnrc-form{z-index:3}\n"] }]
868
+ }] });
869
+
870
+ class ActionItemComponent extends TileComponent {
871
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: ActionItemComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
872
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: ActionItemComponent, selector: "bt-action-item", usesInheritance: true, ngImport: i0, template: "<div [class.action-item-edit-mode]=\"edit\" class=\"action-item\">\r\n @if (icon) {\r\n <fd-icon [glyph]=\"icon\"></fd-icon>\r\n }\r\n <h1 fd-tile-title>{{ title }}</h1>\r\n\r\n @if (subtitle) {\r\n <h2 fd-tile-subtitle>{{ subtitle }}</h2>\r\n } @if (edit && !data.Locked) {\r\n <div class=\"buttons\">\r\n <button fd-button fd-tile-action-close fdType=\"transparent\" (click)=\"hideClick.emit()\"></button>\r\n <button fd-button fd-tile-action-indicator fdType=\"transparent\" [fdMenuTrigger]=\"menu\"></button>\r\n </div>\r\n }\r\n <fd-menu #menu>\r\n <li fd-menu-item>\r\n <a (click)=\"menu.close(); renameClick.emit()\" fd-menu-interactive>\r\n <span fd-menu-title>{{ 'Rename' | bbbTranslate }}</span>\r\n </a>\r\n </li>\r\n </fd-menu>\r\n</div>\r\n", styles: [".action-item{display:flex;justify-content:space-between;height:100%;align-items:center;column-gap:10px;padding:7px;background-color:var(--sapTile_Background, #fff);cursor:pointer;box-shadow:var(--sapContent_Shadow0, 0 0 0 .0625rem rgba(0, 0, 0, .1), 0 .125rem .5rem 0 rgba(0, 0, 0, .1));border-radius:var(--sapElement_BorderCornerRadius, .25rem);border:.0625rem solid var(--sapTile_BorderColor, transparent)}.action-item:hover{background-color:var(--sapBackgroundColor);border-color:var(--sapTile_Interactive_BorderColor)}.action-item fd-icon{color:var(--sapLinkColor, #0a6ed1);font-size:1.3rem;line-height:0}.action-item-edit-mode h1,.action-item-edit-mode h2{opacity:.3}.action-item-edit-mode .buttons{display:flex;column-gap:2px}.action-item-edit-mode .buttons button{display:flex}h1{text-decoration:none;color:var(--sapLinkColor, #0a6ed1);text-shadow:var(--sapContent_TextShadow, 0 0 .125rem #fff)}\n"], dependencies: [{ kind: "component", type: i2.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i1$2.IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "color", "background", "class", "ariaLabel", "ariaHidden"] }, { kind: "component", type: i3$1.MenuComponent, selector: "fd-menu", inputs: ["mobile", "disabled", "focusTrapped", "focusAutoCapture", "openOnHoverTime", "mobileConfig", "ariaLabel", "ariaLabelledby", "id"], outputs: ["activePath"] }, { kind: "component", type: i3$1.MenuItemComponent, selector: "li[fd-menu-item]", inputs: ["disabled", "itemId", "submenu", "parentSubmenu", "hasSeparator"], outputs: ["onSelect"], exportAs: ["fd-menu-item"] }, { kind: "component", type: i3$1.MenuInteractiveComponent, selector: "[fd-menu-interactive]" }, { kind: "directive", type: i3$1.MenuTitleDirective, selector: "[fd-menu-title]" }, { kind: "directive", type: i3$1.MenuTriggerDirective, selector: "[fdMenuTrigger]", inputs: ["fdMenuTrigger"] }, { kind: "directive", type: i1$3.TileTitleDirective, selector: "[fdTileTitle], [fd-tile-title]" }, { kind: "directive", type: i1$3.TileSubtitleDirective, selector: "[fdTileTitle], [fd-tile-subtitle]" }, { kind: "directive", type: i1$3.TileActionCloseDirective, selector: "[fdTileActionClose], [fd-tile-action-close]", inputs: ["class"] }, { kind: "directive", type: i1$3.TileActionIndicatorDirective, selector: "[fdTileActionIndicator], [fd-tile-action-indicator]", inputs: ["class"] }, { kind: "pipe", type: i1.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
873
+ }
874
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: ActionItemComponent, decorators: [{
875
+ type: Component,
876
+ args: [{ selector: 'bt-action-item', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [class.action-item-edit-mode]=\"edit\" class=\"action-item\">\r\n @if (icon) {\r\n <fd-icon [glyph]=\"icon\"></fd-icon>\r\n }\r\n <h1 fd-tile-title>{{ title }}</h1>\r\n\r\n @if (subtitle) {\r\n <h2 fd-tile-subtitle>{{ subtitle }}</h2>\r\n } @if (edit && !data.Locked) {\r\n <div class=\"buttons\">\r\n <button fd-button fd-tile-action-close fdType=\"transparent\" (click)=\"hideClick.emit()\"></button>\r\n <button fd-button fd-tile-action-indicator fdType=\"transparent\" [fdMenuTrigger]=\"menu\"></button>\r\n </div>\r\n }\r\n <fd-menu #menu>\r\n <li fd-menu-item>\r\n <a (click)=\"menu.close(); renameClick.emit()\" fd-menu-interactive>\r\n <span fd-menu-title>{{ 'Rename' | bbbTranslate }}</span>\r\n </a>\r\n </li>\r\n </fd-menu>\r\n</div>\r\n", styles: [".action-item{display:flex;justify-content:space-between;height:100%;align-items:center;column-gap:10px;padding:7px;background-color:var(--sapTile_Background, #fff);cursor:pointer;box-shadow:var(--sapContent_Shadow0, 0 0 0 .0625rem rgba(0, 0, 0, .1), 0 .125rem .5rem 0 rgba(0, 0, 0, .1));border-radius:var(--sapElement_BorderCornerRadius, .25rem);border:.0625rem solid var(--sapTile_BorderColor, transparent)}.action-item:hover{background-color:var(--sapBackgroundColor);border-color:var(--sapTile_Interactive_BorderColor)}.action-item fd-icon{color:var(--sapLinkColor, #0a6ed1);font-size:1.3rem;line-height:0}.action-item-edit-mode h1,.action-item-edit-mode h2{opacity:.3}.action-item-edit-mode .buttons{display:flex;column-gap:2px}.action-item-edit-mode .buttons button{display:flex}h1{text-decoration:none;color:var(--sapLinkColor, #0a6ed1);text-shadow:var(--sapContent_TextShadow, 0 0 .125rem #fff)}\n"] }]
877
+ }] });
878
+
879
+ class ActionsLinkComponent extends BaseComponent {
880
+ /**
881
+ *
882
+ */
883
+ constructor(_cdr) {
884
+ super();
885
+ this._cdr = _cdr;
886
+ }
887
+ ngOnInit() {
888
+ super.ngOnInit();
889
+ this.hide = this.actionsLink?.length === 0;
890
+ }
891
+ ngOnChanges(changes) {
892
+ super.ngOnChanges(changes);
893
+ const { actionsLink } = changes;
894
+ if (actionsLink && !actionsLink.firstChange) {
895
+ this.hide = actionsLink.currentValue?.length === 0;
896
+ this._cdr.detectChanges();
897
+ }
898
+ }
899
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: ActionsLinkComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
900
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: ActionsLinkComponent, selector: "bt-actions-link", inputs: { actionsLink: "actionsLink", edit: "edit" }, host: { properties: { "class.hide": "this.hide" } }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "@for (actionItem of actionsLink; track actionItem) {\r\n<bt-action-item\r\n cdkDrag\r\n [data]=\"actionItem\"\r\n [edit]=\"edit\"\r\n [title]=\"actionItem | tileProp: 'Title'\"\r\n [subtitle]=\"actionItem | tileProp: 'Subtitle'\"\r\n [dynamicCommand]=\"actionItem | tileProp: 'DynamicCommand'\"\r\n [isDouble]=\"actionItem | tileProp: 'IsDouble'\"\r\n [footer]=\"actionItem | tileProp: 'Footer'\"\r\n [icon]=\"actionItem | tileProp: 'Icon'\"\r\n [cdkDragDisabled]=\"!actionItem || actionItem.Locked\"\r\n [mo]=\"actionItem\"\r\n>\r\n</bt-action-item>\r\n}\r\n", styles: [":host{display:flex;width:100%;row-gap:3px;flex-wrap:wrap;border-radius:var(--sapElement_BorderCornerRadius, .25rem);column-gap:3px;padding:1rem 0}bt-action-item{margin-top:auto;margin-bottom:auto}\n"], dependencies: [{ kind: "directive", type: i2$1.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "component", type: ActionItemComponent, selector: "bt-action-item" }, { kind: "pipe", type: TilePropPipe, name: "tileProp" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
901
+ }
902
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: ActionsLinkComponent, decorators: [{
903
+ type: Component,
904
+ args: [{ selector: 'bt-actions-link', changeDetection: ChangeDetectionStrategy.OnPush, template: "@for (actionItem of actionsLink; track actionItem) {\r\n<bt-action-item\r\n cdkDrag\r\n [data]=\"actionItem\"\r\n [edit]=\"edit\"\r\n [title]=\"actionItem | tileProp: 'Title'\"\r\n [subtitle]=\"actionItem | tileProp: 'Subtitle'\"\r\n [dynamicCommand]=\"actionItem | tileProp: 'DynamicCommand'\"\r\n [isDouble]=\"actionItem | tileProp: 'IsDouble'\"\r\n [footer]=\"actionItem | tileProp: 'Footer'\"\r\n [icon]=\"actionItem | tileProp: 'Icon'\"\r\n [cdkDragDisabled]=\"!actionItem || actionItem.Locked\"\r\n [mo]=\"actionItem\"\r\n>\r\n</bt-action-item>\r\n}\r\n", styles: [":host{display:flex;width:100%;row-gap:3px;flex-wrap:wrap;border-radius:var(--sapElement_BorderCornerRadius, .25rem);column-gap:3px;padding:1rem 0}bt-action-item{margin-top:auto;margin-bottom:auto}\n"] }]
905
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { hide: [{
906
+ type: HostBinding,
907
+ args: ['class.hide']
908
+ }], actionsLink: [{
909
+ type: Input
910
+ }], edit: [{
911
+ type: Input
912
+ }] } });
913
+
914
+ class TileRendererDirective extends BaseDirective {
915
+ constructor(_cdr, _portalService, _vcr, _injector, _el) {
916
+ super(_el);
917
+ this._cdr = _cdr;
918
+ this._portalService = _portalService;
919
+ this._vcr = _vcr;
920
+ this._injector = _injector;
921
+ this._el = _el;
922
+ this.hideClick = new EventEmitter();
923
+ this.renameClick = new EventEmitter();
924
+ }
925
+ ngOnInit() {
926
+ super.ngOnInit();
927
+ if (!this.component) {
928
+ return;
929
+ }
930
+ const { Module, ModuleFileName, Name, Selector } = this.component;
931
+ this._portalService
932
+ .getComponent(Module, ModuleFileName, Name, Selector, this._injector)
933
+ .pipe(takeUntil(this._onDestroy$))
934
+ .subscribe((componentRef) => {
935
+ const instance = componentRef.instance;
936
+ instance.data = this.data;
937
+ instance.edit = this.edit;
938
+ instance.hideClick.pipe(takeUntil(this._onDestroy$)).subscribe(() => {
939
+ this.hideClick.emit();
940
+ });
941
+ instance.renameClick.pipe(takeUntil(this._onDestroy$)).subscribe(() => this.renameClick.emit());
942
+ this._vcr.insert(componentRef.hostView);
943
+ this._tileRef = componentRef;
944
+ // this._cdr.detectChanges();
945
+ });
946
+ }
947
+ ngOnChanges(changes) {
948
+ const { edit } = changes;
949
+ if (edit && !edit.firstChange) {
950
+ this._tileRef.instance.setEditHome(edit.currentValue);
951
+ }
952
+ }
953
+ ngOnDestroy() {
954
+ super.ngOnDestroy();
955
+ if (this._tileRef) {
956
+ this._tileRef.destroy();
957
+ }
958
+ }
959
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TileRendererDirective, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.PortalService }, { token: i0.ViewContainerRef }, { token: i0.Injector }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
960
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.5", type: TileRendererDirective, selector: "[tileRenderer]", inputs: { component: "component", data: "data", edit: "edit" }, outputs: { hideClick: "hideClick", renameClick: "renameClick" }, usesInheritance: true, usesOnChanges: true, ngImport: i0 }); }
961
+ }
962
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TileRendererDirective, decorators: [{
963
+ type: Directive,
964
+ args: [{
965
+ selector: '[tileRenderer]'
966
+ }]
967
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.PortalService }, { type: i0.ViewContainerRef }, { type: i0.Injector }, { type: i0.ElementRef }], propDecorators: { component: [{
968
+ type: Input
969
+ }], data: [{
970
+ type: Input
971
+ }], edit: [{
972
+ type: Input
973
+ }], hideClick: [{
974
+ type: Output
975
+ }], renameClick: [{
976
+ type: Output
977
+ }] } });
978
+
979
+ class TilesViewerGroupComponent extends BaseComponent {
980
+ constructor(_el) {
981
+ super();
982
+ this._el = _el;
983
+ this.tilesDropped = new EventEmitter();
984
+ this.hideAppTileClick = new EventEmitter();
985
+ this.renameAppTileClick = new EventEmitter();
986
+ this.toggleGroup = new EventEmitter();
987
+ this.resetGroup = new EventEmitter();
988
+ this.deleteGroup = new EventEmitter();
989
+ this.marginRightTile = null;
990
+ }
991
+ ngAfterViewInit() {
992
+ super.ngAfterViewInit();
993
+ if (this.deviceSize === 's') {
994
+ const t = document.body.clientWidth % 154;
995
+ this.marginRightTile = t / 3;
996
+ }
997
+ }
998
+ onDrop(appTileGroup, event) {
999
+ if (!this.edit || appTileGroup.Locked) {
1000
+ return;
1001
+ }
1002
+ this.tilesDropped.emit({ appTileGroup, event });
1003
+ }
1004
+ onAppTileHideClick(appTile) {
1005
+ this.hideAppTileClick.emit(appTile);
1006
+ }
1007
+ onAppTileRenameClick(appTile) {
1008
+ this.renameAppTileClick.emit(appTile);
1009
+ }
1010
+ onDelete(appTileGroup) {
1011
+ this.deleteGroup.emit(appTileGroup);
1012
+ }
1013
+ onToggleShowHide(appTileGroup) {
1014
+ this.toggleGroup.emit(appTileGroup);
1015
+ }
1016
+ onReset(appTileGroup) {
1017
+ this.resetGroup.emit(appTileGroup);
1018
+ }
1019
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TilesViewerGroupComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
1020
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: TilesViewerGroupComponent, selector: "bt-tiles-viewer-group", inputs: { appTileGroup: "appTileGroup", stackContent: "stackContent", edit: "edit", rtl: "rtl", isAppTileSubGroup: "isAppTileSubGroup", deviceSize: "deviceSize" }, outputs: { tilesDropped: "tilesDropped", hideAppTileClick: "hideAppTileClick", renameAppTileClick: "renameAppTileClick", toggleGroup: "toggleGroup", resetGroup: "resetGroup", deleteGroup: "deleteGroup" }, usesInheritance: true, ngImport: i0, template: "<fd-layout-panel [fixed]=\"true\" [attr.editHome]=\"edit\" cdkDrag [cdkDragDisabled]=\"!edit || !stackContent\">\n @if (edit || stackContent || isAppTileSubGroup) {\n <fd-layout-panel-header>\n <fd-layout-panel-head>\n <h2 fd-layout-panel-title>{{ appTileGroup.navigatorTitle }}</h2>\n </fd-layout-panel-head>\n @if (edit) {\n <fd-layout-panel-actions class=\"group-btns\">\n <fd-toolbar [shouldOverflow]=\"false\" [fdType]=\"'transparent'\" [clearBorder]=\"true\">\n <button\n fd-button\n fd-toolbar-item\n [label]=\"!appTileGroup.navigatorVisible ? ('Show' | bbbTranslate) : ('Hide' | bbbTranslate)\"\n (click)=\"onToggleShowHide(appTileGroup)\"\n ></button>\n @if (appTileGroup.Predefined && appTileGroup.$TileSettingChanged) {\n <button fd-button [label]=\"'Refresh' | bbbTranslate\" (click)=\"onReset(appTileGroup)\"></button>\n } @if (!appTileGroup.Predefined) {\n <button\n fd-button\n [label]=\"'Delete' | bbbTranslate\"\n [fdType]=\"'negative'\"\n (click)=\"onDelete(appTileGroup)\"\n ></button>\n }\n </fd-toolbar>\n </fd-layout-panel-actions>\n }\n </fd-layout-panel-header>\n }\n <fd-layout-panel-body [bleed]=\"!stackContent\" [class.small-size]=\"deviceSize === 's'\">\n <div\n class=\"tile-wrapper\"\n [ngClass]=\"{ rtl: rtl, ltr: !rtl, s: deviceSize === 's' }\"\n fd-panel-content\n #tiles=\"cdkDropList\"\n cdkDropList\n cdkDropListOrientation=\"horizontal\"\n (cdkDropListDropped)=\"onDrop(appTileGroup, $event)\"\n [cdkDropListConnectedTo]=\"actionLinks\"\n [cdkDropListData]=\"{\n isTile: true,\n items: appTileGroup.navigatorTiles || []\n }\"\n >\n @if (!edit) { @if (!appTileGroup.$TilesLoaded) {\n <fd-busy-indicator fd-title [loading]=\"true\"></fd-busy-indicator>\n } @else if (!appTileGroup.navigatorTiles.length && appTileGroup.$TilesLoaded) {\n <h5 fd-title></h5>\n } } @for (appTile of appTileGroup.navigatorTiles; track appTile; let k = $index) {\n <div\n [class.edit-home]=\"edit\"\n [class.isdouble]=\"appTile.Component?.Settings?.TileSetting?.IsDouble\"\n cdkDrag\n [cdkDragDisabled]=\"!edit || appTileGroup.Locked\"\n >\n <span\n [dynamicCommand]=\"appTile.DynamicCommand\"\n [enableCommand]=\"!edit && appTile.Component\"\n tileRenderer\n [data]=\"appTile\"\n [edit]=\"edit\"\n [component]=\"appTile.Component\"\n (hideClick)=\"onAppTileHideClick(appTile)\"\n (renameClick)=\"onAppTileRenameClick(appTile)\"\n ></span>\n </div>\n } @if (edit) {\n <fd-tile class=\"add-tile\" [routerLink]=\"['/home/appfinder']\">\n <div>\n <fd-icon glyph=\"add\"></fd-icon>\n </div>\n </fd-tile>\n }\n </div>\n </fd-layout-panel-body>\n</fd-layout-panel>\n\n<bt-actions-link\n [class.actions-link-edit-home]=\"edit\"\n [actionsLink]=\"appTileGroup.navigatorActionLinks\"\n [edit]=\"edit\"\n [style.min-height]=\"edit ? '4rem' : 'auto'\"\n cdkDropList\n #actionLinks=\"cdkDropList\"\n cdkDropListOrientation=\"horizontal\"\n [cdkDropListConnectedTo]=\"tiles\"\n (cdkDropListDropped)=\"onDrop(appTileGroup, $event)\"\n [cdkDropListData]=\"{\n isTile: false,\n items: appTileGroup.navigatorActionLinks || []\n }\"\n>\n</bt-actions-link>\n@for (appTileSubGroup of appTileGroup.$Children; track appTileSubGroup) {\n<bt-tiles-viewer-group\n [appTileGroup]=\"appTileSubGroup\"\n [edit]=\"edit\"\n [rtl]=\"rtl\"\n [stackContent]=\"stackContent\"\n [isAppTileSubGroup]=\"true\"\n [deviceSize]=\"deviceSize\"\n (tilesDropped)=\"tilesDropped.emit($event)\"\n (renameAppTileClick)=\"renameAppTileClick.emit($event)\"\n (hideAppTileClick)=\"hideAppTileClick.emit($event)\"\n (resetGroup)=\"resetGroup.emit($event)\"\n (deleteGroup)=\"deleteGroup.emit($event)\"\n (toggleGroup)=\"toggleGroup.emit($event)\"\n></bt-tiles-viewer-group>\n}\n", styles: [":host{display:block}fd-layout-panel{box-shadow:none}fd-layout-panel fd-layout-panel-body:not(.small-size){margin-top:.5rem}fd-layout-panel fd-layout-panel-body.small-size{padding:1rem .5rem}fd-layout-panel[editHome=false]{background:transparent}::ng-deep .fd-panel__header{border:none;padding-left:0;padding-right:0}::ng-deep fd-panel[edithome=false] .fd-panel__header:first-child{display:none}::ng-deep .fd-panel__content{border-bottom:none;padding:1px}.tile-wrapper{column-gap:3px;row-gap:1rem;display:inline-flex;flex-wrap:wrap;align-items:center}.actions-link-edit-home{background-color:var(--sapGroup_ContentBackground, #fff);border-color:var(--sapGroup_ContentBorderColor, #d9d9d9);border-width:var(--sapElement_BorderWidth, .0625rem);border-style:solid}.add-tile{background-color:transparent!important}.add-tile ::ng-deep div{background-color:transparent!important;margin:10px 0}.add-tile div:first-child{display:flex;align-items:center;justify-content:center;height:100%;width:100%}.add-tile fd-icon{font-size:1.5rem;color:#3c4043}fd-layout-panel-body.small-size{display:flex;justify-content:center}fd-layout-panel-body.small-size .tile-wrapper{display:grid;grid-template-columns:154px 154px;gap:1rem}fd-layout-panel-body.small-size .tile-wrapper .isdouble{grid-column-start:1;grid-column-end:3}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2$1.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i2$1.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "component", type: i3$2.BusyIndicatorComponent, selector: "fd-busy-indicator", inputs: ["loading", "size", "block", "ariaLabel", "title", "label", "ariaLive"] }, { kind: "component", type: i2.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i1$2.IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "color", "background", "class", "ariaLabel", "ariaHidden"] }, { kind: "component", type: i6.LayoutPanelComponent, selector: "fd-layout-panel", inputs: ["backgroundImage", "id", "transparent"] }, { kind: "component", type: i6.LayoutPanelHeaderComponent, selector: "fd-layout-panel-header" }, { kind: "component", type: i6.LayoutPanelHeadComponent, selector: "fd-layout-panel-head" }, { kind: "directive", type: i6.LayoutPanelTitleDirective, selector: "[fd-layout-panel-title]" }, { kind: "component", type: i6.LayoutPanelActionsComponent, selector: "fd-layout-panel-actions" }, { kind: "component", type: i6.LayoutPanelBodyComponent, selector: "fd-layout-panel-body", inputs: ["bleed"] }, { kind: "component", type: i8.TitleComponent, selector: "[fd-title], [fdTitle]", inputs: ["headerSize", "wrap"], exportAs: ["fd-title"] }, { kind: "directive", type: i9.PanelContentDirective, selector: "[fd-panel-content]", inputs: ["height", "minHeight", "maxHeight", "ariaLabel", "ariaLabelledBy", "role", "id"] }, { kind: "component", type: i1$3.TileComponent, selector: "fd-tile", inputs: ["class", "size", "double", "type", "action", "clickable"], outputs: ["tileClick"] }, { kind: "component", type: i10.ToolbarComponent, selector: "fd-toolbar", inputs: ["titleId", "class", "shouldOverflow", "fdType", "title", "active", "clearBorder", "forceOverflow", "tabindex", "ariaLabel", "ariaLabelledBy"] }, { kind: "directive", type: i10.ToolbarItemDirective, selector: "[fd-toolbar-item], [fdOverflowGroup], [fdOverflowPriority]", inputs: ["fdOverflowPriority", "fdOverflowGroup"] }, { kind: "component", type: ActionsLinkComponent, selector: "bt-actions-link", inputs: ["actionsLink", "edit"] }, { kind: "component", type: TilesViewerGroupComponent, selector: "bt-tiles-viewer-group", inputs: ["appTileGroup", "stackContent", "edit", "rtl", "isAppTileSubGroup", "deviceSize"], outputs: ["tilesDropped", "hideAppTileClick", "renameAppTileClick", "toggleGroup", "resetGroup", "deleteGroup"] }, { kind: "directive", type: TileRendererDirective, selector: "[tileRenderer]", inputs: ["component", "data", "edit"], outputs: ["hideClick", "renameClick"] }, { kind: "pipe", type: i1.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1021
+ }
1022
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TilesViewerGroupComponent, decorators: [{
1023
+ type: Component,
1024
+ args: [{ selector: 'bt-tiles-viewer-group', changeDetection: ChangeDetectionStrategy.OnPush, template: "<fd-layout-panel [fixed]=\"true\" [attr.editHome]=\"edit\" cdkDrag [cdkDragDisabled]=\"!edit || !stackContent\">\n @if (edit || stackContent || isAppTileSubGroup) {\n <fd-layout-panel-header>\n <fd-layout-panel-head>\n <h2 fd-layout-panel-title>{{ appTileGroup.navigatorTitle }}</h2>\n </fd-layout-panel-head>\n @if (edit) {\n <fd-layout-panel-actions class=\"group-btns\">\n <fd-toolbar [shouldOverflow]=\"false\" [fdType]=\"'transparent'\" [clearBorder]=\"true\">\n <button\n fd-button\n fd-toolbar-item\n [label]=\"!appTileGroup.navigatorVisible ? ('Show' | bbbTranslate) : ('Hide' | bbbTranslate)\"\n (click)=\"onToggleShowHide(appTileGroup)\"\n ></button>\n @if (appTileGroup.Predefined && appTileGroup.$TileSettingChanged) {\n <button fd-button [label]=\"'Refresh' | bbbTranslate\" (click)=\"onReset(appTileGroup)\"></button>\n } @if (!appTileGroup.Predefined) {\n <button\n fd-button\n [label]=\"'Delete' | bbbTranslate\"\n [fdType]=\"'negative'\"\n (click)=\"onDelete(appTileGroup)\"\n ></button>\n }\n </fd-toolbar>\n </fd-layout-panel-actions>\n }\n </fd-layout-panel-header>\n }\n <fd-layout-panel-body [bleed]=\"!stackContent\" [class.small-size]=\"deviceSize === 's'\">\n <div\n class=\"tile-wrapper\"\n [ngClass]=\"{ rtl: rtl, ltr: !rtl, s: deviceSize === 's' }\"\n fd-panel-content\n #tiles=\"cdkDropList\"\n cdkDropList\n cdkDropListOrientation=\"horizontal\"\n (cdkDropListDropped)=\"onDrop(appTileGroup, $event)\"\n [cdkDropListConnectedTo]=\"actionLinks\"\n [cdkDropListData]=\"{\n isTile: true,\n items: appTileGroup.navigatorTiles || []\n }\"\n >\n @if (!edit) { @if (!appTileGroup.$TilesLoaded) {\n <fd-busy-indicator fd-title [loading]=\"true\"></fd-busy-indicator>\n } @else if (!appTileGroup.navigatorTiles.length && appTileGroup.$TilesLoaded) {\n <h5 fd-title></h5>\n } } @for (appTile of appTileGroup.navigatorTiles; track appTile; let k = $index) {\n <div\n [class.edit-home]=\"edit\"\n [class.isdouble]=\"appTile.Component?.Settings?.TileSetting?.IsDouble\"\n cdkDrag\n [cdkDragDisabled]=\"!edit || appTileGroup.Locked\"\n >\n <span\n [dynamicCommand]=\"appTile.DynamicCommand\"\n [enableCommand]=\"!edit && appTile.Component\"\n tileRenderer\n [data]=\"appTile\"\n [edit]=\"edit\"\n [component]=\"appTile.Component\"\n (hideClick)=\"onAppTileHideClick(appTile)\"\n (renameClick)=\"onAppTileRenameClick(appTile)\"\n ></span>\n </div>\n } @if (edit) {\n <fd-tile class=\"add-tile\" [routerLink]=\"['/home/appfinder']\">\n <div>\n <fd-icon glyph=\"add\"></fd-icon>\n </div>\n </fd-tile>\n }\n </div>\n </fd-layout-panel-body>\n</fd-layout-panel>\n\n<bt-actions-link\n [class.actions-link-edit-home]=\"edit\"\n [actionsLink]=\"appTileGroup.navigatorActionLinks\"\n [edit]=\"edit\"\n [style.min-height]=\"edit ? '4rem' : 'auto'\"\n cdkDropList\n #actionLinks=\"cdkDropList\"\n cdkDropListOrientation=\"horizontal\"\n [cdkDropListConnectedTo]=\"tiles\"\n (cdkDropListDropped)=\"onDrop(appTileGroup, $event)\"\n [cdkDropListData]=\"{\n isTile: false,\n items: appTileGroup.navigatorActionLinks || []\n }\"\n>\n</bt-actions-link>\n@for (appTileSubGroup of appTileGroup.$Children; track appTileSubGroup) {\n<bt-tiles-viewer-group\n [appTileGroup]=\"appTileSubGroup\"\n [edit]=\"edit\"\n [rtl]=\"rtl\"\n [stackContent]=\"stackContent\"\n [isAppTileSubGroup]=\"true\"\n [deviceSize]=\"deviceSize\"\n (tilesDropped)=\"tilesDropped.emit($event)\"\n (renameAppTileClick)=\"renameAppTileClick.emit($event)\"\n (hideAppTileClick)=\"hideAppTileClick.emit($event)\"\n (resetGroup)=\"resetGroup.emit($event)\"\n (deleteGroup)=\"deleteGroup.emit($event)\"\n (toggleGroup)=\"toggleGroup.emit($event)\"\n></bt-tiles-viewer-group>\n}\n", styles: [":host{display:block}fd-layout-panel{box-shadow:none}fd-layout-panel fd-layout-panel-body:not(.small-size){margin-top:.5rem}fd-layout-panel fd-layout-panel-body.small-size{padding:1rem .5rem}fd-layout-panel[editHome=false]{background:transparent}::ng-deep .fd-panel__header{border:none;padding-left:0;padding-right:0}::ng-deep fd-panel[edithome=false] .fd-panel__header:first-child{display:none}::ng-deep .fd-panel__content{border-bottom:none;padding:1px}.tile-wrapper{column-gap:3px;row-gap:1rem;display:inline-flex;flex-wrap:wrap;align-items:center}.actions-link-edit-home{background-color:var(--sapGroup_ContentBackground, #fff);border-color:var(--sapGroup_ContentBorderColor, #d9d9d9);border-width:var(--sapElement_BorderWidth, .0625rem);border-style:solid}.add-tile{background-color:transparent!important}.add-tile ::ng-deep div{background-color:transparent!important;margin:10px 0}.add-tile div:first-child{display:flex;align-items:center;justify-content:center;height:100%;width:100%}.add-tile fd-icon{font-size:1.5rem;color:#3c4043}fd-layout-panel-body.small-size{display:flex;justify-content:center}fd-layout-panel-body.small-size .tile-wrapper{display:grid;grid-template-columns:154px 154px;gap:1rem}fd-layout-panel-body.small-size .tile-wrapper .isdouble{grid-column-start:1;grid-column-end:3}\n"] }]
1025
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { appTileGroup: [{
1026
+ type: Input
1027
+ }], stackContent: [{
1028
+ type: Input
1029
+ }], edit: [{
1030
+ type: Input
1031
+ }], rtl: [{
1032
+ type: Input
1033
+ }], isAppTileSubGroup: [{
1034
+ type: Input
1035
+ }], deviceSize: [{
1036
+ type: Input
1037
+ }], tilesDropped: [{
1038
+ type: Output
1039
+ }], hideAppTileClick: [{
1040
+ type: Output
1041
+ }], renameAppTileClick: [{
1042
+ type: Output
1043
+ }], toggleGroup: [{
1044
+ type: Output
1045
+ }], resetGroup: [{
1046
+ type: Output
1047
+ }], deleteGroup: [{
1048
+ type: Output
1049
+ }] } });
1050
+
1051
+ class EmptyListDirective {
1052
+ set emptyList(list) {
1053
+ if (!list || (!list.length && !this.hasView)) {
1054
+ const _view = this.viewContainer.createEmbeddedView(this.templateRef);
1055
+ this.setNoData(_view);
1056
+ this.hasView = true;
1057
+ }
1058
+ else if (list && list.length > 0 && this.hasView) {
1059
+ this.viewContainer.clear();
1060
+ this.hasView = false;
1061
+ }
1062
+ }
1063
+ constructor(templateRef, viewContainer, bbbPipe) {
1064
+ this.templateRef = templateRef;
1065
+ this.viewContainer = viewContainer;
1066
+ this.bbbPipe = bbbPipe;
1067
+ this.hasView = false;
1068
+ }
1069
+ setNoData(view) {
1070
+ view.rootNodes[0].innerHTML = this.bbbPipe.transform('NoData');
1071
+ }
1072
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: EmptyListDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: i1.BbbTranslatePipe }], target: i0.ɵɵFactoryTarget.Directive }); }
1073
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.5", type: EmptyListDirective, selector: "[emptyList]", inputs: { emptyList: "emptyList" }, ngImport: i0 }); }
1074
+ }
1075
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: EmptyListDirective, decorators: [{
1076
+ type: Directive,
1077
+ args: [{
1078
+ selector: '[emptyList]'
1079
+ }]
1080
+ }], ctorParameters: () => [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }, { type: i1.BbbTranslatePipe }], propDecorators: { emptyList: [{
1081
+ type: Input
1082
+ }] } });
1083
+
1084
+ class AppFinderAppListComponent extends BaseComponent {
1085
+ constructor() {
1086
+ super(...arguments);
1087
+ this.pinClick = new EventEmitter();
1088
+ this.appTileGroupsPinChange = new EventEmitter();
1089
+ }
1090
+ onPinTap(app) {
1091
+ this.pinClick.emit(app);
1092
+ }
1093
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: AppFinderAppListComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
1094
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: AppFinderAppListComponent, selector: "bt-app-finder-app-list", inputs: { appGroup: "appGroup", mobile: "mobile", searchTerm: "searchTerm", pinnedAppInAppTileGroups: "pinnedAppInAppTileGroups" }, outputs: { pinClick: "pinClick", appTileGroupsPinChange: "appTileGroupsPinChange" }, usesInheritance: true, ngImport: i0, template: "@if (appGroup) {\r\n<h5 fd-title *emptyList=\"appGroup.Apps\"></h5>\r\n@if ((appGroup.Apps | filterStr: { Title: searchTerm, mode: 'contains' }).length > 0) {\r\n<fd-fixed-card-layout [disableDragDrop]=\"true\">\r\n @for (app of appGroup.Apps | filterStr: { Title: searchTerm, mode: 'contains' }; track app; let i = $index) {\r\n <fd-card *fdCardDef=\"i\">\r\n <fd-card-header [dynCommand]=\"app.DynamicCommand\" [mo]=\"app\">\r\n @if (app.Icon) {\r\n <fd-avatar [glyph]=\"app.Icon\" size=\"s\" [title]=\"app.Title\"></fd-avatar>\r\n }\r\n <h2 fd-card-title class=\"header-title\">\r\n {{ app.Title }}\r\n </h2>\r\n <h3 fd-card-subtitle></h3>\r\n </fd-card-header>\r\n <fd-card-content>\r\n <button\r\n fd-button\r\n [glyph]=\"'pushpin-off'\"\r\n [fdType]=\"\r\n pinnedAppInAppTileGroups[app.Id]\r\n ? pinnedAppInAppTileGroups[app.Id].length\r\n ? 'emphasized'\r\n : 'standard'\r\n : app.$HasPinned\r\n ? 'emphasized'\r\n : 'standard'\r\n \"\r\n (click)=\"onPinTap(app)\"\r\n ></button>\r\n </fd-card-content>\r\n </fd-card>\r\n }\r\n</fd-fixed-card-layout>\r\n} }\r\n", styles: [":host{display:block;flex-grow:1;padding:1rem}button{cursor:pointer}h3{padding-bottom:.5rem}fd-fixed-card-layout,h5{padding-bottom:2rem;display:block}.header-title{padding-bottom:30px}fd-card-content{padding:10px;cursor:default}@media (max-width: 767px){:host{padding:0 1rem}}\n"], dependencies: [{ kind: "component", type: i1$4.AvatarComponent, selector: "fd-avatar", inputs: ["class", "id", "ariaLabel", "ariaLabelledby", "label", "size", "font", "glyph", "zoomGlyph", "circle", "transparent", "contain", "placeholder", "tile", "border", "colorAccent", "random", "clickable", "valueState", "image", "alterIcon", "backupImage"], outputs: ["avatarClicked", "zoomGlyphClicked"] }, { kind: "component", type: i2.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i3$3.CardComponent, selector: "fd-card", inputs: ["badge", "isLoading", "cardType", "id", "role"] }, { kind: "component", type: i3$3.CardHeaderComponent, selector: "fd-card-header", inputs: ["interactive", "tabindex"] }, { kind: "component", type: i3$3.CardContentComponent, selector: "fd-card-content" }, { kind: "directive", type: i3$3.CardTitleDirective, selector: "[fd-card-title]", inputs: ["id"] }, { kind: "directive", type: i3$3.CardSubtitleDirective, selector: "[fd-card-subtitle]" }, { kind: "component", type: i4$1.FixedCardLayoutComponent, selector: "fd-fixed-card-layout", inputs: ["disableDragDrop", "dragStartDelay", "cardMinimumWidth", "columnsWidthConfig", "maxColumns"], outputs: ["layoutChange", "cardDraggedDropped"] }, { kind: "directive", type: i4$1.CardDefinitionDirective, selector: "[fdCardDef]", inputs: ["fdCardDef"] }, { kind: "component", type: i8.TitleComponent, selector: "[fd-title], [fdTitle]", inputs: ["headerSize", "wrap"], exportAs: ["fd-title"] }, { kind: "directive", type: i1.DynamicCommandDirective, selector: "[dynCommand]", inputs: ["dynCommand", "mo", "enableCommand"], outputs: ["commandClick"] }, { kind: "directive", type: EmptyListDirective, selector: "[emptyList]", inputs: ["emptyList"] }, { kind: "pipe", type: i1.FilterStringPipe, name: "filterStr" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1095
+ }
1096
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: AppFinderAppListComponent, decorators: [{
1097
+ type: Component,
1098
+ args: [{ selector: 'bt-app-finder-app-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (appGroup) {\r\n<h5 fd-title *emptyList=\"appGroup.Apps\"></h5>\r\n@if ((appGroup.Apps | filterStr: { Title: searchTerm, mode: 'contains' }).length > 0) {\r\n<fd-fixed-card-layout [disableDragDrop]=\"true\">\r\n @for (app of appGroup.Apps | filterStr: { Title: searchTerm, mode: 'contains' }; track app; let i = $index) {\r\n <fd-card *fdCardDef=\"i\">\r\n <fd-card-header [dynCommand]=\"app.DynamicCommand\" [mo]=\"app\">\r\n @if (app.Icon) {\r\n <fd-avatar [glyph]=\"app.Icon\" size=\"s\" [title]=\"app.Title\"></fd-avatar>\r\n }\r\n <h2 fd-card-title class=\"header-title\">\r\n {{ app.Title }}\r\n </h2>\r\n <h3 fd-card-subtitle></h3>\r\n </fd-card-header>\r\n <fd-card-content>\r\n <button\r\n fd-button\r\n [glyph]=\"'pushpin-off'\"\r\n [fdType]=\"\r\n pinnedAppInAppTileGroups[app.Id]\r\n ? pinnedAppInAppTileGroups[app.Id].length\r\n ? 'emphasized'\r\n : 'standard'\r\n : app.$HasPinned\r\n ? 'emphasized'\r\n : 'standard'\r\n \"\r\n (click)=\"onPinTap(app)\"\r\n ></button>\r\n </fd-card-content>\r\n </fd-card>\r\n }\r\n</fd-fixed-card-layout>\r\n} }\r\n", styles: [":host{display:block;flex-grow:1;padding:1rem}button{cursor:pointer}h3{padding-bottom:.5rem}fd-fixed-card-layout,h5{padding-bottom:2rem;display:block}.header-title{padding-bottom:30px}fd-card-content{padding:10px;cursor:default}@media (max-width: 767px){:host{padding:0 1rem}}\n"] }]
1099
+ }], propDecorators: { appGroup: [{
1100
+ type: Input
1101
+ }], mobile: [{
1102
+ type: Input
1103
+ }], searchTerm: [{
1104
+ type: Input
1105
+ }], pinnedAppInAppTileGroups: [{
1106
+ type: Input
1107
+ }], pinClick: [{
1108
+ type: Output
1109
+ }], appTileGroupsPinChange: [{
1110
+ type: Output
1111
+ }] } });
1112
+
1113
+ class AppFinderGroupComponent extends BaseComponent {
1114
+ constructor() {
1115
+ super(...arguments);
1116
+ this.selectedIdChange = new EventEmitter();
1117
+ }
1118
+ ngOnChanges(changes) {
1119
+ super.ngOnChanges(changes);
1120
+ if (changes.appGroups && !changes.appGroups.firstChange) {
1121
+ const appGroups = changes.appGroups.currentValue;
1122
+ if (appGroups && appGroups.length > 0 && !this.selectedId) {
1123
+ this.selectedIdChange.emit(appGroups[0].Id);
1124
+ }
1125
+ }
1126
+ }
1127
+ OnMenuGroupClick(group) {
1128
+ this.selectedIdChange.emit(group.Id);
1129
+ }
1130
+ OnGroupClick(group) {
1131
+ this.selectedIdChange.emit(group.Id);
1132
+ }
1133
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: AppFinderGroupComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
1134
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: AppFinderGroupComponent, selector: "bt-app-finder-group", inputs: { appGroups: "appGroups", selectedId: "selectedId", listMode: "listMode" }, outputs: { selectedIdChange: "selectedIdChange" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "@if (listMode) {\r\n<div class=\"app-groups\">\r\n <ul fd-list [selection]=\"true\">\r\n @for (group of appGroups; track group; let i = $index) {\r\n <li fd-list-item [selected]=\"group.Id === selectedId\" (click)=\"OnGroupClick(group)\">\r\n <span fd-list-title>\r\n {{ group.Title }}\r\n </span>\r\n </li>\r\n }\r\n </ul>\r\n</div>\r\n} @else { @for (group of appGroups; track group; let i = $index) {\r\n<li fd-menu-item [selected]=\"group.Id === selectedId\">\r\n <a fd-menu-interactive (click)=\"OnMenuGroupClick(group)\">\r\n <span fd-menu-title>\r\n {{ group.Title }}\r\n </span>\r\n </a>\r\n</li>\r\n} }\r\n", styles: [".app-groups{width:25vw;border-left:.0625rem solid var(--sapGroup_TitleBorderColor, #d9d9d9)}\n"], dependencies: [{ kind: "component", type: i8$1.ListComponent, selector: "[fd-list], [fdList]", inputs: ["dropdownMode", "multiInputMode", "mobileMode", "hasMessage", "noBorder", "navigationIndicator", "selection", "keyboardSupport", "byline", "unreadIndicator", "role"], outputs: ["focusEscapeList"] }, { kind: "component", type: i8$1.ListItemComponent, selector: "[fdListItem] ,[fd-list-item]", inputs: ["selected", "noData", "action", "interactive", "growing", "counter", "unread", "byline", "ariaRole", "id"], outputs: ["keyDown"] }, { kind: "directive", type: i8$1.ListTitleDirective, selector: "[fd-list-title], [fdListTitle]", inputs: ["wrap"] }, { kind: "component", type: i3$1.MenuItemComponent, selector: "li[fd-menu-item]", inputs: ["disabled", "itemId", "submenu", "parentSubmenu", "hasSeparator"], outputs: ["onSelect"], exportAs: ["fd-menu-item"] }, { kind: "component", type: i3$1.MenuInteractiveComponent, selector: "[fd-menu-interactive]" }, { kind: "directive", type: i3$1.MenuTitleDirective, selector: "[fd-menu-title]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1135
+ }
1136
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: AppFinderGroupComponent, decorators: [{
1137
+ type: Component,
1138
+ args: [{ selector: 'bt-app-finder-group', changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (listMode) {\r\n<div class=\"app-groups\">\r\n <ul fd-list [selection]=\"true\">\r\n @for (group of appGroups; track group; let i = $index) {\r\n <li fd-list-item [selected]=\"group.Id === selectedId\" (click)=\"OnGroupClick(group)\">\r\n <span fd-list-title>\r\n {{ group.Title }}\r\n </span>\r\n </li>\r\n }\r\n </ul>\r\n</div>\r\n} @else { @for (group of appGroups; track group; let i = $index) {\r\n<li fd-menu-item [selected]=\"group.Id === selectedId\">\r\n <a fd-menu-interactive (click)=\"OnMenuGroupClick(group)\">\r\n <span fd-menu-title>\r\n {{ group.Title }}\r\n </span>\r\n </a>\r\n</li>\r\n} }\r\n", styles: [".app-groups{width:25vw;border-left:.0625rem solid var(--sapGroup_TitleBorderColor, #d9d9d9)}\n"] }]
1139
+ }], propDecorators: { appGroups: [{
1140
+ type: Input
1141
+ }], selectedId: [{
1142
+ type: Input
1143
+ }], listMode: [{
1144
+ type: Input
1145
+ }], selectedIdChange: [{
1146
+ type: Output
1147
+ }] } });
1148
+
1149
+ class AppFinderComponent extends BaseComponent {
1150
+ constructor() {
1151
+ super(...arguments);
1152
+ this.contentDensity = 'compact';
1153
+ this.pinClick = new EventEmitter();
1154
+ this.selectedAppGroupIdChange = new EventEmitter();
1155
+ }
1156
+ onSearchSubmit() {
1157
+ this.searchTerm = this.searchTerm2;
1158
+ }
1159
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: AppFinderComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
1160
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: AppFinderComponent, selector: "bt-app-finder", inputs: { appGroups: "appGroups", deviceSize: "deviceSize", sideContentSize: "sideContentSize", selectedAppGroup: "selectedAppGroup", selectedAppGroupId: "selectedAppGroupId", mobile: "mobile", contentDensity: "contentDensity", contentHeight: "contentHeight", pinnedAppInAppTileGroups: "pinnedAppInAppTileGroups" }, outputs: { pinClick: "pinClick", selectedAppGroupIdChange: "selectedAppGroupIdChange" }, usesInheritance: true, ngImport: i0, template: "<div class=\"wrapper\">\r\n @if (appGroups) {\r\n <fd-toolbar [fdType]=\"'solid'\">\r\n @if (deviceSize === 's') {\r\n <button\r\n fd-toolbar-item\r\n fd-button\r\n [fdMenu]=\"true\"\r\n [glyph]=\"'menu2'\"\r\n [fdType]=\"'transparent'\"\r\n [fdMenuTrigger]=\"menu\"\r\n [label]=\"selectedAppGroup?.Title\"\r\n ></button>\r\n }\r\n <fd-toolbar-spacer></fd-toolbar-spacer>\r\n <fd-input-group\r\n fd-toolbar-item\r\n type=\"search\"\r\n glyph=\"search\"\r\n [glyphAriaLabel]=\"'Search' | bbbTranslate\"\r\n [placeholder]=\"'Search' | bbbTranslate\"\r\n [button]=\"true\"\r\n [disabled]=\"false\"\r\n [(ngModel)]=\"searchTerm2\"\r\n (addOnButtonClicked)=\"onSearchSubmit()\"\r\n (keydown.enter)=\"onSearchSubmit()\"\r\n >\r\n </fd-input-group>\r\n </fd-toolbar>\r\n <div style=\"display: flex; overflow-y: auto\" [style.height]=\"contentHeight\">\r\n <div class=\"app-groups\">\r\n @if (deviceSize !== 's') {\r\n <bt-app-finder-group\r\n [appGroups]=\"appGroups\"\r\n [listMode]=\"true\"\r\n [selectedId]=\"selectedAppGroupId\"\r\n (selectedIdChange)=\"selectedAppGroupIdChange.emit($event)\"\r\n >\r\n </bt-app-finder-group>\r\n }\r\n </div>\r\n <bt-app-finder-app-list\r\n [appGroup]=\"selectedAppGroup\"\r\n [mobile]=\"mobile\"\r\n [searchTerm]=\"searchTerm\"\r\n [pinnedAppInAppTileGroups]=\"pinnedAppInAppTileGroups\"\r\n (pinClick)=\"pinClick.emit($event)\"\r\n ></bt-app-finder-app-list>\r\n </div>\r\n <fd-menu\r\n #menu\r\n [mobile]=\"deviceSize === 's'\"\r\n [mobileConfig]=\"{ title: 'Groups' | bbbTranslate, hasCloseButton: true }\"\r\n >\r\n @if (deviceSize === 's') {\r\n <bt-app-finder-group\r\n [appGroups]=\"appGroups\"\r\n [selectedId]=\"selectedAppGroupId\"\r\n (selectedIdChange)=\"menu.close(); selectedAppGroupIdChange.emit($event)\"\r\n >\r\n </bt-app-finder-group>\r\n }\r\n </fd-menu>\r\n } @else {\r\n <bsu-mask></bsu-mask>\r\n }\r\n</div>\r\n", styles: [":host{display:block;background-color:var(--sapBackgroundColor, #f7f7f7);color:var(--sapTextColor, #32363a)}:host ::ng-deep .fd-list__title{line-height:1.5rem}.wrapper{display:flex;flex-direction:column}fd-toolbar{width:100%}::ng-deep span.fd-toolbar__spacer{display:none}\n"], dependencies: [{ kind: "directive", type: i1$5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i6$1.InputGroupComponent, selector: "fd-input-group", inputs: ["placement", "required", "inline", "addOnText", "buttonFocusable", "type", "glyph", "glyphFont", "button", "isControl", "showFocus", "isExpanded", "glyphAriaLabel", "addonButtonAriaHidden", "iconTitle", "ariaLabelledBy"], outputs: ["addOnButtonClicked", "search"] }, { kind: "component", type: i3$1.MenuComponent, selector: "fd-menu", inputs: ["mobile", "disabled", "focusTrapped", "focusAutoCapture", "openOnHoverTime", "mobileConfig", "ariaLabel", "ariaLabelledby", "id"], outputs: ["activePath"] }, { kind: "directive", type: i3$1.MenuTriggerDirective, selector: "[fdMenuTrigger]", inputs: ["fdMenuTrigger"] }, { kind: "component", type: i10.ToolbarComponent, selector: "fd-toolbar", inputs: ["titleId", "class", "shouldOverflow", "fdType", "title", "active", "clearBorder", "forceOverflow", "tabindex", "ariaLabel", "ariaLabelledBy"] }, { kind: "directive", type: i10.ToolbarItemDirective, selector: "[fd-toolbar-item], [fdOverflowGroup], [fdOverflowPriority]", inputs: ["fdOverflowPriority", "fdOverflowGroup"] }, { kind: "directive", type: i10.ToolbarSpacerDirective, selector: "fd-toolbar-spacer", inputs: ["width", "class", "fixed"] }, { kind: "directive", type: i1.MobileDirective, selector: "[mobile]" }, { kind: "component", type: i4.MaskComponent, selector: "bsu-mask", inputs: ["size", "top"] }, { kind: "component", type: AppFinderGroupComponent, selector: "bt-app-finder-group", inputs: ["appGroups", "selectedId", "listMode"], outputs: ["selectedIdChange"] }, { kind: "component", type: AppFinderAppListComponent, selector: "bt-app-finder-app-list", inputs: ["appGroup", "mobile", "searchTerm", "pinnedAppInAppTileGroups"], outputs: ["pinClick", "appTileGroupsPinChange"] }, { kind: "pipe", type: i1.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1161
+ }
1162
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: AppFinderComponent, decorators: [{
1163
+ type: Component,
1164
+ args: [{ selector: 'bt-app-finder', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"wrapper\">\r\n @if (appGroups) {\r\n <fd-toolbar [fdType]=\"'solid'\">\r\n @if (deviceSize === 's') {\r\n <button\r\n fd-toolbar-item\r\n fd-button\r\n [fdMenu]=\"true\"\r\n [glyph]=\"'menu2'\"\r\n [fdType]=\"'transparent'\"\r\n [fdMenuTrigger]=\"menu\"\r\n [label]=\"selectedAppGroup?.Title\"\r\n ></button>\r\n }\r\n <fd-toolbar-spacer></fd-toolbar-spacer>\r\n <fd-input-group\r\n fd-toolbar-item\r\n type=\"search\"\r\n glyph=\"search\"\r\n [glyphAriaLabel]=\"'Search' | bbbTranslate\"\r\n [placeholder]=\"'Search' | bbbTranslate\"\r\n [button]=\"true\"\r\n [disabled]=\"false\"\r\n [(ngModel)]=\"searchTerm2\"\r\n (addOnButtonClicked)=\"onSearchSubmit()\"\r\n (keydown.enter)=\"onSearchSubmit()\"\r\n >\r\n </fd-input-group>\r\n </fd-toolbar>\r\n <div style=\"display: flex; overflow-y: auto\" [style.height]=\"contentHeight\">\r\n <div class=\"app-groups\">\r\n @if (deviceSize !== 's') {\r\n <bt-app-finder-group\r\n [appGroups]=\"appGroups\"\r\n [listMode]=\"true\"\r\n [selectedId]=\"selectedAppGroupId\"\r\n (selectedIdChange)=\"selectedAppGroupIdChange.emit($event)\"\r\n >\r\n </bt-app-finder-group>\r\n }\r\n </div>\r\n <bt-app-finder-app-list\r\n [appGroup]=\"selectedAppGroup\"\r\n [mobile]=\"mobile\"\r\n [searchTerm]=\"searchTerm\"\r\n [pinnedAppInAppTileGroups]=\"pinnedAppInAppTileGroups\"\r\n (pinClick)=\"pinClick.emit($event)\"\r\n ></bt-app-finder-app-list>\r\n </div>\r\n <fd-menu\r\n #menu\r\n [mobile]=\"deviceSize === 's'\"\r\n [mobileConfig]=\"{ title: 'Groups' | bbbTranslate, hasCloseButton: true }\"\r\n >\r\n @if (deviceSize === 's') {\r\n <bt-app-finder-group\r\n [appGroups]=\"appGroups\"\r\n [selectedId]=\"selectedAppGroupId\"\r\n (selectedIdChange)=\"menu.close(); selectedAppGroupIdChange.emit($event)\"\r\n >\r\n </bt-app-finder-group>\r\n }\r\n </fd-menu>\r\n } @else {\r\n <bsu-mask></bsu-mask>\r\n }\r\n</div>\r\n", styles: [":host{display:block;background-color:var(--sapBackgroundColor, #f7f7f7);color:var(--sapTextColor, #32363a)}:host ::ng-deep .fd-list__title{line-height:1.5rem}.wrapper{display:flex;flex-direction:column}fd-toolbar{width:100%}::ng-deep span.fd-toolbar__spacer{display:none}\n"] }]
1165
+ }], propDecorators: { appGroups: [{
1166
+ type: Input
1167
+ }], deviceSize: [{
1168
+ type: Input
1169
+ }], sideContentSize: [{
1170
+ type: Input
1171
+ }], selectedAppGroup: [{
1172
+ type: Input
1173
+ }], selectedAppGroupId: [{
1174
+ type: Input
1175
+ }], mobile: [{
1176
+ type: Input
1177
+ }], contentDensity: [{
1178
+ type: Input
1179
+ }], contentHeight: [{
1180
+ type: Input
1181
+ }], pinnedAppInAppTileGroups: [{
1182
+ type: Input
1183
+ }], pinClick: [{
1184
+ type: Output
1185
+ }], selectedAppGroupIdChange: [{
1186
+ type: Output
1187
+ }] } });
1188
+
1189
+ class ChangeAppTileComponent extends BaseComponent {
1190
+ constructor(fb, dialogRef, bbbPipe) {
1191
+ super();
1192
+ this.fb = fb;
1193
+ this.dialogRef = dialogRef;
1194
+ this.bbbPipe = bbbPipe;
1195
+ this.title = dialogRef.data.TileTitle;
1196
+ this.subtitle = dialogRef.data.Subtitle;
1197
+ }
1198
+ ngOnInit() {
1199
+ super.ngOnInit();
1200
+ this.appGroupForm = this.fb.group({
1201
+ title: new UntypedFormControl(this.title, [Validators.required]),
1202
+ subtitle: new UntypedFormControl(this.subtitle)
1203
+ });
1204
+ this.RequiredText = this.bbbPipe
1205
+ .transform(')AlertFieldIsMandatory')
1206
+ .replace('{0}', this.bbbPipe.transform('Title'));
1207
+ }
1208
+ onSave() {
1209
+ this.submitted = true;
1210
+ if (this.appGroupForm.valid) {
1211
+ this.dialogRef.close({ title: this.title, subtitle: this.subtitle });
1212
+ }
1213
+ }
1214
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: ChangeAppTileComponent, deps: [{ token: i1$5.UntypedFormBuilder }, { token: i1$1.DialogRef }, { token: i1.BbbTranslatePipe }], target: i0.ɵɵFactoryTarget.Component }); }
1215
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: ChangeAppTileComponent, selector: "bt-change-app-tile", usesInheritance: true, ngImport: i0, template: "<fd-dialog>\r\n <fd-dialog-header>\r\n <h1 fd-title>{{ dialogRef.data.$Caption }}</h1>\r\n <button fd-dialog-close-button (click)=\"dialogRef.dismiss()\"></button>\r\n </fd-dialog-header>\r\n <fd-dialog-body [formGroup]=\"appGroupForm\">\r\n <div fd-form-item>\r\n <label fd-form-label [required]=\"true\">{{ 'Title' | bbbTranslate }}</label>\r\n <fd-form-input-message-group>\r\n <fd-input-group\r\n class=\"form-control\"\r\n formControlName=\"title\"\r\n form-control\r\n [button]=\"true\"\r\n [(ngModel)]=\"title\"\r\n [state]=\"submitted && appGroupForm.controls.title.errors ? 'error' : 'information'\"\r\n >\r\n </fd-input-group>\r\n @if (submitted && appGroupForm.controls.title.errors) {\r\n <fd-form-message type=\"error\">\r\n {{ RequiredText }}\r\n </fd-form-message>\r\n }\r\n </fd-form-input-message-group>\r\n </div>\r\n <br />\r\n <div fd-form-item>\r\n <label fd-form-label>{{ 'Subtitle' | bbbTranslate }}</label>\r\n <fd-form-input-message-group>\r\n <fd-input-group formControlName=\"subtitle\" form-control [button]=\"true\" [(ngModel)]=\"subtitle\">\r\n </fd-input-group>\r\n </fd-form-input-message-group>\r\n </div>\r\n </fd-dialog-body>\r\n\r\n <fd-dialog-footer>\r\n <fd-button-bar [label]=\"'Save' | bbbTranslate\" fdType=\"emphasized\" (click)=\"onSave()\"> </fd-button-bar>\r\n <fd-button-bar\r\n [label]=\"'Cancel' | bbbTranslate\"\r\n fdkInitialFocus\r\n fdType=\"transparent\"\r\n (click)=\"this.dialogRef.close()\"\r\n >\r\n </fd-button-bar>\r\n </fd-dialog-footer>\r\n</fd-dialog>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i1$5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i4$2.ButtonBarComponent, selector: "fd-button-bar", inputs: ["fullWidth", "fdType", "title", "ariaLabelledby", "id"] }, { kind: "component", type: i5.FormItemComponent, selector: "[fd-form-item]", inputs: ["isInline", "horizontal"] }, { kind: "component", type: i5.FormLabelComponent, selector: "[fd-form-label]", inputs: ["required", "colon", "alignLabelEnd", "inlineHelpContent", "inlineHelpGlyph", "inlineHelpTriggers", "inlineHelpBodyPlacement", "inlineHelpPlacement", "inlineHelpLabel", "id"] }, { kind: "component", type: i5.FormMessageComponent, selector: "fd-form-message", inputs: ["type", "static", "embedded", "class"] }, { kind: "component", type: i5.FormInputMessageGroupComponent, selector: "fd-form-input-message-group", inputs: ["triggers", "closeOnOutsideClick", "fillControlMode", "noArrow", "closeOnEscapeKey", "placement", "placementContainer", "isOpen", "preventSpaceKeyScroll"], outputs: ["isOpenChange"] }, { kind: "component", type: i6$1.InputGroupComponent, selector: "fd-input-group", inputs: ["placement", "required", "inline", "addOnText", "buttonFocusable", "type", "glyph", "glyphFont", "button", "isControl", "showFocus", "isExpanded", "glyphAriaLabel", "addonButtonAriaHidden", "iconTitle", "ariaLabelledBy"], outputs: ["addOnButtonClicked", "search"] }, { kind: "component", type: i7.DialogComponent, selector: "fd-dialog", inputs: ["class", "dialogRef", "dialogConfig"] }, { kind: "component", type: i7.DialogBodyComponent, selector: "fd-dialog-body" }, { kind: "component", type: i7.DialogFooterComponent, selector: "fd-dialog-footer" }, { kind: "component", type: i7.DialogHeaderComponent, selector: "fd-dialog-header" }, { kind: "component", type: i7.DialogCloseButtonComponent, selector: "[fd-dialog-close-button]", inputs: ["mobile", "title", "ariaLabel"] }, { kind: "component", type: i8.TitleComponent, selector: "[fd-title], [fdTitle]", inputs: ["headerSize", "wrap"], exportAs: ["fd-title"] }, { kind: "directive", type: i9$1.InitialFocusDirective, selector: "[fdkInitialFocus]", inputs: ["fdkInitialFocus", "enabled", "focusLastElement"] }, { kind: "directive", type: i1$5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "pipe", type: i1.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1216
+ }
1217
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: ChangeAppTileComponent, decorators: [{
1218
+ type: Component,
1219
+ args: [{ selector: 'bt-change-app-tile', changeDetection: ChangeDetectionStrategy.OnPush, template: "<fd-dialog>\r\n <fd-dialog-header>\r\n <h1 fd-title>{{ dialogRef.data.$Caption }}</h1>\r\n <button fd-dialog-close-button (click)=\"dialogRef.dismiss()\"></button>\r\n </fd-dialog-header>\r\n <fd-dialog-body [formGroup]=\"appGroupForm\">\r\n <div fd-form-item>\r\n <label fd-form-label [required]=\"true\">{{ 'Title' | bbbTranslate }}</label>\r\n <fd-form-input-message-group>\r\n <fd-input-group\r\n class=\"form-control\"\r\n formControlName=\"title\"\r\n form-control\r\n [button]=\"true\"\r\n [(ngModel)]=\"title\"\r\n [state]=\"submitted && appGroupForm.controls.title.errors ? 'error' : 'information'\"\r\n >\r\n </fd-input-group>\r\n @if (submitted && appGroupForm.controls.title.errors) {\r\n <fd-form-message type=\"error\">\r\n {{ RequiredText }}\r\n </fd-form-message>\r\n }\r\n </fd-form-input-message-group>\r\n </div>\r\n <br />\r\n <div fd-form-item>\r\n <label fd-form-label>{{ 'Subtitle' | bbbTranslate }}</label>\r\n <fd-form-input-message-group>\r\n <fd-input-group formControlName=\"subtitle\" form-control [button]=\"true\" [(ngModel)]=\"subtitle\">\r\n </fd-input-group>\r\n </fd-form-input-message-group>\r\n </div>\r\n </fd-dialog-body>\r\n\r\n <fd-dialog-footer>\r\n <fd-button-bar [label]=\"'Save' | bbbTranslate\" fdType=\"emphasized\" (click)=\"onSave()\"> </fd-button-bar>\r\n <fd-button-bar\r\n [label]=\"'Cancel' | bbbTranslate\"\r\n fdkInitialFocus\r\n fdType=\"transparent\"\r\n (click)=\"this.dialogRef.close()\"\r\n >\r\n </fd-button-bar>\r\n </fd-dialog-footer>\r\n</fd-dialog>\r\n" }]
1220
+ }], ctorParameters: () => [{ type: i1$5.UntypedFormBuilder }, { type: i1$1.DialogRef }, { type: i1.BbbTranslatePipe }] });
1221
+
1222
+ class TilesViewerService {
1223
+ constructor(dialogService, tilesService) {
1224
+ this.dialogService = dialogService;
1225
+ this.tilesService = tilesService;
1226
+ this._onDestroy$ = new Subject();
1227
+ this._hideTileSource = new Subject();
1228
+ this._updateAppTileSettingSource = new Subject();
1229
+ this._deleteGroupSource = new Subject();
1230
+ this._loadAppGroupSource = new Subject();
1231
+ this._saveAppGroupOrdersSource = new Subject();
1232
+ this.saveAppGroupOrders$ = this._saveAppGroupOrdersSource.asObservable();
1233
+ this._resetAppGroupSource = new Subject();
1234
+ this.resetAppGroup$ = this._resetAppGroupSource.asObservable();
1235
+ this._hideAppGroupSource = new Subject();
1236
+ this.hideAppGroup$ = this._hideAppGroupSource.asObservable();
1237
+ this._viewLoadingSource = new BehaviorSubject(false);
1238
+ this.viewLoading$ = this._viewLoadingSource.asObservable().pipe(debounceTime(200));
1239
+ this.hideTile$ = this._hideTileSource.asObservable();
1240
+ this.updateAppTileSetting$ = this._updateAppTileSettingSource.asObservable();
1241
+ this.deleteAppGroup$ = this._deleteGroupSource.asObservable();
1242
+ this._loadAppGroupSource
1243
+ .asObservable()
1244
+ .pipe(takeUntil(this._onDestroy$))
1245
+ .subscribe((group) => {
1246
+ this.tilesService.loadAppTileGroups(group);
1247
+ });
1248
+ this.hideTile$
1249
+ .pipe(tap(() => this.setLoading()), takeUntil(this._onDestroy$), exhaustMap((appTile) => this.tilesService
1250
+ .singlePinTileChanged(appTile.AppTile ? appTile.AppTile.Id : appTile.Id)
1251
+ .pipe(finalize(() => this.setLoaded()))), finalize(() => this.setLoaded()))
1252
+ .subscribe();
1253
+ this.updateAppTileSetting$
1254
+ .pipe(takeUntil(this._onDestroy$), tap(() => this.setLoading()), exhaustMap((appTile) => this.tilesService.changeAppTileSetting(appTile).pipe(finalize(() => {
1255
+ this.setLoaded();
1256
+ }))), finalize(() => {
1257
+ this.setLoaded();
1258
+ }))
1259
+ .subscribe();
1260
+ this.deleteAppGroup$
1261
+ .pipe(tap(() => this.setLoading()), takeUntil(this._onDestroy$), exhaustMap((appGroup) => this.tilesService.deleteAppGroup(appGroup).pipe(finalize(() => {
1262
+ this.setLoaded();
1263
+ }))))
1264
+ .subscribe();
1265
+ this.resetAppGroup$
1266
+ .pipe(takeUntil(this._onDestroy$), tap(() => this.setLoading()), exhaustMap((appGroup) => this.tilesService.resetAppGroupSetting(appGroup).pipe(finalize(() => {
1267
+ this.setLoaded();
1268
+ }))), finalize(() => {
1269
+ this.setLoaded();
1270
+ }))
1271
+ .subscribe();
1272
+ this.hideAppGroup$
1273
+ .pipe(takeUntil(this._onDestroy$), tap(() => this.setLoading()), exhaustMap((appGroup) => this.tilesService.toggleAppGroupSettingVisible(appGroup).pipe(finalize(() => {
1274
+ this.setLoaded();
1275
+ }))), finalize(() => {
1276
+ this.setLoaded();
1277
+ }))
1278
+ .subscribe();
1279
+ this.saveAppGroupOrders$
1280
+ .pipe(takeUntil(this._onDestroy$), tap(() => this.setLoading()), exhaustMap((appGroups) => this.tilesService.saveAppGroupOrders(appGroups).pipe(finalize(() => {
1281
+ this.setLoaded();
1282
+ }))), finalize(() => {
1283
+ this.setLoaded();
1284
+ }))
1285
+ .subscribe();
1286
+ }
1287
+ get selectedAppGroupId() {
1288
+ return localStorage.getItem('selectedTab') ?? '';
1289
+ }
1290
+ set selectedAppGroupId(groupId) {
1291
+ localStorage.setItem('selectedTab', groupId);
1292
+ }
1293
+ setSelectedTab(group) {
1294
+ this.selectedAppGroupId = group.Id;
1295
+ }
1296
+ loadAppGroup(group) {
1297
+ this._loadAppGroupSource.next(group);
1298
+ }
1299
+ ngOnDestroy() {
1300
+ this._onDestroy$.next();
1301
+ }
1302
+ openRenameForm(appTile) {
1303
+ const newGroupDialogRef = this.dialogService.open(ChangeAppTileComponent, {
1304
+ data: appTile,
1305
+ verticalPadding: true,
1306
+ responsivePadding: true
1307
+ });
1308
+ newGroupDialogRef.afterClosed.subscribe((setting) => {
1309
+ if (setting) {
1310
+ const newAppTile = { ...appTile };
1311
+ newAppTile.Title = newAppTile.TileTitle = setting.title;
1312
+ newAppTile.Subtitle = setting.subtitle;
1313
+ this._updateAppTileSettingSource.next(newAppTile);
1314
+ }
1315
+ });
1316
+ }
1317
+ resetAppGroup(appGroup) {
1318
+ this._resetAppGroupSource.next(appGroup);
1319
+ }
1320
+ toggleAppGroupSettingVisible(appGroup) {
1321
+ this._hideAppGroupSource.next(appGroup);
1322
+ }
1323
+ deleteAppGroup(appGroup) {
1324
+ this._deleteGroupSource.next(appGroup);
1325
+ }
1326
+ hideTile(appTile) {
1327
+ this._hideTileSource.next(appTile);
1328
+ }
1329
+ saveAppGroupOrders(appGroups) {
1330
+ this._saveAppGroupOrdersSource.next(appGroups);
1331
+ }
1332
+ setLoaded() {
1333
+ this._viewLoadingSource.next(false);
1334
+ }
1335
+ setLoading() {
1336
+ this._viewLoadingSource.next(true);
1337
+ }
1338
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TilesViewerService, deps: [{ token: i1$1.DialogService }, { token: TilesService }], target: i0.ɵɵFactoryTarget.Injectable }); }
1339
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TilesViewerService }); }
1340
+ }
1341
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TilesViewerService, decorators: [{
1342
+ type: Injectable
1343
+ }], ctorParameters: () => [{ type: i1$1.DialogService }, { type: TilesService }] });
1344
+
1345
+ class TilesViewerComponent extends BaseComponent {
1346
+ constructor(_cdr, _saveScrollPosition) {
1347
+ super();
1348
+ this._cdr = _cdr;
1349
+ this._saveScrollPosition = _saveScrollPosition;
1350
+ this.pageContentClass = true;
1351
+ this.stackContentChange = new EventEmitter();
1352
+ this.closeEditHome = new EventEmitter();
1353
+ this.save = new EventEmitter();
1354
+ this.listDropped = new EventEmitter();
1355
+ this.tabChanged = new EventEmitter();
1356
+ this.toggleGroup = new EventEmitter();
1357
+ this.resetGroup = new EventEmitter();
1358
+ this.deleteGroup = new EventEmitter();
1359
+ this.hideAppTileClick = new EventEmitter();
1360
+ this.renameAppTileClick = new EventEmitter();
1361
+ this.tilesDropped = new EventEmitter();
1362
+ this._rtl = BarsaApi.LoginFormData.IsRtl;
1363
+ this.id = 'tilesviewer';
1364
+ }
1365
+ ngOnInit() {
1366
+ super.ngOnInit();
1367
+ if (this.contentPageRef) {
1368
+ const elDom = this.contentPageRef.nativeElement;
1369
+ elDom.addEventListener('scroll', () => {
1370
+ this._saveScrollPosition.setScrollPosition(this.id, elDom.scrollTop);
1371
+ });
1372
+ this._tilesIntersection = fromIntersectionObserver(elDom, {
1373
+ root: null,
1374
+ rootMargin: '0px',
1375
+ threshold: 0
1376
+ }, 0, false)
1377
+ .pipe(takeUntil$1(this._onDestroy$))
1378
+ .subscribe((e) => {
1379
+ this._onInView(e);
1380
+ });
1381
+ }
1382
+ }
1383
+ ngAfterViewInit() {
1384
+ super.ngAfterViewInit();
1385
+ if (this.tabListComponent) {
1386
+ this.tabListComponent._disableScrollSpy = true;
1387
+ }
1388
+ }
1389
+ onSelectedTabChange(selectedTab, appTileGroups) {
1390
+ let firstSelected = false;
1391
+ if (!this.selectedTabTitle) {
1392
+ firstSelected = true;
1393
+ }
1394
+ const selectedTabTitle = selectedTab.title || '';
1395
+ this.selectedTabTitle = selectedTabTitle;
1396
+ setTimeout(() => {
1397
+ this.tabChanged.emit({
1398
+ firstSelected,
1399
+ selectedTabTitle,
1400
+ tabPanels: this.tabListComponent.tabPanels.toArray(),
1401
+ appTileGroups
1402
+ });
1403
+ });
1404
+ }
1405
+ onDropGroup(appTileGroups, event) {
1406
+ if (!this.edit) {
1407
+ return;
1408
+ }
1409
+ this.listDropped.emit({ appTileGroups, event });
1410
+ }
1411
+ onDrop($event) {
1412
+ this.tilesDropped.emit($event);
1413
+ }
1414
+ onStackContentChanged(checked) {
1415
+ this.stackContentChange.emit(checked);
1416
+ }
1417
+ onExitEditHome(appGroups) {
1418
+ this.save.emit(appGroups);
1419
+ }
1420
+ onCloseEditHome() {
1421
+ this.closeEditHome.emit();
1422
+ }
1423
+ _trackById(index, item) {
1424
+ return item ? item.Id : index;
1425
+ }
1426
+ _onInView(e) {
1427
+ this.formVisibilityStatus = e;
1428
+ if (this.formVisibilityStatus === IntersectionStatus.Visible) {
1429
+ const scrollTop = this._saveScrollPosition.getScrollPosition(this.id);
1430
+ // window.scrollTo({ top: scrollTop, behavior: 'smooth' });
1431
+ this.contentPageRef.nativeElement.scrollTop = scrollTop;
1432
+ // this._cdr.detectChanges();
1433
+ }
1434
+ }
1435
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TilesViewerComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.SaveScrollPositionService }], target: i0.ɵɵFactoryTarget.Component }); }
1436
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: TilesViewerComponent, selector: "bt-tiles-viewer", inputs: { appTileGroups: "appTileGroups", loading: "loading", edit: "edit", rtl: "rtl", defaultTab: "defaultTab", stackContent: "stackContent", deviceSize: "deviceSize", selectedAppGroupId: "selectedAppGroupId", 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: TabListComponent, descendants: true }, { propertyName: "contentPageRef", first: true, predicate: ["contentPage"], descendants: true, read: ElementRef, static: true }], usesInheritance: true, ngImport: i0, template: "<fd-dynamic-page\r\n size=\"large\"\r\n [ariaLabel]=\"'HomeEdit' | bbbTranslate\"\r\n [autoResponsive]=\"true\"\r\n [class.stack-mode]=\"stackContent\"\r\n>\r\n @if (edit) {\r\n <fd-dynamic-page-header [title]=\"'HomeEdit' | bbbTranslate\">\r\n <fd-dynamic-page-global-actions>\r\n @if (edit) {\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 }\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 <fd-tab-list\r\n class=\"tile-tabs\"\r\n [size]=\"deviceSize\"\r\n [collapseOverflow]=\"true\"\r\n [stackContent]=\"stackContent\"\r\n [expandOverflowText]=\"'More' | bbbTranslate\"\r\n cdkDropList\r\n cdkDropListOrientation=\"vertical\"\r\n (cdkDropListDropped)=\"onDropGroup(appTileGroups, $event)\"\r\n (selectedTabChange)=\"onSelectedTabChange($event, appTileGroups)\"\r\n [defaultTab]=\"defaultTab\"\r\n >\r\n @for (appTileGroup of appTileGroups; track _trackById(i, appTileGroup); let i = $index) { @if (edit ||\r\n appTileGroup.navigatorVisible) {\r\n <fd-tab\r\n [id]=\"appTileGroup.Id\"\r\n [label]=\"appTileGroup.navigatorTitle | bbbTranslate\"\r\n [title]=\"appTileGroup.navigatorTitle | bbbTranslate\"\r\n [ngClass]=\"'fd-tabs--' + deviceSize\"\r\n >\r\n <fd-dynamic-page-content [id]=\"appTileGroup.Id\">\r\n <bt-tiles-viewer-group\r\n [appTileGroup]=\"appTileGroup\"\r\n [edit]=\"edit\"\r\n [rtl]=\"rtl\"\r\n [deviceSize]=\"deviceSize\"\r\n [stackContent]=\"stackContent\"\r\n [isAppTileSubGroup]=\"false\"\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 </fd-tab>\r\n } }\r\n </fd-tab-list>\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\r\n<ng-template #loadingTpl>\r\n <bsu-mask></bsu-mask>\r\n</ng-template>\r\n\r\n<ng-template\r\n #renderGroup\r\n let-appTileGroup\r\n let-stackContent=\"stackContent\"\r\n let-edit=\"edit\"\r\n let-isAppTileSubGroup=\"isAppTileSubGroup\"\r\n>\r\n <bt-tiles-viewer-group\r\n [appTileGroup]=\"appTileGroup\"\r\n [edit]=\"edit\"\r\n [rtl]=\"rtl\"\r\n [deviceSize]=\"deviceSize\"\r\n [stackContent]=\"stackContent\"\r\n [isAppTileSubGroup]=\"isAppTileSubGroup\"\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</ng-template>\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-content{padding:0!important}@media (max-width: 599px){bnrc-dynamic-component{margin-right:0!important;margin-left:0!important}}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2$1.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "component", type: i4$2.BarComponent, selector: "[fd-bar]", inputs: ["class", "barDesign", "inPage", "inHomePage", "size"] }, { kind: "directive", type: i4$2.BarRightDirective, selector: "[fd-bar-right]" }, { kind: "component", type: i4$2.ButtonBarComponent, selector: "fd-button-bar", inputs: ["fullWidth", "fdType", "title", "ariaLabelledby", "id"] }, { kind: "component", type: i2.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i6$2.DynamicPageComponent, selector: "fd-dynamic-page", inputs: ["disableSnapOnScroll", "ariaLabel", "background", "autoResponsive", "size", "offset", "expandContent"] }, { kind: "component", type: i6$2.DynamicPageHeaderComponent, selector: "fd-dynamic-page-header", inputs: ["title", "titleWrap", "subtitle", "subtitleWrap"] }, { kind: "component", type: i6$2.DynamicPageGlobalActionsComponent, selector: "fd-dynamic-page-global-actions" }, { kind: "component", type: i6$2.DynamicPageLayoutActionsComponent, selector: "fd-dynamic-page-layout-actions" }, { kind: "component", type: i6$2.DynamicPageContentComponent, selector: "fd-dynamic-page-content", inputs: ["tabLabel", "id"] }, { kind: "component", type: i6$2.DynamicPageFooterComponent, selector: "fd-dynamic-page-footer" }, { kind: "component", type: i5.FormLabelComponent, selector: "[fd-form-label]", inputs: ["required", "colon", "alignLabelEnd", "inlineHelpContent", "inlineHelpGlyph", "inlineHelpTriggers", "inlineHelpBodyPlacement", "inlineHelpPlacement", "inlineHelpLabel", "id"] }, { kind: "component", type: i8$2.SwitchComponent, selector: "fd-switch", inputs: ["activeText", "inactiveText", "id", "required", "checked", "semantic", "ariaLabel", "ariaLabelledBy"], outputs: ["checkedChange"] }, { kind: "component", type: i9$2.TabListComponent, selector: "fd-tab-list", inputs: ["size", "mode", "collapseOverflow", "maxVisibleTabs", "stackContent", "maxContentHeight", "collapsibleTabs", "defaultTab", "selectDefaultOnTabsChange", "focusFirstFocusableElement"], outputs: ["selectedTabChange", "selectedTabIndexChange", "visibleItemsCount", "hiddenItemsCount"] }, { kind: "component", type: i9$2.TabPanelComponent, selector: "fd-tab", inputs: ["id", "ariaLabel", "ariaLabelledBy", "title", "count", "glyph", "header", "disabled", "tabState"], outputs: ["opened", "closed"] }, { kind: "component", type: i10.ToolbarComponent, selector: "fd-toolbar", inputs: ["titleId", "class", "shouldOverflow", "fdType", "title", "active", "clearBorder", "forceOverflow", "tabindex", "ariaLabel", "ariaLabelledBy"] }, { kind: "directive", type: i10.ToolbarItemDirective, selector: "[fd-toolbar-item], [fdOverflowGroup], [fdOverflowPriority]", inputs: ["fdOverflowPriority", "fdOverflowGroup"] }, { kind: "component", type: i4.MaskComponent, selector: "bsu-mask", inputs: ["size", "top"] }, { kind: "component", type: TilesViewerGroupComponent, selector: "bt-tiles-viewer-group", inputs: ["appTileGroup", "stackContent", "edit", "rtl", "isAppTileSubGroup", "deviceSize"], outputs: ["tilesDropped", "hideAppTileClick", "renameAppTileClick", "toggleGroup", "resetGroup", "deleteGroup"] }, { kind: "pipe", type: i1.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1437
+ }
1438
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TilesViewerComponent, decorators: [{
1439
+ type: Component,
1440
+ args: [{ selector: 'bt-tiles-viewer', changeDetection: ChangeDetectionStrategy.OnPush, template: "<fd-dynamic-page\r\n size=\"large\"\r\n [ariaLabel]=\"'HomeEdit' | bbbTranslate\"\r\n [autoResponsive]=\"true\"\r\n [class.stack-mode]=\"stackContent\"\r\n>\r\n @if (edit) {\r\n <fd-dynamic-page-header [title]=\"'HomeEdit' | bbbTranslate\">\r\n <fd-dynamic-page-global-actions>\r\n @if (edit) {\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 }\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 <fd-tab-list\r\n class=\"tile-tabs\"\r\n [size]=\"deviceSize\"\r\n [collapseOverflow]=\"true\"\r\n [stackContent]=\"stackContent\"\r\n [expandOverflowText]=\"'More' | bbbTranslate\"\r\n cdkDropList\r\n cdkDropListOrientation=\"vertical\"\r\n (cdkDropListDropped)=\"onDropGroup(appTileGroups, $event)\"\r\n (selectedTabChange)=\"onSelectedTabChange($event, appTileGroups)\"\r\n [defaultTab]=\"defaultTab\"\r\n >\r\n @for (appTileGroup of appTileGroups; track _trackById(i, appTileGroup); let i = $index) { @if (edit ||\r\n appTileGroup.navigatorVisible) {\r\n <fd-tab\r\n [id]=\"appTileGroup.Id\"\r\n [label]=\"appTileGroup.navigatorTitle | bbbTranslate\"\r\n [title]=\"appTileGroup.navigatorTitle | bbbTranslate\"\r\n [ngClass]=\"'fd-tabs--' + deviceSize\"\r\n >\r\n <fd-dynamic-page-content [id]=\"appTileGroup.Id\">\r\n <bt-tiles-viewer-group\r\n [appTileGroup]=\"appTileGroup\"\r\n [edit]=\"edit\"\r\n [rtl]=\"rtl\"\r\n [deviceSize]=\"deviceSize\"\r\n [stackContent]=\"stackContent\"\r\n [isAppTileSubGroup]=\"false\"\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 </fd-tab>\r\n } }\r\n </fd-tab-list>\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\r\n<ng-template #loadingTpl>\r\n <bsu-mask></bsu-mask>\r\n</ng-template>\r\n\r\n<ng-template\r\n #renderGroup\r\n let-appTileGroup\r\n let-stackContent=\"stackContent\"\r\n let-edit=\"edit\"\r\n let-isAppTileSubGroup=\"isAppTileSubGroup\"\r\n>\r\n <bt-tiles-viewer-group\r\n [appTileGroup]=\"appTileGroup\"\r\n [edit]=\"edit\"\r\n [rtl]=\"rtl\"\r\n [deviceSize]=\"deviceSize\"\r\n [stackContent]=\"stackContent\"\r\n [isAppTileSubGroup]=\"isAppTileSubGroup\"\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</ng-template>\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-content{padding:0!important}@media (max-width: 599px){bnrc-dynamic-component{margin-right:0!important;margin-left:0!important}}\n"] }]
1441
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.SaveScrollPositionService }], propDecorators: { tabListComponent: [{
1442
+ type: ViewChild,
1443
+ args: [TabListComponent]
1444
+ }], contentPageRef: [{
1445
+ type: ViewChild,
1446
+ args: ['contentPage', { static: true, read: ElementRef }]
1447
+ }], pageContentClass: [{
1448
+ type: HostBinding,
1449
+ args: ['class.page-content']
1450
+ }], appTileGroups: [{
1451
+ type: Input
1452
+ }], loading: [{
1453
+ type: Input
1454
+ }], edit: [{
1455
+ type: Input
1456
+ }], rtl: [{
1457
+ type: Input
1458
+ }], defaultTab: [{
1459
+ type: Input
1460
+ }], stackContent: [{
1461
+ type: Input
1462
+ }], deviceSize: [{
1463
+ type: Input
1464
+ }], selectedAppGroupId: [{
1465
+ type: Input
1466
+ }], DynamicComponents: [{
1467
+ type: Input
1468
+ }], stackContentChange: [{
1469
+ type: Output
1470
+ }], closeEditHome: [{
1471
+ type: Output
1472
+ }], save: [{
1473
+ type: Output
1474
+ }], listDropped: [{
1475
+ type: Output
1476
+ }], tabChanged: [{
1477
+ type: Output
1478
+ }], toggleGroup: [{
1479
+ type: Output
1480
+ }], resetGroup: [{
1481
+ type: Output
1482
+ }], deleteGroup: [{
1483
+ type: Output
1484
+ }], hideAppTileClick: [{
1485
+ type: Output
1486
+ }], renameAppTileClick: [{
1487
+ type: Output
1488
+ }], tilesDropped: [{
1489
+ type: Output
1490
+ }], _rtl: [{
1491
+ type: HostBinding,
1492
+ args: ['attr.rtl']
1493
+ }] } });
1494
+
1495
+ class TilesViewerContainerComponent extends BaseComponent {
1496
+ constructor(_portalService, _tilesService, _tilesViewerService) {
1497
+ super();
1498
+ this._portalService = _portalService;
1499
+ this._tilesService = _tilesService;
1500
+ this._tilesViewerService = _tilesViewerService;
1501
+ this.changedOrder = false;
1502
+ this.userStackContent = false;
1503
+ this.initialStackContentValue = false;
1504
+ this.firstSelected = false;
1505
+ this.stackContent = false;
1506
+ this.stackContent$ = this._portalService.userPortalSettings$.pipe(takeUntil(this._onDestroy$), map((settings) => settings['UserPortalSettings']), map((settings) => settings?.TilesStackContent), distinctUntilChanged());
1507
+ this.stackContent$.subscribe((stackContent) => {
1508
+ this.initialStackContentValue = this.userStackContent = stackContent;
1509
+ if (stackContent) {
1510
+ this.stackContent = stackContent;
1511
+ }
1512
+ });
1513
+ }
1514
+ ngOnInit() {
1515
+ super.ngOnInit();
1516
+ this.viewLoading$ = this._tilesViewerService.viewLoading$;
1517
+ this.selectedAppGroupId = this._tilesViewerService.selectedAppGroupId;
1518
+ this.rtl$ = this._portalService.rtl$;
1519
+ this.deviceSize$ = this._portalService.deviceSize$;
1520
+ this.edit$ = this._tilesService.edit$;
1521
+ this.appTileGroups$ = this._tilesService.homeAppTileGroups$;
1522
+ this.appTileGroups$.pipe(withLatestFrom(this.stackContent$)).subscribe(([tiles, stackContent]) => {
1523
+ if (tiles && stackContent) {
1524
+ tiles.forEach((c) => {
1525
+ this._tilesService.loadAppTileGroups(c);
1526
+ });
1527
+ }
1528
+ });
1529
+ }
1530
+ ngOnDestroy() {
1531
+ super.ngOnDestroy();
1532
+ this._tilesService.setEditHome(false);
1533
+ }
1534
+ onSelectedTabChange(e) {
1535
+ const { firstSelected, selectedTabTitle, appTileGroups: appGroups, tabPanels } = e;
1536
+ let appTileGroup;
1537
+ if (this.stackContent) {
1538
+ return;
1539
+ }
1540
+ if (firstSelected) {
1541
+ const lastSelectedAppGroupId = this._tilesViewerService.selectedAppGroupId;
1542
+ if (lastSelectedAppGroupId) {
1543
+ appTileGroup = appGroups.find((c) => c.Id === lastSelectedAppGroupId);
1544
+ if (appTileGroup) {
1545
+ const lastTab = tabPanels.find((c) => c.title === appTileGroup?.navigatorTitle);
1546
+ if (lastTab && selectedTabTitle !== lastTab.title) {
1547
+ appTileGroup = appGroups.find((c) => c.Id === lastSelectedAppGroupId);
1548
+ lastTab.open(true);
1549
+ }
1550
+ }
1551
+ }
1552
+ }
1553
+ if (!appTileGroup) {
1554
+ appTileGroup = appGroups.find((c) => c.navigatorTitle === selectedTabTitle);
1555
+ }
1556
+ if (appTileGroup) {
1557
+ this._tilesViewerService.setSelectedTab(appTileGroup);
1558
+ this._tilesViewerService.loadAppGroup(appTileGroup);
1559
+ }
1560
+ }
1561
+ onDropGroup(e) {
1562
+ const { event, appTileGroups: appGroups } = e;
1563
+ moveItemInArray(appGroups, event.previousIndex, event.currentIndex);
1564
+ this.changedOrder = true;
1565
+ // this.saveOrderAppTiles(allApps, group);
1566
+ }
1567
+ onDrop(e) {
1568
+ const { appTileGroup: group, event } = e;
1569
+ const previousContainer = event.previousContainer;
1570
+ const container = event.container;
1571
+ const containerIsTile = container.data.isTile;
1572
+ const previousItems = previousContainer.data.items;
1573
+ const containerItems = container.data.items;
1574
+ const { previousIndex, currentIndex } = event;
1575
+ if (previousContainer === container) {
1576
+ moveItemInArray(previousItems, previousIndex, currentIndex);
1577
+ if (containerIsTile) {
1578
+ this._saveOrderAppTiles(group);
1579
+ }
1580
+ else {
1581
+ this._saveOrderActionLinks(group);
1582
+ }
1583
+ }
1584
+ else {
1585
+ transferArrayItem(previousItems, containerItems, previousIndex, currentIndex);
1586
+ const appTileIdTransferedId = containerItems[currentIndex]?.AppTile?.Id ?? containerItems[currentIndex].Id;
1587
+ if (containerIsTile) {
1588
+ this._saveOrderActionLinks(group);
1589
+ this._saveOrderAppTiles(group, appTileIdTransferedId);
1590
+ }
1591
+ else {
1592
+ this._saveOrderAppTiles(group);
1593
+ this._saveOrderActionLinks(group, appTileIdTransferedId);
1594
+ }
1595
+ }
1596
+ }
1597
+ onStackContentChanged(checked) {
1598
+ this.userStackContent = checked;
1599
+ }
1600
+ onExitEditHome(appTileGroups) {
1601
+ if (this.changedOrder) {
1602
+ this._tilesViewerService.saveAppGroupOrders(appTileGroups);
1603
+ this.changedOrder = false;
1604
+ }
1605
+ if (this.userStackContent !== this.initialStackContentValue) {
1606
+ this._tilesService.saveTilesStackContent(this.userStackContent);
1607
+ }
1608
+ this._setEditHome(false);
1609
+ }
1610
+ onCloseEditHome() {
1611
+ this._setEditHome(false);
1612
+ }
1613
+ onDelete(appTileGroup) {
1614
+ this._tilesViewerService.deleteAppGroup(appTileGroup);
1615
+ }
1616
+ onToggleShowHide(appTileGroup) {
1617
+ this._tilesViewerService.toggleAppGroupSettingVisible(appTileGroup);
1618
+ }
1619
+ onReset(appTileGroup) {
1620
+ this._tilesViewerService.resetAppGroup(appTileGroup);
1621
+ }
1622
+ onHideAppTile(appTile) {
1623
+ this._tilesViewerService.hideTile(appTile);
1624
+ }
1625
+ onRenameAppTile(appTile) {
1626
+ this._tilesViewerService.openRenameForm(appTile);
1627
+ }
1628
+ _setEditHome(val) {
1629
+ this._tilesService.setEditHome(val);
1630
+ }
1631
+ _saveOrderAppTiles(appTileGroup, appTileIdTransferedId = '0') {
1632
+ const appTiles = appTileGroup.navigatorTiles.map((appTile) => appTile.AppTile ? appTile.AppTile.Id : appTile.Id);
1633
+ this._tilesService.saveOrderAppTiles(appTileGroup, appTiles, false, appTileIdTransferedId);
1634
+ }
1635
+ _saveOrderActionLinks(appTileGroup, appTileIdTransferedId = '0') {
1636
+ const actionLinks = appTileGroup.navigatorActionLinks.map((appTile) => appTile.AppTile ? appTile.AppTile.Id : appTile.Id);
1637
+ this._tilesService.saveOrderAppTiles(appTileGroup, actionLinks, true, appTileIdTransferedId);
1638
+ }
1639
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TilesViewerContainerComponent, deps: [{ token: i1.PortalService }, { token: TilesService }, { token: TilesViewerService }], target: i0.ɵɵFactoryTarget.Component }); }
1640
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: TilesViewerContainerComponent, selector: "bt-tiles-viewer-container", providers: [TilesViewerService], usesInheritance: true, ngImport: i0, template: "@if (appTileGroups$ | async; as appTileGroups) { @if (appTileGroups) {\n<bt-tiles-viewer\n [appTileGroups]=\"appTileGroups\"\n [loading]=\"(viewLoading$ | async)!!\"\n [edit]=\"(edit$ | async)!!\"\n [rtl]=\"(rtl$ | async)!!\"\n [stackContent]=\"(stackContent$ | async)!!\"\n [deviceSize]=\"(deviceSize$ | async)!!\"\n [defaultTab]=\"selectedAppGroupId\"\n (stackContentChange)=\"onStackContentChanged($event)\"\n (closeEditHome)=\"onCloseEditHome()\"\n (save)=\"onExitEditHome($event)\"\n (listDropped)=\"onDropGroup($event)\"\n (tabChanged)=\"onSelectedTabChange($event)\"\n (toggleGroup)=\"onToggleShowHide($event)\"\n (resetGroup)=\"onReset($event)\"\n (deleteGroup)=\"onDelete($event)\"\n (tilesDropped)=\"onDrop($event)\"\n (hideAppTileClick)=\"onHideAppTile($event)\"\n (renameAppTileClick)=\"onRenameAppTile($event)\"\n></bt-tiles-viewer>\n} @else {\n<bsu-no-data></bsu-no-data>\n} } @else {\n<bsu-mask></bsu-mask>\n}\n\n<ng-template #loading>\n <bsu-mask></bsu-mask>\n</ng-template>\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: TilesViewerComponent, selector: "bt-tiles-viewer", inputs: ["appTileGroups", "loading", "edit", "rtl", "defaultTab", "stackContent", "deviceSize", "selectedAppGroupId", "DynamicComponents"], outputs: ["stackContentChange", "closeEditHome", "save", "listDropped", "tabChanged", "toggleGroup", "resetGroup", "deleteGroup", "hideAppTileClick", "renameAppTileClick", "tilesDropped"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1641
+ }
1642
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TilesViewerContainerComponent, decorators: [{
1643
+ type: Component,
1644
+ args: [{ selector: 'bt-tiles-viewer-container', providers: [TilesViewerService], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (appTileGroups$ | async; as appTileGroups) { @if (appTileGroups) {\n<bt-tiles-viewer\n [appTileGroups]=\"appTileGroups\"\n [loading]=\"(viewLoading$ | async)!!\"\n [edit]=\"(edit$ | async)!!\"\n [rtl]=\"(rtl$ | async)!!\"\n [stackContent]=\"(stackContent$ | async)!!\"\n [deviceSize]=\"(deviceSize$ | async)!!\"\n [defaultTab]=\"selectedAppGroupId\"\n (stackContentChange)=\"onStackContentChanged($event)\"\n (closeEditHome)=\"onCloseEditHome()\"\n (save)=\"onExitEditHome($event)\"\n (listDropped)=\"onDropGroup($event)\"\n (tabChanged)=\"onSelectedTabChange($event)\"\n (toggleGroup)=\"onToggleShowHide($event)\"\n (resetGroup)=\"onReset($event)\"\n (deleteGroup)=\"onDelete($event)\"\n (tilesDropped)=\"onDrop($event)\"\n (hideAppTileClick)=\"onHideAppTile($event)\"\n (renameAppTileClick)=\"onRenameAppTile($event)\"\n></bt-tiles-viewer>\n} @else {\n<bsu-no-data></bsu-no-data>\n} } @else {\n<bsu-mask></bsu-mask>\n}\n\n<ng-template #loading>\n <bsu-mask></bsu-mask>\n</ng-template>\n", styles: [":host{display:block}\n"] }]
1645
+ }], ctorParameters: () => [{ type: i1.PortalService }, { type: TilesService }, { type: TilesViewerService }] });
1646
+
1647
+ class MicroTileChartBulletComponent extends BaseBtTileComponent {
1648
+ ngOnInit() {
1649
+ super.ngOnInit();
1650
+ this.target = this.settings.Target;
1651
+ this.value = this.settings.Value;
1652
+ this.range = this.settings.Range;
1653
+ this.forecast = this.settings.Forecast;
1654
+ this.suffix = this.settings.Suffix;
1655
+ this.separatorLines = this.settings.SeparatorLines;
1656
+ this.isDelta = this.settings.IsDelta;
1657
+ }
1658
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: MicroTileChartBulletComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
1659
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: MicroTileChartBulletComponent, selector: "bt-micro-tile-chart-bullet", usesInheritance: true, ngImport: i0, template: "<bt-tile\r\n [data]=\"data\"\r\n [type]=\"'launch'\"\r\n [edit]=\"edit\"\r\n [title]=\"data | tileProp: 'Title':parameters\"\r\n [subtitle]=\"data | tileProp: 'Subtitle':parameters\"\r\n [dynamicCommand]=\"data | tileProp: 'DynamicCommand':parameters\"\r\n [isDouble]=\"data | tileProp: 'IsDouble':parameters\"\r\n [footer]=\"data | tileProp: 'Footer':parameters\"\r\n (hideClick)=\"hideClick.emit()\"\r\n (renameClick)=\"renameClick.emit()\"\r\n (click)=\"onTileClick()\"\r\n>\r\n <div fd-tile-content>\r\n @if (double) {\r\n <be-micro-chart-bullet\r\n [target]=\"target\"\r\n [value]=\"value\"\r\n [range]=\"range\"\r\n [forecast]=\"forecast\"\r\n [isDelta]=\"isDelta\"\r\n [separatorLines]=\"separatorLines\"\r\n [suffix]=\"suffix\"\r\n >\r\n </be-micro-chart-bullet>\r\n }\r\n\r\n <be-micro-chart-bullet\r\n [target]=\"target\"\r\n [value]=\"value\"\r\n [range]=\"range\"\r\n [forecast]=\"forecast\"\r\n [isDelta]=\"double ? false : isDelta\"\r\n [separatorLines]=\"separatorLines\"\r\n [suffix]=\"suffix\"\r\n >\r\n </be-micro-chart-bullet>\r\n </div>\r\n</bt-tile>\r\n", styles: [":host ::ng-deep .fd-tile__content{display:flex;column-gap:20px}\n"], dependencies: [{ kind: "directive", type: i1$3.TileContentDirective, selector: "[fdTileContent], [fd-tile-content]", inputs: ["twoColumn"] }, { kind: "component", type: i2$2.MicroChartBulletComponent, selector: "be-micro-chart-bullet", inputs: ["range", "value", "forecast", "target", "suffix", "separatorLines", "isDelta"] }, { kind: "component", type: TileComponent, selector: "bt-tile", inputs: ["type", "footerTemplate", "footer", "disableClick", "title", "icon", "subtitle", "isDouble", "edit", "backColor", "dynamicCommand"] }, { kind: "pipe", type: TilePropPipe, name: "tileProp" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1660
+ }
1661
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: MicroTileChartBulletComponent, decorators: [{
1662
+ type: Component,
1663
+ args: [{ selector: 'bt-micro-tile-chart-bullet', changeDetection: ChangeDetectionStrategy.OnPush, template: "<bt-tile\r\n [data]=\"data\"\r\n [type]=\"'launch'\"\r\n [edit]=\"edit\"\r\n [title]=\"data | tileProp: 'Title':parameters\"\r\n [subtitle]=\"data | tileProp: 'Subtitle':parameters\"\r\n [dynamicCommand]=\"data | tileProp: 'DynamicCommand':parameters\"\r\n [isDouble]=\"data | tileProp: 'IsDouble':parameters\"\r\n [footer]=\"data | tileProp: 'Footer':parameters\"\r\n (hideClick)=\"hideClick.emit()\"\r\n (renameClick)=\"renameClick.emit()\"\r\n (click)=\"onTileClick()\"\r\n>\r\n <div fd-tile-content>\r\n @if (double) {\r\n <be-micro-chart-bullet\r\n [target]=\"target\"\r\n [value]=\"value\"\r\n [range]=\"range\"\r\n [forecast]=\"forecast\"\r\n [isDelta]=\"isDelta\"\r\n [separatorLines]=\"separatorLines\"\r\n [suffix]=\"suffix\"\r\n >\r\n </be-micro-chart-bullet>\r\n }\r\n\r\n <be-micro-chart-bullet\r\n [target]=\"target\"\r\n [value]=\"value\"\r\n [range]=\"range\"\r\n [forecast]=\"forecast\"\r\n [isDelta]=\"double ? false : isDelta\"\r\n [separatorLines]=\"separatorLines\"\r\n [suffix]=\"suffix\"\r\n >\r\n </be-micro-chart-bullet>\r\n </div>\r\n</bt-tile>\r\n", styles: [":host ::ng-deep .fd-tile__content{display:flex;column-gap:20px}\n"] }]
1664
+ }] });
1665
+
1666
+ class NewsTileComponent extends BaseBtTileComponent {
1667
+ constructor() {
1668
+ super(...arguments);
1669
+ this.isStop = false;
1670
+ }
1671
+ get twoColumn() {
1672
+ return this.footer.TwoColumn;
1673
+ }
1674
+ ngOnInit() {
1675
+ super.ngOnInit();
1676
+ const slides = this.settings.Report.MoDataList;
1677
+ if (slides.length) {
1678
+ this._updateTile(slides[0]);
1679
+ interval(5000)
1680
+ .pipe(takeUntil(this._onDestroy$), tap(() => {
1681
+ if (!this.isStop) {
1682
+ this.carouselComponent.next();
1683
+ }
1684
+ }))
1685
+ .subscribe();
1686
+ }
1687
+ this.slides = slides;
1688
+ }
1689
+ slideChange(activeSlide) {
1690
+ const currentSlide = activeSlide.activeItems[0].value;
1691
+ this._updateTile(currentSlide);
1692
+ }
1693
+ _updateTile(newsMo) {
1694
+ this.activeNews = newsMo;
1695
+ }
1696
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: NewsTileComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
1697
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: NewsTileComponent, selector: "bt-news-tile", viewQueries: [{ propertyName: "carouselComponent", first: true, predicate: CarouselComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<bt-tile\r\n [data]=\"data\"\r\n [type]=\"'launch'\"\r\n [footerTemplate]=\"newsFooter\"\r\n [edit]=\"edit\"\r\n [title]=\"data | tileProp: 'Title':parameters\"\r\n [subtitle]=\"data | tileProp: 'Subtitle':parameters\"\r\n [dynamicCommand]=\"data | tileProp: 'DynamicCommand':parameters\"\r\n [isDouble]=\"data | tileProp: 'IsDouble':parameters\"\r\n [footer]=\"data | tileProp: 'Footer':parameters\"\r\n (hideClick)=\"hideClick.emit()\"\r\n (renameClick)=\"renameClick.emit()\"\r\n (click)=\"onTileClick()\"\r\n>\r\n <div fd-tile-content style=\"align-items: center; padding-top: 1rem\">\r\n <span>\r\n {{ activeNews?.Text | bbbTranslate }}\r\n </span>\r\n\r\n <div class=\"wrapper-carousel\">\r\n <div class=\"cover\"></div>\r\n @if (slides.length > 1) {\r\n <button\r\n fd-button\r\n fdType=\"transparent\"\r\n [glyph]=\"isStop ? 'play' : 'pause'\"\r\n (click)=\"isStop = !isStop; $event.preventDefault(); $event.stopPropagation()\"\r\n ></button>\r\n }\r\n <fd-carousel\r\n carouselIndicatorsOrientation=\"top\"\r\n [slideTransitionDuration]=\"1000\"\r\n (slideChange)=\"slideChange($event)\"\r\n [loop]=\"true\"\r\n [navigation]=\"false\"\r\n [navigatorInPageIndicator]=\"false\"\r\n width=\"100%\"\r\n >\r\n @for (slide of slides; track slide) {\r\n <fd-carousel-item [value]=\"slide\">\r\n <img\r\n [src]=\"slide.Img ? (slide.Img.FileId | picFieldSrc: 'ID':null:slide.Img.FileId:335:170) : ''\"\r\n />\r\n </fd-carousel-item>\r\n }\r\n </fd-carousel>\r\n </div>\r\n </div>\r\n</bt-tile>\r\n\r\n<!-- tile footer-->\r\n<ng-template #newsFooter>\r\n <div fd-tile-footer [twoColumn]=\"twoColumn\" *untilInView=\"el\">\r\n @if (twoColumn) {\r\n <div fd-tile-section>\r\n <span fd-tile-footer-text>{{ activeNews?.Footer1 | bbbTranslate }}</span>\r\n </div>\r\n <div fd-tile-section>\r\n <span fd-tile-footer-text>{{ activeNews?.Footer2 | bbbTranslate }}</span>\r\n </div>\r\n } @else {\r\n <span fd-tile-footer-text>{{ activeNews?.Footer1 | bbbTranslate }}</span>\r\n }\r\n </div>\r\n</ng-template>\r\n", styles: [":host{position:relative;display:block}:host bt-tile{position:relative}:host bt-tile .wrapper-carousel{position:absolute;top:0;width:100%;height:100%;left:0;z-index:0}:host bt-tile .wrapper-carousel img{width:335px;height:165px;object-fit:cover}:host ::ng-deep span{z-index:3;color:#fff}:host ::ng-deep button{position:absolute;right:15px;top:15px;display:none}:host ::ng-deep button fd-icon{z-index:4;min-width:1.5rem!important;font-size:1.5rem!important;color:#fff!important}:host ::ng-deep .fd-carousel__content{z-index:3}:host ::ng-deep .fd-carousel__page-indicator-container{position:absolute;bottom:0;display:none;background-color:transparent}:host ::ng-deep .fd-carousel__page-indicator-container ol{z-index:5}:host ::ng-deep .fd-carousel__page-indicator-container ol li{background-color:#dad7d7}:host ::ng-deep .fd-carousel__page-indicator-container ol li.fd-carousel__page-indicator--active{background-color:#fff}:host .cover{background-color:#064079d9;position:absolute;bottom:0;left:0;right:0;height:50%;z-index:4;opacity:.6}:host:hover ::ng-deep .fd-carousel__page-indicator-container{display:inherit}:host:hover ::ng-deep button{display:inline-flex}\n"], dependencies: [{ kind: "component", type: i2.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i2$3.CarouselComponent, selector: "fd-carousel", inputs: ["id", "ariaLabel", "ariaLabelledBy", "ariaDescribedBy", "pageIndicatorsOrientation", "height", "width", "loop", "navigation", "navigatorInPageIndicator", "numericIndicator", "pageIndicatorContainer", "pageIndicator", "resourceStrings", "slideTransitionDuration", "swipeEnabled", "vertical", "noPaginationContainerBorder", "contentBackground", "pageIndicatorBackground", "visibleSlidesCount"], outputs: ["slideChange"] }, { kind: "component", type: i2$3.CarouselItemComponent, selector: "fd-carousel-item", inputs: ["id", "ariaLabel", "ariaLabelledBy", "ariaDescribedBy", "loading", "title", "initialHeight", "initialWidth", "value"] }, { kind: "directive", type: i1$3.TileContentDirective, selector: "[fdTileContent], [fd-tile-content]", inputs: ["twoColumn"] }, { kind: "directive", type: i1$3.TileFooterDirective, selector: "[fdTileFooter], [fd-tile-footer]", inputs: ["twoColumn"] }, { kind: "directive", type: i1$3.TileSectionDirective, selector: "[fdTileSection], [fd-tile-section]" }, { kind: "directive", type: i1$3.TileFooterTextDirective, selector: "[fdTileFooterText], [fd-tile-footer-text]" }, { kind: "directive", type: i1.UntilInViewDirective, selector: "[untilInView]", inputs: ["untilInView", "intersectionDebounce"] }, { kind: "component", type: TileComponent, selector: "bt-tile", inputs: ["type", "footerTemplate", "footer", "disableClick", "title", "icon", "subtitle", "isDouble", "edit", "backColor", "dynamicCommand"] }, { kind: "pipe", type: i1.PictureFieldSourcePipe, name: "picFieldSrc" }, { kind: "pipe", type: i1.BbbTranslatePipe, name: "bbbTranslate" }, { kind: "pipe", type: TilePropPipe, name: "tileProp" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1698
+ }
1699
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: NewsTileComponent, decorators: [{
1700
+ type: Component,
1701
+ args: [{ selector: 'bt-news-tile', changeDetection: ChangeDetectionStrategy.OnPush, template: "<bt-tile\r\n [data]=\"data\"\r\n [type]=\"'launch'\"\r\n [footerTemplate]=\"newsFooter\"\r\n [edit]=\"edit\"\r\n [title]=\"data | tileProp: 'Title':parameters\"\r\n [subtitle]=\"data | tileProp: 'Subtitle':parameters\"\r\n [dynamicCommand]=\"data | tileProp: 'DynamicCommand':parameters\"\r\n [isDouble]=\"data | tileProp: 'IsDouble':parameters\"\r\n [footer]=\"data | tileProp: 'Footer':parameters\"\r\n (hideClick)=\"hideClick.emit()\"\r\n (renameClick)=\"renameClick.emit()\"\r\n (click)=\"onTileClick()\"\r\n>\r\n <div fd-tile-content style=\"align-items: center; padding-top: 1rem\">\r\n <span>\r\n {{ activeNews?.Text | bbbTranslate }}\r\n </span>\r\n\r\n <div class=\"wrapper-carousel\">\r\n <div class=\"cover\"></div>\r\n @if (slides.length > 1) {\r\n <button\r\n fd-button\r\n fdType=\"transparent\"\r\n [glyph]=\"isStop ? 'play' : 'pause'\"\r\n (click)=\"isStop = !isStop; $event.preventDefault(); $event.stopPropagation()\"\r\n ></button>\r\n }\r\n <fd-carousel\r\n carouselIndicatorsOrientation=\"top\"\r\n [slideTransitionDuration]=\"1000\"\r\n (slideChange)=\"slideChange($event)\"\r\n [loop]=\"true\"\r\n [navigation]=\"false\"\r\n [navigatorInPageIndicator]=\"false\"\r\n width=\"100%\"\r\n >\r\n @for (slide of slides; track slide) {\r\n <fd-carousel-item [value]=\"slide\">\r\n <img\r\n [src]=\"slide.Img ? (slide.Img.FileId | picFieldSrc: 'ID':null:slide.Img.FileId:335:170) : ''\"\r\n />\r\n </fd-carousel-item>\r\n }\r\n </fd-carousel>\r\n </div>\r\n </div>\r\n</bt-tile>\r\n\r\n<!-- tile footer-->\r\n<ng-template #newsFooter>\r\n <div fd-tile-footer [twoColumn]=\"twoColumn\" *untilInView=\"el\">\r\n @if (twoColumn) {\r\n <div fd-tile-section>\r\n <span fd-tile-footer-text>{{ activeNews?.Footer1 | bbbTranslate }}</span>\r\n </div>\r\n <div fd-tile-section>\r\n <span fd-tile-footer-text>{{ activeNews?.Footer2 | bbbTranslate }}</span>\r\n </div>\r\n } @else {\r\n <span fd-tile-footer-text>{{ activeNews?.Footer1 | bbbTranslate }}</span>\r\n }\r\n </div>\r\n</ng-template>\r\n", styles: [":host{position:relative;display:block}:host bt-tile{position:relative}:host bt-tile .wrapper-carousel{position:absolute;top:0;width:100%;height:100%;left:0;z-index:0}:host bt-tile .wrapper-carousel img{width:335px;height:165px;object-fit:cover}:host ::ng-deep span{z-index:3;color:#fff}:host ::ng-deep button{position:absolute;right:15px;top:15px;display:none}:host ::ng-deep button fd-icon{z-index:4;min-width:1.5rem!important;font-size:1.5rem!important;color:#fff!important}:host ::ng-deep .fd-carousel__content{z-index:3}:host ::ng-deep .fd-carousel__page-indicator-container{position:absolute;bottom:0;display:none;background-color:transparent}:host ::ng-deep .fd-carousel__page-indicator-container ol{z-index:5}:host ::ng-deep .fd-carousel__page-indicator-container ol li{background-color:#dad7d7}:host ::ng-deep .fd-carousel__page-indicator-container ol li.fd-carousel__page-indicator--active{background-color:#fff}:host .cover{background-color:#064079d9;position:absolute;bottom:0;left:0;right:0;height:50%;z-index:4;opacity:.6}:host:hover ::ng-deep .fd-carousel__page-indicator-container{display:inherit}:host:hover ::ng-deep button{display:inline-flex}\n"] }]
1702
+ }], propDecorators: { carouselComponent: [{
1703
+ type: ViewChild,
1704
+ args: [CarouselComponent]
1705
+ }] } });
1706
+
1707
+ class MicroTileChartComparisonComponent extends BaseBtTileComponent {
1708
+ constructor() {
1709
+ super(...arguments);
1710
+ this.chartData = {
1711
+ data: [
1712
+ { value: 5, color: '#de890d', label: 'تاخیر' },
1713
+ {
1714
+ value: 45,
1715
+ color: '#dc0d0e',
1716
+ label: 'هم اکنون'
1717
+ },
1718
+ { value: 100, color: '#3fa45b', label: 'به موقع' }
1719
+ ],
1720
+ suffix: '%'
1721
+ };
1722
+ }
1723
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: MicroTileChartComparisonComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
1724
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.5", type: MicroTileChartComparisonComponent, selector: "bt-micro-tile-chart-comparison", usesInheritance: true, ngImport: i0, template: "<bt-tile\r\n [data]=\"data\"\r\n [type]=\"'launch'\"\r\n [edit]=\"edit\"\r\n [title]=\"data | tileProp: 'Title':parameters\"\r\n [subtitle]=\"data | tileProp: 'Subtitle':parameters\"\r\n [dynamicCommand]=\"data | tileProp: 'DynamicCommand':parameters\"\r\n [isDouble]=\"data | tileProp: 'IsDouble':parameters\"\r\n [footer]=\"data | tileProp: 'Footer':parameters\"\r\n (hideClick)=\"hideClick.emit()\"\r\n (renameClick)=\"renameClick.emit()\"\r\n (click)=\"onTileClick()\"\r\n>\r\n <div fd-tile-content>\r\n <be-micro-chart-comparison [data]=\"chartData\" [size]=\"double ? 'l' : 's'\"></be-micro-chart-comparison>\r\n </div>\r\n</bt-tile>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.TileContentDirective, selector: "[fdTileContent], [fd-tile-content]", inputs: ["twoColumn"] }, { kind: "component", type: i2$2.MicroChartComparisonComponent, selector: "be-micro-chart-comparison", inputs: ["data", "size"] }, { kind: "component", type: TileComponent, selector: "bt-tile", inputs: ["type", "footerTemplate", "footer", "disableClick", "title", "icon", "subtitle", "isDouble", "edit", "backColor", "dynamicCommand"] }, { kind: "pipe", type: TilePropPipe, name: "tileProp" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1725
+ }
1726
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: MicroTileChartComparisonComponent, decorators: [{
1727
+ type: Component,
1728
+ args: [{ selector: 'bt-micro-tile-chart-comparison', changeDetection: ChangeDetectionStrategy.OnPush, template: "<bt-tile\r\n [data]=\"data\"\r\n [type]=\"'launch'\"\r\n [edit]=\"edit\"\r\n [title]=\"data | tileProp: 'Title':parameters\"\r\n [subtitle]=\"data | tileProp: 'Subtitle':parameters\"\r\n [dynamicCommand]=\"data | tileProp: 'DynamicCommand':parameters\"\r\n [isDouble]=\"data | tileProp: 'IsDouble':parameters\"\r\n [footer]=\"data | tileProp: 'Footer':parameters\"\r\n (hideClick)=\"hideClick.emit()\"\r\n (renameClick)=\"renameClick.emit()\"\r\n (click)=\"onTileClick()\"\r\n>\r\n <div fd-tile-content>\r\n <be-micro-chart-comparison [data]=\"chartData\" [size]=\"double ? 'l' : 's'\"></be-micro-chart-comparison>\r\n </div>\r\n</bt-tile>\r\n" }]
1729
+ }] });
1730
+
1731
+ class MicroTileChartStackbarComponent extends BaseBtTileComponent {
1732
+ constructor() {
1733
+ super(...arguments);
1734
+ this.charData = {
1735
+ data: [
1736
+ { value: 20, color: '#3fa45b' },
1737
+ { value: 30, color: '#e9730c' },
1738
+ { value: 50, color: '#dc0d0e' }
1739
+ ],
1740
+ suffix: '%'
1741
+ };
1742
+ }
1743
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: MicroTileChartStackbarComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
1744
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.5", type: MicroTileChartStackbarComponent, selector: "bt-micro-tile-chart-stackbar", usesInheritance: true, ngImport: i0, template: "<bt-tile\r\n [data]=\"data\"\r\n [type]=\"'launch'\"\r\n [edit]=\"edit\"\r\n [title]=\"data | tileProp: 'Title':parameters\"\r\n [subtitle]=\"data | tileProp: 'Subtitle':parameters\"\r\n [dynamicCommand]=\"data | tileProp: 'DynamicCommand':parameters\"\r\n [isDouble]=\"data | tileProp: 'IsDouble':parameters\"\r\n [footer]=\"data | tileProp: 'Footer':parameters\"\r\n (hideClick)=\"hideClick.emit()\"\r\n (renameClick)=\"renameClick.emit()\"\r\n (click)=\"onTileClick()\"\r\n>\r\n <div fd-tile-content>\r\n <be-micro-chart-stackbar [data]=\"charData\"></be-micro-chart-stackbar>\r\n </div>\r\n</bt-tile>\r\n", styles: [".chart{width:100%}\n"], dependencies: [{ kind: "directive", type: i1$3.TileContentDirective, selector: "[fdTileContent], [fd-tile-content]", inputs: ["twoColumn"] }, { kind: "component", type: i2$2.MicroChartStackbarComponent, selector: "be-micro-chart-stackbar", inputs: ["data"] }, { kind: "component", type: TileComponent, selector: "bt-tile", inputs: ["type", "footerTemplate", "footer", "disableClick", "title", "icon", "subtitle", "isDouble", "edit", "backColor", "dynamicCommand"] }, { kind: "pipe", type: TilePropPipe, name: "tileProp" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1745
+ }
1746
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: MicroTileChartStackbarComponent, decorators: [{
1747
+ type: Component,
1748
+ args: [{ selector: 'bt-micro-tile-chart-stackbar', changeDetection: ChangeDetectionStrategy.OnPush, template: "<bt-tile\r\n [data]=\"data\"\r\n [type]=\"'launch'\"\r\n [edit]=\"edit\"\r\n [title]=\"data | tileProp: 'Title':parameters\"\r\n [subtitle]=\"data | tileProp: 'Subtitle':parameters\"\r\n [dynamicCommand]=\"data | tileProp: 'DynamicCommand':parameters\"\r\n [isDouble]=\"data | tileProp: 'IsDouble':parameters\"\r\n [footer]=\"data | tileProp: 'Footer':parameters\"\r\n (hideClick)=\"hideClick.emit()\"\r\n (renameClick)=\"renameClick.emit()\"\r\n (click)=\"onTileClick()\"\r\n>\r\n <div fd-tile-content>\r\n <be-micro-chart-stackbar [data]=\"charData\"></be-micro-chart-stackbar>\r\n </div>\r\n</bt-tile>\r\n", styles: [".chart{width:100%}\n"] }]
1749
+ }] });
1750
+
1751
+ class MicroTileChartLineComponent extends BaseBtTileComponent {
1752
+ constructor() {
1753
+ super(...arguments);
1754
+ this.chartData = {
1755
+ data: [
1756
+ { value: 2, label: '1 آبان' },
1757
+ { value: 4, label: 'آبان 20' },
1758
+ {
1759
+ value: 3,
1760
+ label: 'آبان 27'
1761
+ },
1762
+ { value: 5, label: 'آبان 30' }
1763
+ ],
1764
+ color: '',
1765
+ suffix: 'M'
1766
+ };
1767
+ }
1768
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: MicroTileChartLineComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
1769
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.5", type: MicroTileChartLineComponent, selector: "bt-micro-tile-chart-line", usesInheritance: true, ngImport: i0, template: "<bt-tile\r\n [data]=\"data\"\r\n [type]=\"'launch'\"\r\n [edit]=\"edit\"\r\n [title]=\"data | tileProp: 'Title':parameters\"\r\n [subtitle]=\"data | tileProp: 'Subtitle':parameters\"\r\n [dynamicCommand]=\"data | tileProp: 'DynamicCommand':parameters\"\r\n [isDouble]=\"data | tileProp: 'IsDouble':parameters\"\r\n [footer]=\"data | tileProp: 'Footer':parameters\"\r\n (hideClick)=\"hideClick.emit()\"\r\n (renameClick)=\"renameClick.emit()\"\r\n (click)=\"onTileClick()\"\r\n>\r\n <div fd-tile-content>\r\n <be-micro-chart-line [line]=\"chartData\"></be-micro-chart-line>\r\n </div>\r\n</bt-tile>\r\n", styles: ["be-micro-chart-bar{display:flex;flex-direction:column}\n"], dependencies: [{ kind: "directive", type: i1$3.TileContentDirective, selector: "[fdTileContent], [fd-tile-content]", inputs: ["twoColumn"] }, { kind: "component", type: i2$2.MicroChartLineComponent, selector: "be-micro-chart-line", inputs: ["line"] }, { kind: "component", type: TileComponent, selector: "bt-tile", inputs: ["type", "footerTemplate", "footer", "disableClick", "title", "icon", "subtitle", "isDouble", "edit", "backColor", "dynamicCommand"] }, { kind: "pipe", type: TilePropPipe, name: "tileProp" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1770
+ }
1771
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: MicroTileChartLineComponent, decorators: [{
1772
+ type: Component,
1773
+ args: [{ selector: 'bt-micro-tile-chart-line', changeDetection: ChangeDetectionStrategy.OnPush, template: "<bt-tile\r\n [data]=\"data\"\r\n [type]=\"'launch'\"\r\n [edit]=\"edit\"\r\n [title]=\"data | tileProp: 'Title':parameters\"\r\n [subtitle]=\"data | tileProp: 'Subtitle':parameters\"\r\n [dynamicCommand]=\"data | tileProp: 'DynamicCommand':parameters\"\r\n [isDouble]=\"data | tileProp: 'IsDouble':parameters\"\r\n [footer]=\"data | tileProp: 'Footer':parameters\"\r\n (hideClick)=\"hideClick.emit()\"\r\n (renameClick)=\"renameClick.emit()\"\r\n (click)=\"onTileClick()\"\r\n>\r\n <div fd-tile-content>\r\n <be-micro-chart-line [line]=\"chartData\"></be-micro-chart-line>\r\n </div>\r\n</bt-tile>\r\n", styles: ["be-micro-chart-bar{display:flex;flex-direction:column}\n"] }]
1774
+ }] });
1775
+
1776
+ class MicroTileChartCircularComponent extends BaseBtTileComponent {
1777
+ constructor() {
1778
+ super(...arguments);
1779
+ this.chartData = 70;
1780
+ }
1781
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: MicroTileChartCircularComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
1782
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.5", type: MicroTileChartCircularComponent, selector: "bt-micro-tile-chart-circular", usesInheritance: true, ngImport: i0, template: "<bt-tile\r\n [data]=\"data\"\r\n [type]=\"'launch'\"\r\n [edit]=\"edit\"\r\n [title]=\"data | tileProp: 'Title':parameters\"\r\n [subtitle]=\"data | tileProp: 'Subtitle':parameters\"\r\n [dynamicCommand]=\"data | tileProp: 'DynamicCommand':parameters\"\r\n [isDouble]=\"data | tileProp: 'IsDouble':parameters\"\r\n [footer]=\"data | tileProp: 'Footer':parameters\"\r\n (hideClick)=\"hideClick.emit()\"\r\n (renameClick)=\"renameClick.emit()\"\r\n (click)=\"onTileClick()\"\r\n>\r\n <div fd-tile-content>\r\n <be-micro-chart-circular [data]=\"chartData\"></be-micro-chart-circular>\r\n </div>\r\n</bt-tile>\r\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: i1$3.TileContentDirective, selector: "[fdTileContent], [fd-tile-content]", inputs: ["twoColumn"] }, { kind: "component", type: i2$2.MicroChartCircularComponent, selector: "be-micro-chart-circular", inputs: ["data"] }, { kind: "component", type: TileComponent, selector: "bt-tile", inputs: ["type", "footerTemplate", "footer", "disableClick", "title", "icon", "subtitle", "isDouble", "edit", "backColor", "dynamicCommand"] }, { kind: "pipe", type: TilePropPipe, name: "tileProp" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1783
+ }
1784
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: MicroTileChartCircularComponent, decorators: [{
1785
+ type: Component,
1786
+ args: [{ selector: 'bt-micro-tile-chart-circular', changeDetection: ChangeDetectionStrategy.OnPush, template: "<bt-tile\r\n [data]=\"data\"\r\n [type]=\"'launch'\"\r\n [edit]=\"edit\"\r\n [title]=\"data | tileProp: 'Title':parameters\"\r\n [subtitle]=\"data | tileProp: 'Subtitle':parameters\"\r\n [dynamicCommand]=\"data | tileProp: 'DynamicCommand':parameters\"\r\n [isDouble]=\"data | tileProp: 'IsDouble':parameters\"\r\n [footer]=\"data | tileProp: 'Footer':parameters\"\r\n (hideClick)=\"hideClick.emit()\"\r\n (renameClick)=\"renameClick.emit()\"\r\n (click)=\"onTileClick()\"\r\n>\r\n <div fd-tile-content>\r\n <be-micro-chart-circular [data]=\"chartData\"></be-micro-chart-circular>\r\n </div>\r\n</bt-tile>\r\n", styles: [":host{display:block}\n"] }]
1787
+ }] });
1788
+
1789
+ class MicroTileChartAreaComponent extends BaseBtTileComponent {
1790
+ constructor() {
1791
+ super(...arguments);
1792
+ this.chartData = {
1793
+ areas: [
1794
+ { data: [2.5, 2.5, 2.5, 2.5], color: '#3fa45b' },
1795
+ {
1796
+ data: [2, 2, 2, 2],
1797
+ color: '#e9730c'
1798
+ },
1799
+ { data: [1.5, 1.5, 1.5, 1.5], color: '#dc0d0e' }
1800
+ ],
1801
+ line: {
1802
+ data: [
1803
+ { value: 2, label: 'june 1' },
1804
+ { value: 4, label: 'june 20' },
1805
+ { value: 3, label: 'june 27' },
1806
+ { value: 5, label: 'june 30' }
1807
+ ],
1808
+ suffix: 'M'
1809
+ },
1810
+ firstValueColor: '#3fa45b',
1811
+ lastValueColor: '#dc0d0e'
1812
+ };
1813
+ }
1814
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: MicroTileChartAreaComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
1815
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.5", type: MicroTileChartAreaComponent, selector: "bt-micro-tile-chart-area", usesInheritance: true, ngImport: i0, template: "<bt-tile\r\n [data]=\"data\"\r\n [type]=\"'launch'\"\r\n [edit]=\"edit\"\r\n [title]=\"data | tileProp: 'Title':parameters\"\r\n [subtitle]=\"data | tileProp: 'Subtitle':parameters\"\r\n [dynamicCommand]=\"data | tileProp: 'DynamicCommand':parameters\"\r\n [isDouble]=\"data | tileProp: 'IsDouble':parameters\"\r\n [footer]=\"data | tileProp: 'Footer':parameters\"\r\n (hideClick)=\"hideClick.emit()\"\r\n (renameClick)=\"renameClick.emit()\"\r\n (click)=\"onTileClick()\"\r\n>\r\n <div fd-tile-content>\r\n <be-micro-chart-area\r\n [style.flex-direction]=\"double ? 'row' : 'column'\"\r\n [chartData]=\"chartData\"\r\n [size]=\"double ? 'l' : 's'\"\r\n ></be-micro-chart-area>\r\n </div>\r\n</bt-tile>\r\n", styles: [":host{display:block}be-micro-chart-area{display:flex}\n"], dependencies: [{ kind: "directive", type: i1$3.TileContentDirective, selector: "[fdTileContent], [fd-tile-content]", inputs: ["twoColumn"] }, { kind: "component", type: i2$2.MicroChartAreaComponent, selector: "be-micro-chart-area", inputs: ["size", "chartData"] }, { kind: "component", type: TileComponent, selector: "bt-tile", inputs: ["type", "footerTemplate", "footer", "disableClick", "title", "icon", "subtitle", "isDouble", "edit", "backColor", "dynamicCommand"] }, { kind: "pipe", type: TilePropPipe, name: "tileProp" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1816
+ }
1817
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: MicroTileChartAreaComponent, decorators: [{
1818
+ type: Component,
1819
+ args: [{ selector: 'bt-micro-tile-chart-area', changeDetection: ChangeDetectionStrategy.OnPush, template: "<bt-tile\r\n [data]=\"data\"\r\n [type]=\"'launch'\"\r\n [edit]=\"edit\"\r\n [title]=\"data | tileProp: 'Title':parameters\"\r\n [subtitle]=\"data | tileProp: 'Subtitle':parameters\"\r\n [dynamicCommand]=\"data | tileProp: 'DynamicCommand':parameters\"\r\n [isDouble]=\"data | tileProp: 'IsDouble':parameters\"\r\n [footer]=\"data | tileProp: 'Footer':parameters\"\r\n (hideClick)=\"hideClick.emit()\"\r\n (renameClick)=\"renameClick.emit()\"\r\n (click)=\"onTileClick()\"\r\n>\r\n <div fd-tile-content>\r\n <be-micro-chart-area\r\n [style.flex-direction]=\"double ? 'row' : 'column'\"\r\n [chartData]=\"chartData\"\r\n [size]=\"double ? 'l' : 's'\"\r\n ></be-micro-chart-area>\r\n </div>\r\n</bt-tile>\r\n", styles: [":host{display:block}be-micro-chart-area{display:flex}\n"] }]
1820
+ }] });
1821
+
1822
+ class MicroTileChartBarComponent extends BaseBtTileComponent {
1823
+ constructor() {
1824
+ super(...arguments);
1825
+ this.chartData = [
1826
+ { value: 5, color: '#dc0d0e', label: 'q1' },
1827
+ { value: 10, color: '#dc0d0e', label: 'q4' },
1828
+ { value: 20, color: '#e9730c', label: 'q2' },
1829
+ { value: 36, color: '#3fa45b', label: 'q3' }
1830
+ ];
1831
+ this.extraData = {
1832
+ value: 1.8,
1833
+ suffix: 'M'
1834
+ };
1835
+ }
1836
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: MicroTileChartBarComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
1837
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.5", type: MicroTileChartBarComponent, selector: "bt-micro-tile-chart-bar", usesInheritance: true, ngImport: i0, template: "<bt-tile\r\n [data]=\"data\"\r\n [type]=\"'launch'\"\r\n [edit]=\"edit\"\r\n [title]=\"data | tileProp: 'Title':parameters\"\r\n [subtitle]=\"data | tileProp: 'Subtitle':parameters\"\r\n [dynamicCommand]=\"data | tileProp: 'DynamicCommand':parameters\"\r\n [isDouble]=\"data | tileProp: 'IsDouble':parameters\"\r\n [footer]=\"data | tileProp: 'Footer':parameters\"\r\n (hideClick)=\"hideClick.emit()\"\r\n (renameClick)=\"renameClick.emit()\"\r\n (click)=\"onTileClick()\"\r\n>\r\n <div fd-tile-content>\r\n <be-micro-chart-bar [data]=\"chartData\" [size]=\"double ? 'l' : 's'\" [extraData]=\"extraData\"></be-micro-chart-bar>\r\n </div>\r\n</bt-tile>\r\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: i1$3.TileContentDirective, selector: "[fdTileContent], [fd-tile-content]", inputs: ["twoColumn"] }, { kind: "component", type: i2$2.MicroChartBarComponent, selector: "be-micro-chart-bar", inputs: ["data", "size", "extraData"] }, { kind: "component", type: TileComponent, selector: "bt-tile", inputs: ["type", "footerTemplate", "footer", "disableClick", "title", "icon", "subtitle", "isDouble", "edit", "backColor", "dynamicCommand"] }, { kind: "pipe", type: TilePropPipe, name: "tileProp" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1838
+ }
1839
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: MicroTileChartBarComponent, decorators: [{
1840
+ type: Component,
1841
+ args: [{ selector: 'bt-micro-tile-chart-bar', changeDetection: ChangeDetectionStrategy.OnPush, template: "<bt-tile\r\n [data]=\"data\"\r\n [type]=\"'launch'\"\r\n [edit]=\"edit\"\r\n [title]=\"data | tileProp: 'Title':parameters\"\r\n [subtitle]=\"data | tileProp: 'Subtitle':parameters\"\r\n [dynamicCommand]=\"data | tileProp: 'DynamicCommand':parameters\"\r\n [isDouble]=\"data | tileProp: 'IsDouble':parameters\"\r\n [footer]=\"data | tileProp: 'Footer':parameters\"\r\n (hideClick)=\"hideClick.emit()\"\r\n (renameClick)=\"renameClick.emit()\"\r\n (click)=\"onTileClick()\"\r\n>\r\n <div fd-tile-content>\r\n <be-micro-chart-bar [data]=\"chartData\" [size]=\"double ? 'l' : 's'\" [extraData]=\"extraData\"></be-micro-chart-bar>\r\n </div>\r\n</bt-tile>\r\n", styles: [":host{display:block}\n"] }]
1842
+ }] });
1843
+
1844
+ class CreateAppGroupComponent extends BaseComponent {
1845
+ constructor(fb, dialogRef, bbbPipe) {
1846
+ super();
1847
+ this.fb = fb;
1848
+ this.dialogRef = dialogRef;
1849
+ this.bbbPipe = bbbPipe;
1850
+ }
1851
+ ngOnInit() {
1852
+ super.ngOnInit();
1853
+ this.appGroupForm = this.fb.group({
1854
+ title: new UntypedFormControl(this.title, [Validators.required])
1855
+ });
1856
+ const mandatoryFieldText = this.bbbPipe.transform('AlertFieldIsMandatory');
1857
+ const titleText = this.bbbPipe.transform('Title');
1858
+ this.RequiredText = mandatoryFieldText.replace('{0}', titleText);
1859
+ }
1860
+ onSave() {
1861
+ this.submitted = true;
1862
+ if (this.appGroupForm.valid) {
1863
+ this.dialogRef.close(this.title);
1864
+ }
1865
+ }
1866
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: CreateAppGroupComponent, deps: [{ token: i1$5.UntypedFormBuilder }, { token: i1$1.DialogRef }, { token: i1.BbbTranslatePipe }], target: i0.ɵɵFactoryTarget.Component }); }
1867
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: CreateAppGroupComponent, selector: "bt-create-app-group", usesInheritance: true, ngImport: i0, template: "<fd-dialog>\r\n <fd-dialog-header>\r\n <h1 fd-title>{{ dialogRef.data.title }}</h1>\r\n <button fd-dialog-close-button (click)=\"dialogRef.dismiss()\"></button>\r\n </fd-dialog-header>\r\n\r\n <fd-dialog-body>\r\n <div fd-form-item [formGroup]=\"appGroupForm\">\r\n <label fd-form-label [required]=\"true\"> {{ 'Title' | bbbTranslate }}</label>\r\n <fd-form-input-message-group>\r\n <fd-input-group\r\n class=\"form-control\"\r\n formControlName=\"title\"\r\n form-control\r\n [button]=\"true\"\r\n [(ngModel)]=\"title\"\r\n [state]=\"submitted && appGroupForm.controls.title.errors ? 'error' : 'information'\"\r\n >\r\n </fd-input-group>\r\n @if (submitted && appGroupForm.controls.title.errors) {\r\n <fd-form-message type=\"error\">\r\n {{ RequiredText }}\r\n </fd-form-message>\r\n }\r\n </fd-form-input-message-group>\r\n </div>\r\n </fd-dialog-body>\r\n\r\n <fd-dialog-footer>\r\n <fd-button-bar [label]=\"'Save' | bbbTranslate\" fdType=\"emphasized\" (click)=\"onSave()\"> </fd-button-bar>\r\n <fd-button-bar\r\n [label]=\"'Cancel' | bbbTranslate\"\r\n fdkInitialFocus\r\n fdType=\"transparent\"\r\n (click)=\"this.dialogRef.dismiss()\"\r\n >\r\n </fd-button-bar>\r\n </fd-dialog-footer>\r\n</fd-dialog>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i1$5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i4$2.ButtonBarComponent, selector: "fd-button-bar", inputs: ["fullWidth", "fdType", "title", "ariaLabelledby", "id"] }, { kind: "component", type: i5.FormItemComponent, selector: "[fd-form-item]", inputs: ["isInline", "horizontal"] }, { kind: "component", type: i5.FormLabelComponent, selector: "[fd-form-label]", inputs: ["required", "colon", "alignLabelEnd", "inlineHelpContent", "inlineHelpGlyph", "inlineHelpTriggers", "inlineHelpBodyPlacement", "inlineHelpPlacement", "inlineHelpLabel", "id"] }, { kind: "component", type: i5.FormMessageComponent, selector: "fd-form-message", inputs: ["type", "static", "embedded", "class"] }, { kind: "component", type: i5.FormInputMessageGroupComponent, selector: "fd-form-input-message-group", inputs: ["triggers", "closeOnOutsideClick", "fillControlMode", "noArrow", "closeOnEscapeKey", "placement", "placementContainer", "isOpen", "preventSpaceKeyScroll"], outputs: ["isOpenChange"] }, { kind: "component", type: i6$1.InputGroupComponent, selector: "fd-input-group", inputs: ["placement", "required", "inline", "addOnText", "buttonFocusable", "type", "glyph", "glyphFont", "button", "isControl", "showFocus", "isExpanded", "glyphAriaLabel", "addonButtonAriaHidden", "iconTitle", "ariaLabelledBy"], outputs: ["addOnButtonClicked", "search"] }, { kind: "component", type: i7.DialogComponent, selector: "fd-dialog", inputs: ["class", "dialogRef", "dialogConfig"] }, { kind: "component", type: i7.DialogBodyComponent, selector: "fd-dialog-body" }, { kind: "component", type: i7.DialogFooterComponent, selector: "fd-dialog-footer" }, { kind: "component", type: i7.DialogHeaderComponent, selector: "fd-dialog-header" }, { kind: "component", type: i7.DialogCloseButtonComponent, selector: "[fd-dialog-close-button]", inputs: ["mobile", "title", "ariaLabel"] }, { kind: "component", type: i8.TitleComponent, selector: "[fd-title], [fdTitle]", inputs: ["headerSize", "wrap"], exportAs: ["fd-title"] }, { kind: "directive", type: i9$1.InitialFocusDirective, selector: "[fdkInitialFocus]", inputs: ["fdkInitialFocus", "enabled", "focusLastElement"] }, { kind: "directive", type: i1$5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "pipe", type: i1.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1868
+ }
1869
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: CreateAppGroupComponent, decorators: [{
1870
+ type: Component,
1871
+ args: [{ selector: 'bt-create-app-group', changeDetection: ChangeDetectionStrategy.OnPush, template: "<fd-dialog>\r\n <fd-dialog-header>\r\n <h1 fd-title>{{ dialogRef.data.title }}</h1>\r\n <button fd-dialog-close-button (click)=\"dialogRef.dismiss()\"></button>\r\n </fd-dialog-header>\r\n\r\n <fd-dialog-body>\r\n <div fd-form-item [formGroup]=\"appGroupForm\">\r\n <label fd-form-label [required]=\"true\"> {{ 'Title' | bbbTranslate }}</label>\r\n <fd-form-input-message-group>\r\n <fd-input-group\r\n class=\"form-control\"\r\n formControlName=\"title\"\r\n form-control\r\n [button]=\"true\"\r\n [(ngModel)]=\"title\"\r\n [state]=\"submitted && appGroupForm.controls.title.errors ? 'error' : 'information'\"\r\n >\r\n </fd-input-group>\r\n @if (submitted && appGroupForm.controls.title.errors) {\r\n <fd-form-message type=\"error\">\r\n {{ RequiredText }}\r\n </fd-form-message>\r\n }\r\n </fd-form-input-message-group>\r\n </div>\r\n </fd-dialog-body>\r\n\r\n <fd-dialog-footer>\r\n <fd-button-bar [label]=\"'Save' | bbbTranslate\" fdType=\"emphasized\" (click)=\"onSave()\"> </fd-button-bar>\r\n <fd-button-bar\r\n [label]=\"'Cancel' | bbbTranslate\"\r\n fdkInitialFocus\r\n fdType=\"transparent\"\r\n (click)=\"this.dialogRef.dismiss()\"\r\n >\r\n </fd-button-bar>\r\n </fd-dialog-footer>\r\n</fd-dialog>\r\n" }]
1872
+ }], ctorParameters: () => [{ type: i1$5.UntypedFormBuilder }, { type: i1$1.DialogRef }, { type: i1.BbbTranslatePipe }] });
1873
+
1874
+ class PinTileComponent extends BaseComponent {
1875
+ constructor(_dialogService, _dialogRef, bbbPipe) {
1876
+ super();
1877
+ this._dialogService = _dialogService;
1878
+ this._dialogRef = _dialogRef;
1879
+ this.bbbPipe = bbbPipe;
1880
+ this.newGroupText = BarsaApi.LoginFormData.IsRtl
1881
+ ? this.bbbPipe.transform('Groups') + ' ' + this.bbbPipe.transform('New')
1882
+ : this.bbbPipe.transform('New') + ' ' + this.bbbPipe.transform('Groups');
1883
+ this.app = _dialogRef.data.app;
1884
+ this.appTileGroups = _dialogRef.data.appTileGroups;
1885
+ this.pinnedAppInTileGroups = _dialogRef.data.pinnedAppInTileGroups;
1886
+ }
1887
+ ngOnInit() {
1888
+ this._setLoading(true);
1889
+ const tileGroupsId = this.pinnedAppInTileGroups[this.app.Id];
1890
+ this.appTileGroups.forEach((appGroup) => {
1891
+ this._setDefaultPinTile(appGroup, tileGroupsId);
1892
+ });
1893
+ this._setLoading(false);
1894
+ }
1895
+ onAccept() {
1896
+ const appTileGroupsPin = [];
1897
+ this.appTileGroups.forEach((group) => {
1898
+ this._getChangedPinTileGroups(group, appTileGroupsPin);
1899
+ });
1900
+ this._close({ appTileGroupsPin, app: this.app });
1901
+ }
1902
+ onClose() {
1903
+ this._close();
1904
+ }
1905
+ onNewGroup() {
1906
+ this.newGroupDialogRef = this._dialogService.open(CreateAppGroupComponent, {
1907
+ data: { title: this.newGroupText },
1908
+ verticalPadding: true,
1909
+ mobile: this.mobile,
1910
+ responsivePadding: true
1911
+ });
1912
+ this.newGroupDialogRef.afterClosed.subscribe(() => {
1913
+ // if (result) {
1914
+ // this.dialogRef.loading(true);
1915
+ // this.tilesService
1916
+ // .createAppGroup(result)
1917
+ // .pipe(
1918
+ // takeUntil(this._onDestroy$),
1919
+ // finalize(() => {
1920
+ // this.dialogRef.loading(false);
1921
+ // })
1922
+ // )
1923
+ // .subscribe();
1924
+ // }
1925
+ });
1926
+ }
1927
+ _setLoading(loading) {
1928
+ this._dialogRef.loading(loading);
1929
+ }
1930
+ _setDefaultPinTile(appTileGroup, tileGroupsId) {
1931
+ appTileGroup.$PinTile = appTileGroup.$DefaultPinTile =
1932
+ tileGroupsId.includes(appTileGroup.Id) || tileGroupsId.includes(appTileGroup.UserAppTileGroupSetting?.Id);
1933
+ appTileGroup.$Children?.forEach((subGroup) => {
1934
+ this._setDefaultPinTile(subGroup, tileGroupsId);
1935
+ });
1936
+ appTileGroup.$Disabledpin = false;
1937
+ }
1938
+ _getChangedPinTileGroups(appTileGroup, appTileGroupsPin) {
1939
+ if (appTileGroup.$PinTile && !appTileGroup.$DefaultPinTile) {
1940
+ // Add
1941
+ appTileGroupsPin.push({ appTileGroup, visible: true });
1942
+ }
1943
+ else if (appTileGroup.$PinTile === false && appTileGroup.$DefaultPinTile) {
1944
+ // Remove
1945
+ appTileGroupsPin.push({ appTileGroup, visible: false });
1946
+ }
1947
+ appTileGroup.$Children?.forEach((subGroup) => {
1948
+ this._getChangedPinTileGroups(subGroup, appTileGroupsPin);
1949
+ });
1950
+ }
1951
+ _close(result) {
1952
+ this._dialogRef.close(result);
1953
+ }
1954
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: PinTileComponent, deps: [{ token: i1$1.DialogService }, { token: i1$1.DialogRef }, { token: i1.BbbTranslatePipe }], target: i0.ɵɵFactoryTarget.Component }); }
1955
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: PinTileComponent, selector: "bt-pin-tile", inputs: { app: "app", appTileGroups: "appTileGroups", mobile: "mobile", pin: "pin" }, usesInheritance: true, ngImport: i0, template: "<fd-dialog>\r\n <fd-dialog-header>\r\n <h1 fd-title>{{ 'AddToList' | bbbTranslate }}</h1>\r\n </fd-dialog-header>\r\n <fd-dialog-body>\r\n <ul fd-list [navigationIndicator]=\"true\" style=\"margin-bottom: 1rem\">\r\n <li fd-list-item [navigationIndicator]=\"true\" (click)=\"onNewGroup()\">\r\n <fd-icon glyph=\"add\"></fd-icon><span fd-list-title>{{ newGroupText }}</span>\r\n </li>\r\n @for (appTileGroup of appTileGroups; track appTileGroup) { @if (!appTileGroup.$Disabledpin) {\r\n <li fd-list-item [selected]=\"appTileGroup.$PinTile\">\r\n <fd-checkbox [(ngModel)]=\"appTileGroup.$PinTile\"></fd-checkbox>\r\n <span fd-list-title>{{ appTileGroup.navigatorTitle || appTileGroup.Title }}</span>\r\n </li>\r\n } @for (subGroup of appTileGroup.$Children; track subGroup) { @if (!subGroup.$Disabledpin) {\r\n <li fd-list-item [selected]=\"subGroup.$PinTile\">\r\n <fd-checkbox [(ngModel)]=\"subGroup.$PinTile\"></fd-checkbox>\r\n <span fd-list-title>{{ subGroup.navigatorTitle || subGroup.Title }}</span>\r\n </li>\r\n } } }\r\n </ul>\r\n </fd-dialog-body>\r\n\r\n <fd-dialog-footer>\r\n <ng-template fdkTemplate=\"footer\">\r\n <div fd-bar-left></div>\r\n <div fd-bar-right>\r\n <fd-button-bar fdkInitialFocus fdType=\"emphasized\" [label]=\"'OK' | bbbTranslate\" (click)=\"onAccept()\">\r\n </fd-button-bar>\r\n <fd-button-bar\r\n fdkInitialFocus\r\n fdType=\"transparent\"\r\n [label]=\"'Cancel' | bbbTranslate\"\r\n (click)=\"onClose()\"\r\n >\r\n </fd-button-bar>\r\n </div>\r\n </ng-template>\r\n </fd-dialog-footer>\r\n</fd-dialog>\r\n", styles: [":host ::ng-deep .cdk-drag{cursor:default!important}:host *{cursor:default!important}li{cursor:pointer}fd-dialog-body,fd-dialog-footer,fd-dialog-header{cursor:default}fd-icon{padding:0 5px}\n"], dependencies: [{ kind: "directive", type: i1$5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4$2.BarLeftDirective, selector: "[fd-bar-left]" }, { kind: "directive", type: i4$2.BarRightDirective, selector: "[fd-bar-right]" }, { kind: "component", type: i4$2.ButtonBarComponent, selector: "fd-button-bar", inputs: ["fullWidth", "fdType", "title", "ariaLabelledby", "id"] }, { kind: "component", type: i5$1.CheckboxComponent, selector: "fd-checkbox", inputs: ["wrapLabel", "valignLabel", "ariaLabel", "value", "ariaLabelledBy", "ariaDescribedBy", "title", "inputId", "state", "name", "label", "disabled", "tristate", "tristateSelectable", "labelClass", "required", "displayOnly", "values", "standalone"], outputs: ["focusChange"] }, { kind: "component", type: i1$2.IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "color", "background", "class", "ariaLabel", "ariaHidden"] }, { kind: "component", type: i8$1.ListComponent, selector: "[fd-list], [fdList]", inputs: ["dropdownMode", "multiInputMode", "mobileMode", "hasMessage", "noBorder", "navigationIndicator", "selection", "keyboardSupport", "byline", "unreadIndicator", "role"], outputs: ["focusEscapeList"] }, { kind: "component", type: i8$1.ListItemComponent, selector: "[fdListItem] ,[fd-list-item]", inputs: ["selected", "noData", "action", "interactive", "growing", "counter", "unread", "byline", "ariaRole", "id"], outputs: ["keyDown"] }, { kind: "directive", type: i8$1.ListTitleDirective, selector: "[fd-list-title], [fdListTitle]", inputs: ["wrap"] }, { kind: "component", type: i7.DialogComponent, selector: "fd-dialog", inputs: ["class", "dialogRef", "dialogConfig"] }, { kind: "component", type: i7.DialogBodyComponent, selector: "fd-dialog-body" }, { kind: "component", type: i7.DialogFooterComponent, selector: "fd-dialog-footer" }, { kind: "component", type: i7.DialogHeaderComponent, selector: "fd-dialog-header" }, { kind: "directive", type: i9$1.TemplateDirective, selector: "[fdkTemplate]", inputs: ["fdkTemplate"] }, { kind: "component", type: i8.TitleComponent, selector: "[fd-title], [fdTitle]", inputs: ["headerSize", "wrap"], exportAs: ["fd-title"] }, { kind: "directive", type: i9$1.InitialFocusDirective, selector: "[fdkInitialFocus]", inputs: ["fdkInitialFocus", "enabled", "focusLastElement"] }, { kind: "pipe", type: i1.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1956
+ }
1957
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: PinTileComponent, decorators: [{
1958
+ type: Component,
1959
+ args: [{ selector: 'bt-pin-tile', changeDetection: ChangeDetectionStrategy.OnPush, template: "<fd-dialog>\r\n <fd-dialog-header>\r\n <h1 fd-title>{{ 'AddToList' | bbbTranslate }}</h1>\r\n </fd-dialog-header>\r\n <fd-dialog-body>\r\n <ul fd-list [navigationIndicator]=\"true\" style=\"margin-bottom: 1rem\">\r\n <li fd-list-item [navigationIndicator]=\"true\" (click)=\"onNewGroup()\">\r\n <fd-icon glyph=\"add\"></fd-icon><span fd-list-title>{{ newGroupText }}</span>\r\n </li>\r\n @for (appTileGroup of appTileGroups; track appTileGroup) { @if (!appTileGroup.$Disabledpin) {\r\n <li fd-list-item [selected]=\"appTileGroup.$PinTile\">\r\n <fd-checkbox [(ngModel)]=\"appTileGroup.$PinTile\"></fd-checkbox>\r\n <span fd-list-title>{{ appTileGroup.navigatorTitle || appTileGroup.Title }}</span>\r\n </li>\r\n } @for (subGroup of appTileGroup.$Children; track subGroup) { @if (!subGroup.$Disabledpin) {\r\n <li fd-list-item [selected]=\"subGroup.$PinTile\">\r\n <fd-checkbox [(ngModel)]=\"subGroup.$PinTile\"></fd-checkbox>\r\n <span fd-list-title>{{ subGroup.navigatorTitle || subGroup.Title }}</span>\r\n </li>\r\n } } }\r\n </ul>\r\n </fd-dialog-body>\r\n\r\n <fd-dialog-footer>\r\n <ng-template fdkTemplate=\"footer\">\r\n <div fd-bar-left></div>\r\n <div fd-bar-right>\r\n <fd-button-bar fdkInitialFocus fdType=\"emphasized\" [label]=\"'OK' | bbbTranslate\" (click)=\"onAccept()\">\r\n </fd-button-bar>\r\n <fd-button-bar\r\n fdkInitialFocus\r\n fdType=\"transparent\"\r\n [label]=\"'Cancel' | bbbTranslate\"\r\n (click)=\"onClose()\"\r\n >\r\n </fd-button-bar>\r\n </div>\r\n </ng-template>\r\n </fd-dialog-footer>\r\n</fd-dialog>\r\n", styles: [":host ::ng-deep .cdk-drag{cursor:default!important}:host *{cursor:default!important}li{cursor:pointer}fd-dialog-body,fd-dialog-footer,fd-dialog-header{cursor:default}fd-icon{padding:0 5px}\n"] }]
1960
+ }], ctorParameters: () => [{ type: i1$1.DialogService }, { type: i1$1.DialogRef }, { type: i1.BbbTranslatePipe }], propDecorators: { app: [{
1961
+ type: Input
1962
+ }], appTileGroups: [{
1963
+ type: Input
1964
+ }], mobile: [{
1965
+ type: Input
1966
+ }], pin: [{
1967
+ type: Input
1968
+ }] } });
1969
+
1970
+ class AppFinderService {
1971
+ constructor(_portalService, _tileService) {
1972
+ this._portalService = _portalService;
1973
+ this._tileService = _tileService;
1974
+ this._appGroupsSource = new BehaviorSubject([]);
1975
+ this._OnDestroy$ = new Subject();
1976
+ this._selectedAppGroupIdSource = new Subject();
1977
+ this._pinnedAppInAppTileGroupsSource = new BehaviorSubject({});
1978
+ this.loadAppGroups();
1979
+ this.deviceSize$ = this._tileService.deviceSize$;
1980
+ this.pinnedAppInAppTileGroups$ = this._pinnedAppInAppTileGroupsSource.asObservable();
1981
+ this.appGroups$ = this._appGroupsSource.asObservable();
1982
+ this.selectedAppGroupId$ = this._selectedAppGroupIdSource.asObservable().pipe(distinctUntilChanged());
1983
+ this.selectedAppGroup$ = combineLatest([this.appGroups$, this.selectedAppGroupId$]).pipe(map(([moDataList, selectedId]) => moDataList?.find((c) => c.Id === selectedId)));
1984
+ }
1985
+ get deviceSize() {
1986
+ return this._portalService.deviceSize;
1987
+ }
1988
+ get appTileGroups() {
1989
+ return this._tileService.appTileGroups?.MoDataList;
1990
+ }
1991
+ ngOnDestroy() {
1992
+ this._OnDestroy$.next();
1993
+ }
1994
+ loadAppGroups() {
1995
+ this._portalService
1996
+ .ReportExecute('UserAppGroups')
1997
+ .subscribe((allApps) => this._nextAllApps(allApps.MoDataList));
1998
+ }
1999
+ selectAppGroup(appGroupId) {
2000
+ const appGroups = this._appGroupsSource.getValue();
2001
+ const group = appGroups.find((c) => c.Id === appGroupId);
2002
+ if (group) {
2003
+ this._selectedAppGroupIdSource.next(appGroupId);
2004
+ this.loadAppsByAppGroup(appGroups, group);
2005
+ }
2006
+ }
2007
+ loadAppsByAppGroup(appGroups, appGroup) {
2008
+ if (appGroup.Apps) {
2009
+ return;
2010
+ }
2011
+ const reportWrapper = BarsaApi.Bw.RunBlMethod('LoadAppsByAppGroup', appGroup.Id);
2012
+ const moForReport = reportWrapper.Unwrap();
2013
+ appGroup.Apps = appGroup.Apps ?? [];
2014
+ const apps = moForReport.MoDataList;
2015
+ if (apps.length > 0) {
2016
+ const customColumns = Object.keys(apps[0]).filter((c) => c.indexOf('$Caption') > -1 && !c.startsWith('$'));
2017
+ apps.forEach((app) => {
2018
+ customColumns.forEach((column) => {
2019
+ app.$HasPinned = app.$HasPinned || Number(app[column.split('$Caption')[0]]);
2020
+ });
2021
+ });
2022
+ }
2023
+ appGroup.Apps = [...appGroup.Apps, ...apps];
2024
+ this._nextAllApps(appGroups);
2025
+ }
2026
+ loadPinnedAppInTileGroups(app) {
2027
+ const appId = app.Id;
2028
+ const val = this._pinnedAppInAppTileGroupsSource.getValue();
2029
+ if (val[appId]) {
2030
+ return val;
2031
+ }
2032
+ const reportWrapper = BarsaApi.Bw.RunBlMethod('PinnedAppInTileGroups', appId);
2033
+ const moForReport = reportWrapper.Unwrap();
2034
+ val[appId] = val[appId] ?? [];
2035
+ const apps = moForReport.MoDataList;
2036
+ if (apps.length > 0) {
2037
+ apps.forEach((itemApp) => {
2038
+ const predefined = itemApp.Id.Id;
2039
+ const userSetting = itemApp.UserAppTileGroupSetting?.Id;
2040
+ if (predefined) {
2041
+ val[appId] = [...val[appId], predefined];
2042
+ }
2043
+ if (userSetting) {
2044
+ val[appId] = [...val[appId], userSetting];
2045
+ }
2046
+ });
2047
+ }
2048
+ this._pinnedAppInAppTileGroupsSource.next(val);
2049
+ return val;
2050
+ }
2051
+ pinTileChanged(appTileGroups, app, callback) {
2052
+ this._tileService.pinTileChanged(appTileGroups, app, (settings) => {
2053
+ const val = this._pinnedAppInAppTileGroupsSource.getValue();
2054
+ const appId = app.Id;
2055
+ for (let i = 0; i < appTileGroups.length; i++) {
2056
+ const appTileSetting = settings[i];
2057
+ const appTileGroupSettingId = appTileSetting.UserAppTileGroupSettingId;
2058
+ const appTileGroupId = appTileSetting.AppTileGroupId;
2059
+ if (appTileGroups[i].visible) {
2060
+ val[appId] = [...val[appId], appTileGroupSettingId, appTileGroupId];
2061
+ }
2062
+ else {
2063
+ val[appId] = val[appId].filter((c) => c !== appTileGroupSettingId && c !== appTileGroupId);
2064
+ }
2065
+ }
2066
+ this._pinnedAppInAppTileGroupsSource.next({ ...val });
2067
+ callback();
2068
+ });
2069
+ }
2070
+ _nextAllApps(appGroups) {
2071
+ const newAppGroups = appGroups ?? this._appGroupsSource.getValue();
2072
+ this._appGroupsSource.next([...newAppGroups]);
2073
+ }
2074
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: AppFinderService, deps: [{ token: i1.PortalService }, { token: TilesService }], target: i0.ɵɵFactoryTarget.Injectable }); }
2075
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: AppFinderService, providedIn: 'root' }); }
2076
+ }
2077
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: AppFinderService, decorators: [{
2078
+ type: Injectable,
2079
+ args: [{
2080
+ providedIn: 'root'
2081
+ }]
2082
+ }], ctorParameters: () => [{ type: i1.PortalService }, { type: TilesService }] });
2083
+
2084
+ class FormAppFinderComponent extends BaseComponent {
2085
+ constructor(_cdr, _dialogService, _appFinderService, _el, _contentDensityService) {
2086
+ super();
2087
+ this._cdr = _cdr;
2088
+ this._dialogService = _dialogService;
2089
+ this._appFinderService = _appFinderService;
2090
+ this._el = _el;
2091
+ this.isAllSelected = true;
2092
+ this.contentDensity$ = _contentDensityService.contentDensity.asObservable();
2093
+ this.appGroups$ = this._appFinderService.appGroups$;
2094
+ this.selectedAppGroup$ = this._appFinderService.selectedAppGroup$;
2095
+ this.selectedAppGroupId$ = this._appFinderService.selectedAppGroupId$;
2096
+ this.deviceSize$ = this._appFinderService.deviceSize$;
2097
+ this.pinnedAppInAppTileGroups$ = this._appFinderService.pinnedAppInAppTileGroups$;
2098
+ this.mobile$ = this.deviceSize$.pipe(map((c) => c === 's'));
2099
+ }
2100
+ ngOnInit() {
2101
+ super.ngOnInit();
2102
+ this.contentHeight = 'calc(' + this._el.nativeElement.offsetHeight + 'px - 2.75rem)';
2103
+ this.sideContentSize$ = this.deviceSize$.pipe(takeUntil(this._onDestroy$), map((deviceSize) => {
2104
+ switch (deviceSize) {
2105
+ case 's':
2106
+ return 'sm';
2107
+ case 'm':
2108
+ return 'md';
2109
+ case 'l':
2110
+ return 'lg';
2111
+ case 'xl':
2112
+ return 'xl';
2113
+ default:
2114
+ return 'l';
2115
+ }
2116
+ }));
2117
+ }
2118
+ onSelectedAppGroupChange(appGroupId) {
2119
+ this._changeGroup(appGroupId);
2120
+ }
2121
+ onPinClick(app) {
2122
+ const pinnedAppInTileGroups = this._appFinderService.loadPinnedAppInTileGroups(app);
2123
+ const appTileGroups = this._appFinderService.appTileGroups;
2124
+ const deviceSize = this._appFinderService.deviceSize;
2125
+ const mobile = deviceSize === 's';
2126
+ this._dialogService
2127
+ .open(PinTileComponent, {
2128
+ data: { app, pinnedAppInTileGroups, appTileGroups },
2129
+ minWidth: '350px',
2130
+ minHeight: '420px',
2131
+ draggable: false,
2132
+ mobile,
2133
+ resizable: false,
2134
+ verticalPadding: false,
2135
+ backdropClickCloseable: false
2136
+ })
2137
+ .afterClosed.subscribe((result) => {
2138
+ this._appTileGroupsPinChange(result);
2139
+ });
2140
+ }
2141
+ onRefresh() { }
2142
+ async _appTileGroupsPinChange(result) {
2143
+ try {
2144
+ // Will try to ask for permission
2145
+ this._appFinderService.pinTileChanged(result.appTileGroupsPin, result.app, () => {
2146
+ this._cdr.detectChanges();
2147
+ });
2148
+ }
2149
+ catch (err) {
2150
+ // show msg error
2151
+ }
2152
+ finally {
2153
+ // show toast successful
2154
+ }
2155
+ }
2156
+ _changeGroup(appGroupId) {
2157
+ this.isAllSelected = false;
2158
+ this._appFinderService.selectAppGroup(appGroupId);
2159
+ this._cdr.detectChanges();
2160
+ }
2161
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: FormAppFinderComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1$1.DialogService }, { token: AppFinderService }, { token: i0.ElementRef }, { token: i1$1.ContentDensityService }], target: i0.ɵɵFactoryTarget.Component }); }
2162
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.5", type: FormAppFinderComponent, selector: "bt-form-app-finder", usesInheritance: true, ngImport: i0, template: "<bt-app-finder\r\n [appGroups]=\"(appGroups$ | async)!!\"\r\n [selectedAppGroupId]=\"(selectedAppGroupId$ | async)!!\"\r\n [selectedAppGroup]=\"(selectedAppGroup$ | async)!!\"\r\n [mobile]=\"(mobile$ | async)!!\"\r\n [sideContentSize]=\"(sideContentSize$ | async)!!\"\r\n [deviceSize]=\"(deviceSize$ | async)!!\"\r\n [contentDensity]=\"(contentDensity$ | async) ?? 'compact'\"\r\n [pinnedAppInAppTileGroups]=\"(pinnedAppInAppTileGroups$ | async)!!\"\r\n [contentHeight]=\"contentHeight\"\r\n (selectedAppGroupIdChange)=\"onSelectedAppGroupChange($event)\"\r\n (pinClick)=\"onPinClick($event)\"\r\n>\r\n</bt-app-finder>\r\n", styles: [":host{display:block;min-height:100vh}\n"], dependencies: [{ kind: "directive", type: i1.MobileDirective, selector: "[mobile]" }, { kind: "component", type: AppFinderComponent, selector: "bt-app-finder", inputs: ["appGroups", "deviceSize", "sideContentSize", "selectedAppGroup", "selectedAppGroupId", "mobile", "contentDensity", "contentHeight", "pinnedAppInAppTileGroups"], outputs: ["pinClick", "selectedAppGroupIdChange"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2163
+ }
2164
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: FormAppFinderComponent, decorators: [{
2165
+ type: Component,
2166
+ args: [{ selector: 'bt-form-app-finder', changeDetection: ChangeDetectionStrategy.OnPush, template: "<bt-app-finder\r\n [appGroups]=\"(appGroups$ | async)!!\"\r\n [selectedAppGroupId]=\"(selectedAppGroupId$ | async)!!\"\r\n [selectedAppGroup]=\"(selectedAppGroup$ | async)!!\"\r\n [mobile]=\"(mobile$ | async)!!\"\r\n [sideContentSize]=\"(sideContentSize$ | async)!!\"\r\n [deviceSize]=\"(deviceSize$ | async)!!\"\r\n [contentDensity]=\"(contentDensity$ | async) ?? 'compact'\"\r\n [pinnedAppInAppTileGroups]=\"(pinnedAppInAppTileGroups$ | async)!!\"\r\n [contentHeight]=\"contentHeight\"\r\n (selectedAppGroupIdChange)=\"onSelectedAppGroupChange($event)\"\r\n (pinClick)=\"onPinClick($event)\"\r\n>\r\n</bt-app-finder>\r\n", styles: [":host{display:block;min-height:100vh}\n"] }]
2167
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1$1.DialogService }, { type: AppFinderService }, { type: i0.ElementRef }, { type: i1$1.ContentDensityService }] });
2168
+
2169
+ class FooterEditTileComponent extends BaseComponent {
2170
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: FooterEditTileComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
2171
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.5", type: FooterEditTileComponent, selector: "bt-footer-edit-tile", usesInheritance: true, ngImport: i0, template: "<button fd-button [glyph]=\"'pushpin-off'\" fdType=\"\"></button>\r\n", styles: [":host{border-top:1px solid #ccc;padding-bottom:5px}\n"], dependencies: [{ kind: "component", type: i2.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2172
+ }
2173
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: FooterEditTileComponent, decorators: [{
2174
+ type: Component,
2175
+ args: [{ selector: 'bt-footer-edit-tile', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button fd-button [glyph]=\"'pushpin-off'\" fdType=\"\"></button>\r\n", styles: [":host{border-top:1px solid #ccc;padding-bottom:5px}\n"] }]
2176
+ }] });
2177
+
2178
+ class NumericTileComponent extends BaseBtTileComponent {
2179
+ constructor() {
2180
+ super(...arguments);
2181
+ this.kpiStateIsColor = false;
2182
+ this.scalseStateIsColor = false;
2183
+ }
2184
+ ngOnInit() {
2185
+ super.ngOnInit();
2186
+ switch (this.kpiState) {
2187
+ case 'positive':
2188
+ case 'negative':
2189
+ case 'informative':
2190
+ case 'critical':
2191
+ case 'neutral':
2192
+ break;
2193
+ default:
2194
+ this.kpiStateIsColor = this.kpiState !== '';
2195
+ break;
2196
+ }
2197
+ switch (this.scaleState) {
2198
+ case 'positive':
2199
+ case 'negative':
2200
+ case 'informative':
2201
+ case 'critical':
2202
+ case 'neutral':
2203
+ break;
2204
+ default:
2205
+ this.scalseStateIsColor = this.scaleState !== '';
2206
+ break;
2207
+ }
2208
+ }
2209
+ get launchIcon() {
2210
+ return this.settings.LaunchIcon;
2211
+ }
2212
+ get kpiState() {
2213
+ return this.settings.ContentKpiState;
2214
+ }
2215
+ get kpi() {
2216
+ return this.settings.ContentKpi;
2217
+ }
2218
+ get scaleState() {
2219
+ return this.settings.ScaleState;
2220
+ }
2221
+ get scaleText() {
2222
+ return this.settings.ScaleText;
2223
+ }
2224
+ get scaleArrowIcon() {
2225
+ return this.settings.ScaleArrowIcon;
2226
+ }
2227
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: NumericTileComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
2228
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.5", type: NumericTileComponent, selector: "bt-numeric-tile", usesInheritance: true, ngImport: i0, template: "<bt-tile\n [data]=\"data\"\n [type]=\"'launch'\"\n [edit]=\"edit\"\n [backColor]=\"backColor\"\n [title]=\"data | tileProp: 'Title':parameters\"\n [subtitle]=\"data | tileProp: 'Subtitle':parameters\"\n [dynamicCommand]=\"data | tileProp: 'DynamicCommand':parameters\"\n [isDouble]=\"data | tileProp: 'IsDouble':parameters\"\n [footer]=\"data | tileProp: 'Footer':parameters\"\n (hideClick)=\"hideClick.emit()\"\n (renameClick)=\"renameClick.emit()\"\n (click)=\"onTileClick()\"\n>\n <div fd-tile-content>\n <div fd-numeric-content>\n <div fd-numeric-content-launch-icon-container>\n <i fd-numeric-content-launch-icon [glyph]=\"launchIcon\" [class]=\"launchIcon | sapFontClass\"></i>\n </div>\n <div fd-numeric-content-kpi-container>\n <div fd-numeric-content-kpi [state]=\"kpiState\" [style.color]=\"kpiStateIsColor ? kpiState : null\">\n {{ kpi }}\n </div>\n </div>\n <div fd-numeric-content-scale-container style=\"padding-top: 0.2rem\">\n <div\n fd-numeric-content-scale\n [state]=\"scaleState\"\n [style.color]=\"scalseStateIsColor ? scaleState : null\"\n >\n <span\n fd-numeric-content-scale-arrow\n [glyph]=\"scaleArrowIcon\"\n [class]=\"scaleArrowIcon | sapFontClass\"\n [style.color]=\"scalseStateIsColor ? scaleState : null\"\n ></span>\n <span fd-numeric-content-scale-text [style.color]=\"scalseStateIsColor ? scaleState : null\">{{\n scaleText\n }}</span>\n </div>\n </div>\n </div>\n </div>\n</bt-tile>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.TileContentDirective, selector: "[fdTileContent], [fd-tile-content]", inputs: ["twoColumn"] }, { kind: "directive", type: i1$3.NumericContentDirective, selector: "[fd-numeric-content]", inputs: ["class", "size"] }, { kind: "directive", type: i1$3.NumericContentKpiContainerDirective, selector: "[fd-numeric-content-kpi-container]" }, { kind: "directive", type: i1$3.NumericContentKpiDirective, selector: "[fd-numeric-content-kpi]", inputs: ["state", "class", "glyph"] }, { kind: "directive", type: i1$3.NumericContentLaunchIconContainerDirective, selector: "[fd-numeric-content-launch-icon-container]" }, { kind: "directive", type: i1$3.NumericContentLaunchIconDirective, selector: "[fd-numeric-content-launch-icon]", inputs: ["class", "glyph", "glyphFont"] }, { kind: "directive", type: i1$3.NumericContentScaleArrowDirective, selector: "[fd-numeric-content-scale-arrow]", inputs: ["class", "glyph", "glyphFont"] }, { kind: "directive", type: i1$3.NumericContentScaleContainerDirective, selector: "[fd-numeric-content-scale-container]" }, { kind: "directive", type: i1$3.NumericContentScaleDirective, selector: "[fd-numeric-content-scale]", inputs: ["state", "class"] }, { kind: "directive", type: i1$3.NumericContentScaleTextDirective, selector: "[fd-numeric-content-scale-text]" }, { kind: "component", type: TileComponent, selector: "bt-tile", inputs: ["type", "footerTemplate", "footer", "disableClick", "title", "icon", "subtitle", "isDouble", "edit", "backColor", "dynamicCommand"] }, { kind: "pipe", type: i4.SapFontClassPipe, name: "sapFontClass" }, { kind: "pipe", type: TilePropPipe, name: "tileProp" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2229
+ }
2230
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: NumericTileComponent, decorators: [{
2231
+ type: Component,
2232
+ args: [{ selector: 'bt-numeric-tile', changeDetection: ChangeDetectionStrategy.OnPush, template: "<bt-tile\n [data]=\"data\"\n [type]=\"'launch'\"\n [edit]=\"edit\"\n [backColor]=\"backColor\"\n [title]=\"data | tileProp: 'Title':parameters\"\n [subtitle]=\"data | tileProp: 'Subtitle':parameters\"\n [dynamicCommand]=\"data | tileProp: 'DynamicCommand':parameters\"\n [isDouble]=\"data | tileProp: 'IsDouble':parameters\"\n [footer]=\"data | tileProp: 'Footer':parameters\"\n (hideClick)=\"hideClick.emit()\"\n (renameClick)=\"renameClick.emit()\"\n (click)=\"onTileClick()\"\n>\n <div fd-tile-content>\n <div fd-numeric-content>\n <div fd-numeric-content-launch-icon-container>\n <i fd-numeric-content-launch-icon [glyph]=\"launchIcon\" [class]=\"launchIcon | sapFontClass\"></i>\n </div>\n <div fd-numeric-content-kpi-container>\n <div fd-numeric-content-kpi [state]=\"kpiState\" [style.color]=\"kpiStateIsColor ? kpiState : null\">\n {{ kpi }}\n </div>\n </div>\n <div fd-numeric-content-scale-container style=\"padding-top: 0.2rem\">\n <div\n fd-numeric-content-scale\n [state]=\"scaleState\"\n [style.color]=\"scalseStateIsColor ? scaleState : null\"\n >\n <span\n fd-numeric-content-scale-arrow\n [glyph]=\"scaleArrowIcon\"\n [class]=\"scaleArrowIcon | sapFontClass\"\n [style.color]=\"scalseStateIsColor ? scaleState : null\"\n ></span>\n <span fd-numeric-content-scale-text [style.color]=\"scalseStateIsColor ? scaleState : null\">{{\n scaleText\n }}</span>\n </div>\n </div>\n </div>\n </div>\n</bt-tile>\n" }]
2233
+ }] });
2234
+
2235
+ class LogoTileComponent extends BaseBtTileComponent {
2236
+ get fileId() {
2237
+ let fileId = this.settings.Logo?.FileId;
2238
+ if (!fileId) {
2239
+ fileId = this.settings.CalcLogo?.FileId;
2240
+ }
2241
+ return fileId;
2242
+ }
2243
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: LogoTileComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
2244
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.5", type: LogoTileComponent, selector: "bt-logo-tile", usesInheritance: true, ngImport: i0, template: "<bt-tile\n [data]=\"data\"\n [type]=\"'launch'\"\n [edit]=\"edit\"\n [backColor]=\"backColor\"\n [title]=\"data | tileProp: 'Title':parameters\"\n [subtitle]=\"data | tileProp: 'Subtitle':parameters\"\n [dynamicCommand]=\"data | tileProp: 'DynamicCommand':parameters\"\n [isDouble]=\"data | tileProp: 'IsDouble':parameters\"\n [footer]=\"data | tileProp: 'Footer':parameters\"\n (hideClick)=\"hideClick.emit()\"\n (renameClick)=\"renameClick.emit()\"\n>\n <div fd-tile-content>\n <img fd-tile-logo [src]=\"fileId | picFieldSrc: 'GetPictureFromFileInfo':null\" />\n </div>\n</bt-tile>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.TileContentDirective, selector: "[fdTileContent], [fd-tile-content]", inputs: ["twoColumn"] }, { kind: "directive", type: i1$3.TileLogoDirective, selector: "[fdTileLogo], [fd-tile-logo]" }, { kind: "component", type: TileComponent, selector: "bt-tile", inputs: ["type", "footerTemplate", "footer", "disableClick", "title", "icon", "subtitle", "isDouble", "edit", "backColor", "dynamicCommand"] }, { kind: "pipe", type: i1.PictureFieldSourcePipe, name: "picFieldSrc" }, { kind: "pipe", type: TilePropPipe, name: "tileProp" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2245
+ }
2246
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: LogoTileComponent, decorators: [{
2247
+ type: Component,
2248
+ args: [{ selector: 'bt-logo-tile', changeDetection: ChangeDetectionStrategy.OnPush, template: "<bt-tile\n [data]=\"data\"\n [type]=\"'launch'\"\n [edit]=\"edit\"\n [backColor]=\"backColor\"\n [title]=\"data | tileProp: 'Title':parameters\"\n [subtitle]=\"data | tileProp: 'Subtitle':parameters\"\n [dynamicCommand]=\"data | tileProp: 'DynamicCommand':parameters\"\n [isDouble]=\"data | tileProp: 'IsDouble':parameters\"\n [footer]=\"data | tileProp: 'Footer':parameters\"\n (hideClick)=\"hideClick.emit()\"\n (renameClick)=\"renameClick.emit()\"\n>\n <div fd-tile-content>\n <img fd-tile-logo [src]=\"fileId | picFieldSrc: 'GetPictureFromFileInfo':null\" />\n </div>\n</bt-tile>\n" }]
2249
+ }] });
2250
+
2251
+ class FeedTileComponent extends BaseBtTileComponent {
2252
+ get twoColumn() {
2253
+ return this.settings.TwoColumn;
2254
+ }
2255
+ get text() {
2256
+ return this.settings.ContentText;
2257
+ }
2258
+ get byline() {
2259
+ return this.settings.ContentByLine;
2260
+ }
2261
+ get kpi() {
2262
+ return this.settings.ContentKpi;
2263
+ }
2264
+ get state() {
2265
+ return this.settings.State;
2266
+ }
2267
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: FeedTileComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
2268
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: FeedTileComponent, selector: "bt-feed-tile", usesInheritance: true, ngImport: i0, template: "<bt-tile\n [data]=\"data\"\n [type]=\"'feed'\"\n [edit]=\"edit\"\n [backColor]=\"backColor\"\n [title]=\"data | tileProp: 'Title':parameters\"\n [subtitle]=\"data | tileProp: 'Subtitle':parameters\"\n [dynamicCommand]=\"data | tileProp: 'DynamicCommand':parameters\"\n [isDouble]=\"data | tileProp: 'IsDouble':parameters\"\n [footer]=\"data | tileProp: 'Footer':parameters\"\n (hideClick)=\"hideClick.emit()\"\n (renameClick)=\"renameClick.emit()\"\n (click)=\"onTileClick()\"\n>\n <div fd-tile-content [twoColumn]=\"twoColumn\">\n @if (twoColumn) {\n <div fd-tile-section>\n <div fd-tile-content-text>{{ text | bbbTranslate }}</div>\n <div fd-tile-content-byline>{{ byline }}</div>\n </div>\n <div fd-tile-section>\n <div fd-numeric-content>\n <div fd-numeric-content-kpi-container>\n <div fd-numeric-content-kpi [state]=\"state\">{{ kpi }}</div>\n </div>\n </div>\n </div>\n } @else {\n <div fd-numeric-content>\n <div fd-numeric-content-kpi-container>\n <div fd-numeric-content-kpi [state]=\"state\">{{ kpi }}</div>\n </div>\n </div>\n }\n </div>\n</bt-tile>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.TileContentDirective, selector: "[fdTileContent], [fd-tile-content]", inputs: ["twoColumn"] }, { kind: "directive", type: i1$3.TileSectionDirective, selector: "[fdTileSection], [fd-tile-section]" }, { kind: "directive", type: i1$3.TileContentBylineDirective, selector: "[fdTileContentByline], [fd-tile-content-byline]" }, { kind: "directive", type: i1$3.TileContentTextDirective, selector: "[fdTileContentText], [fd-tile-content-text]" }, { kind: "directive", type: i1$3.NumericContentDirective, selector: "[fd-numeric-content]", inputs: ["class", "size"] }, { kind: "directive", type: i1$3.NumericContentKpiContainerDirective, selector: "[fd-numeric-content-kpi-container]" }, { kind: "directive", type: i1$3.NumericContentKpiDirective, selector: "[fd-numeric-content-kpi]", inputs: ["state", "class", "glyph"] }, { kind: "component", type: TileComponent, selector: "bt-tile", inputs: ["type", "footerTemplate", "footer", "disableClick", "title", "icon", "subtitle", "isDouble", "edit", "backColor", "dynamicCommand"] }, { kind: "pipe", type: i1.BbbTranslatePipe, name: "bbbTranslate" }, { kind: "pipe", type: TilePropPipe, name: "tileProp" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2269
+ }
2270
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: FeedTileComponent, decorators: [{
2271
+ type: Component,
2272
+ args: [{ selector: 'bt-feed-tile', changeDetection: ChangeDetectionStrategy.OnPush, template: "<bt-tile\n [data]=\"data\"\n [type]=\"'feed'\"\n [edit]=\"edit\"\n [backColor]=\"backColor\"\n [title]=\"data | tileProp: 'Title':parameters\"\n [subtitle]=\"data | tileProp: 'Subtitle':parameters\"\n [dynamicCommand]=\"data | tileProp: 'DynamicCommand':parameters\"\n [isDouble]=\"data | tileProp: 'IsDouble':parameters\"\n [footer]=\"data | tileProp: 'Footer':parameters\"\n (hideClick)=\"hideClick.emit()\"\n (renameClick)=\"renameClick.emit()\"\n (click)=\"onTileClick()\"\n>\n <div fd-tile-content [twoColumn]=\"twoColumn\">\n @if (twoColumn) {\n <div fd-tile-section>\n <div fd-tile-content-text>{{ text | bbbTranslate }}</div>\n <div fd-tile-content-byline>{{ byline }}</div>\n </div>\n <div fd-tile-section>\n <div fd-numeric-content>\n <div fd-numeric-content-kpi-container>\n <div fd-numeric-content-kpi [state]=\"state\">{{ kpi }}</div>\n </div>\n </div>\n </div>\n } @else {\n <div fd-numeric-content>\n <div fd-numeric-content-kpi-container>\n <div fd-numeric-content-kpi [state]=\"state\">{{ kpi }}</div>\n </div>\n </div>\n }\n </div>\n</bt-tile>\n" }]
2273
+ }] });
2274
+
2275
+ class SimpleTileComponent extends BaseBtTileComponent {
2276
+ ngOnInit() {
2277
+ super.ngOnInit();
2278
+ this.icon = this.settings.Icon;
2279
+ this.iconColor = this.settings.IconColor;
2280
+ }
2281
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: SimpleTileComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
2282
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: SimpleTileComponent, selector: "bt-simple-tile", usesInheritance: true, ngImport: i0, template: "<bt-tile\n [data]=\"data\"\n [type]=\"'launch'\"\n [edit]=\"edit\"\n [title]=\"data | tileProp: 'Title':parameters\"\n [backColor]=\"backColor\"\n [subtitle]=\"data | tileProp: 'Subtitle':parameters\"\n [dynamicCommand]=\"data | tileProp: 'DynamicCommand':parameters\"\n [isDouble]=\"data | tileProp: 'IsDouble':parameters\"\n [footer]=\"data | tileProp: 'Footer':parameters\"\n (hideClick)=\"hideClick.emit()\"\n (renameClick)=\"renameClick.emit()\"\n (click)=\"onTileClick()\"\n>\n <div fd-tile-content>\n @if (icon) {\n <fd-icon [glyph]=\"icon\" [font]=\"icon | sapFont\" [style.color]=\"iconColor\"></fd-icon>\n }\n </div>\n</bt-tile>\n", styles: ["::ng-deep .fd-tile--launch .fd-tile__content{align-items:normal!important}fd-icon{font-size:3rem}\n"], dependencies: [{ kind: "component", type: i1$2.IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "color", "background", "class", "ariaLabel", "ariaHidden"] }, { kind: "directive", type: i1$3.TileContentDirective, selector: "[fdTileContent], [fd-tile-content]", inputs: ["twoColumn"] }, { kind: "component", type: TileComponent, selector: "bt-tile", inputs: ["type", "footerTemplate", "footer", "disableClick", "title", "icon", "subtitle", "isDouble", "edit", "backColor", "dynamicCommand"] }, { kind: "pipe", type: i4.SapFontPipe, name: "sapFont" }, { kind: "pipe", type: TilePropPipe, name: "tileProp" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2283
+ }
2284
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: SimpleTileComponent, decorators: [{
2285
+ type: Component,
2286
+ args: [{ selector: 'bt-simple-tile', changeDetection: ChangeDetectionStrategy.OnPush, template: "<bt-tile\n [data]=\"data\"\n [type]=\"'launch'\"\n [edit]=\"edit\"\n [title]=\"data | tileProp: 'Title':parameters\"\n [backColor]=\"backColor\"\n [subtitle]=\"data | tileProp: 'Subtitle':parameters\"\n [dynamicCommand]=\"data | tileProp: 'DynamicCommand':parameters\"\n [isDouble]=\"data | tileProp: 'IsDouble':parameters\"\n [footer]=\"data | tileProp: 'Footer':parameters\"\n (hideClick)=\"hideClick.emit()\"\n (renameClick)=\"renameClick.emit()\"\n (click)=\"onTileClick()\"\n>\n <div fd-tile-content>\n @if (icon) {\n <fd-icon [glyph]=\"icon\" [font]=\"icon | sapFont\" [style.color]=\"iconColor\"></fd-icon>\n }\n </div>\n</bt-tile>\n", styles: ["::ng-deep .fd-tile--launch .fd-tile__content{align-items:normal!important}fd-icon{font-size:3rem}\n"] }]
2287
+ }] });
2288
+
2289
+ class ProfileTileComponent extends BaseBtTileComponent {
2290
+ get fileId() {
2291
+ let fileId = this.settings.Image?.FileId;
2292
+ if (!fileId) {
2293
+ fileId = this.settings.CalcImage;
2294
+ }
2295
+ return fileId;
2296
+ }
2297
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: ProfileTileComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
2298
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: ProfileTileComponent, selector: "bt-profile-tile", usesInheritance: true, ngImport: i0, template: "<bt-tile\n [data]=\"data\"\n [type]=\"'launch'\"\n [edit]=\"edit\"\n [backColor]=\"backColor\"\n [title]=\"data | tileProp: 'Title':parameters\"\n [subtitle]=\"data | tileProp: 'Subtitle':parameters\"\n [dynamicCommand]=\"data | tileProp: 'DynamicCommand':parameters\"\n [isDouble]=\"data | tileProp: 'IsDouble':parameters\"\n [footer]=\"data | tileProp: 'Footer':parameters\"\n (hideClick)=\"hideClick.emit()\"\n (renameClick)=\"renameClick.emit()\"\n (click)=\"onTileClick()\"\n>\n <div fd-tile-content>\n @if (fileId) {\n <span\n class=\"profile\"\n fd-tile-profile-img\n [backgroundImage]=\"fileId | picFieldSrc: 'GetPictureFromFileInfo':null\"\n ></span>\n } @else { @if (settings.Icon) {\n <fd-icon\n [font]=\"settings.Icon | sapFont\"\n fd-tile-profile-img\n style=\"font-size: 2rem\"\n [glyph]=\"settings.Icon\"\n ></fd-icon>\n } @else {\n <fd-icon font=\"SAP-icons-TNT\" fd-tile-profile-img style=\"font-size: 2rem\" glyph=\"user\"></fd-icon>\n } }\n </div>\n</bt-tile>\n", styles: [".profile{background-size:contain;background-repeat:no-repeat}\n"], dependencies: [{ kind: "component", type: i1$2.IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "color", "background", "class", "ariaLabel", "ariaHidden"] }, { kind: "directive", type: i1$3.TileContentDirective, selector: "[fdTileContent], [fd-tile-content]", inputs: ["twoColumn"] }, { kind: "directive", type: i1$3.TileProfileImgDirective, selector: "[fdTileProfileImg], [fd-tile-profile-img]", inputs: ["id", "ariaLabel", "ariaLabelledby", "backgroundImage"] }, { kind: "component", type: TileComponent, selector: "bt-tile", inputs: ["type", "footerTemplate", "footer", "disableClick", "title", "icon", "subtitle", "isDouble", "edit", "backColor", "dynamicCommand"] }, { kind: "pipe", type: i1.PictureFieldSourcePipe, name: "picFieldSrc" }, { kind: "pipe", type: i4.SapFontPipe, name: "sapFont" }, { kind: "pipe", type: TilePropPipe, name: "tileProp" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2299
+ }
2300
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: ProfileTileComponent, decorators: [{
2301
+ type: Component,
2302
+ args: [{ selector: 'bt-profile-tile', changeDetection: ChangeDetectionStrategy.OnPush, template: "<bt-tile\n [data]=\"data\"\n [type]=\"'launch'\"\n [edit]=\"edit\"\n [backColor]=\"backColor\"\n [title]=\"data | tileProp: 'Title':parameters\"\n [subtitle]=\"data | tileProp: 'Subtitle':parameters\"\n [dynamicCommand]=\"data | tileProp: 'DynamicCommand':parameters\"\n [isDouble]=\"data | tileProp: 'IsDouble':parameters\"\n [footer]=\"data | tileProp: 'Footer':parameters\"\n (hideClick)=\"hideClick.emit()\"\n (renameClick)=\"renameClick.emit()\"\n (click)=\"onTileClick()\"\n>\n <div fd-tile-content>\n @if (fileId) {\n <span\n class=\"profile\"\n fd-tile-profile-img\n [backgroundImage]=\"fileId | picFieldSrc: 'GetPictureFromFileInfo':null\"\n ></span>\n } @else { @if (settings.Icon) {\n <fd-icon\n [font]=\"settings.Icon | sapFont\"\n fd-tile-profile-img\n style=\"font-size: 2rem\"\n [glyph]=\"settings.Icon\"\n ></fd-icon>\n } @else {\n <fd-icon font=\"SAP-icons-TNT\" fd-tile-profile-img style=\"font-size: 2rem\" glyph=\"user\"></fd-icon>\n } }\n </div>\n</bt-tile>\n", styles: [".profile{background-size:contain;background-repeat:no-repeat}\n"] }]
2303
+ }] });
2304
+
2305
+ class FilterAppsGroupedPipe {
2306
+ transform(value, term) {
2307
+ return value?.filter((cat) => !!cat.Apps.filter((app) => app.$Caption.includes(term ?? ''))?.length);
2308
+ }
2309
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: FilterAppsGroupedPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
2310
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.5", ngImport: i0, type: FilterAppsGroupedPipe, isStandalone: true, name: "filterAppsGrouped", pure: false }); }
2311
+ }
2312
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: FilterAppsGroupedPipe, decorators: [{
2313
+ type: Pipe,
2314
+ args: [{
2315
+ name: 'filterAppsGrouped',
2316
+ standalone: true,
2317
+ pure: false
2318
+ }]
2319
+ }] });
2320
+ class FilterAppsPipe {
2321
+ transform(value, term) {
2322
+ if (!Array.isArray(value) || !term) {
2323
+ return value;
2324
+ }
2325
+ return value?.filter((app) => app.$Caption.includes(term));
2326
+ }
2327
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: FilterAppsPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
2328
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.5", ngImport: i0, type: FilterAppsPipe, isStandalone: true, name: "filterApps", pure: false }); }
2329
+ }
2330
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: FilterAppsPipe, decorators: [{
2331
+ type: Pipe,
2332
+ args: [{
2333
+ name: 'filterApps',
2334
+ standalone: true,
2335
+ pure: false
2336
+ }]
2337
+ }] });
2338
+
2339
+ class PopoverAppFinderComponent extends BaseComponent {
2340
+ constructor(_cdr, _dialogService, _appFinderService, _el, _contentDensityService) {
2341
+ super();
2342
+ this._cdr = _cdr;
2343
+ this._dialogService = _dialogService;
2344
+ this._appFinderService = _appFinderService;
2345
+ this._el = _el;
2346
+ this.closeMenu = new EventEmitter();
2347
+ this.isAllSelected = true;
2348
+ this.contentDensity$ = _contentDensityService.contentDensity.asObservable();
2349
+ this.appGroups$ = this._appFinderService.appGroups$.pipe(map((appGroups) => {
2350
+ appGroups.forEach((cat) => {
2351
+ this._appFinderService.loadAppsByAppGroup(appGroups, cat);
2352
+ });
2353
+ return appGroups;
2354
+ }));
2355
+ this.selectedAppGroup$ = this._appFinderService.selectedAppGroup$;
2356
+ this.selectedAppGroupId$ = this._appFinderService.selectedAppGroupId$;
2357
+ this.deviceSize$ = this._appFinderService.deviceSize$;
2358
+ this.pinnedAppInAppTileGroups$ = this._appFinderService.pinnedAppInAppTileGroups$;
2359
+ this.mobile$ = this.deviceSize$.pipe(map((c) => c === 's'));
2360
+ }
2361
+ ngOnInit() {
2362
+ super.ngOnInit();
2363
+ this.contentHeight = 'calc(' + this._el.nativeElement.offsetHeight + 'px - 2.75rem)';
2364
+ this.sideContentSize$ = this.deviceSize$.pipe(takeUntil(this._onDestroy$), map((deviceSize) => {
2365
+ switch (deviceSize) {
2366
+ case 's':
2367
+ return 'sm';
2368
+ case 'm':
2369
+ return 'md';
2370
+ case 'l':
2371
+ return 'lg';
2372
+ case 'xl':
2373
+ return 'xl';
2374
+ default:
2375
+ return 'l';
2376
+ }
2377
+ }));
2378
+ }
2379
+ onSelectedAppGroupChange(appGroupId) {
2380
+ this._changeGroup(appGroupId);
2381
+ }
2382
+ onPinClick(app) {
2383
+ const pinnedAppInTileGroups = this._appFinderService.loadPinnedAppInTileGroups(app);
2384
+ const appTileGroups = this._appFinderService.appTileGroups;
2385
+ const deviceSize = this._appFinderService.deviceSize;
2386
+ const mobile = deviceSize === 's';
2387
+ this._dialogService
2388
+ .open(PinTileComponent, {
2389
+ data: { app, pinnedAppInTileGroups, appTileGroups },
2390
+ minWidth: '350px',
2391
+ minHeight: '420px',
2392
+ draggable: false,
2393
+ mobile,
2394
+ resizable: false,
2395
+ verticalPadding: false,
2396
+ backdropClickCloseable: false
2397
+ })
2398
+ .afterClosed.subscribe((result) => {
2399
+ this._appTileGroupsPinChange(result);
2400
+ });
2401
+ }
2402
+ onRefresh() { }
2403
+ async _appTileGroupsPinChange(result) {
2404
+ try {
2405
+ // Will try to ask for permission
2406
+ this._appFinderService.pinTileChanged(result.appTileGroupsPin, result.app, () => {
2407
+ this._cdr.detectChanges();
2408
+ });
2409
+ }
2410
+ catch (err) {
2411
+ // show msg error
2412
+ }
2413
+ finally {
2414
+ // show toast successful
2415
+ }
2416
+ }
2417
+ _changeGroup(appGroupId) {
2418
+ this.isAllSelected = false;
2419
+ this._appFinderService.selectAppGroup(appGroupId);
2420
+ this._cdr.detectChanges();
2421
+ }
2422
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: PopoverAppFinderComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1$1.DialogService }, { token: AppFinderService }, { token: i0.ElementRef }, { token: i1$1.ContentDensityService }], target: i0.ɵɵFactoryTarget.Component }); }
2423
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: PopoverAppFinderComponent, selector: "bt-popover-app-finder", outputs: { closeMenu: "closeMenu" }, host: { classAttribute: "!tw-min-h-min" }, usesInheritance: true, ngImport: i0, template: "<!--@for (cat of appGroups$ | async; track cat.Id) {-->\n<!-- <div class=\"px-4 py-2 font-lg\">-->\n<!-- <p class=\"font-bold\">{{ cat.$Caption }}</p>-->\n<!-- </div>-->\n<!-- <div class=\"grid grid-cols-4 gap-2 p-2\">-->\n<!-- @for (app of cat.Apps; track app.Id) {-->\n<!-- <div class=\"flex flex-col items-center w-24 gap-1 border border-transparent hover:border-gray-300 bg-transparent hover:bg-gray-100 transition-all rounded-lg p-2 cursor-pointer\">-->\n<!-- <div class=\"size-12 rounded-full bg-gray-300\"></div>-->\n<!-- <span class=\"truncate w-20 text-center\">-->\n<!-- {{ app.$Caption }}</span>-->\n<!-- </div>-->\n<!-- }-->\n<!-- </div>-->\n<!--}-->\n<div>\n <div class=\"!tw-px-4 !tw-pt-2\" fd-form-item>\n <fd-input-group\n glyph=\"decline\"\n glyphAriaLabel=\"Clear\"\n placeholder=\"\u062C\u0633\u062A\u062C\u0648\"\n [button]=\"true\"\n [disabled]=\"false\"\n [(ngModel)]=\"searchTerm\"\n (addOnButtonClicked)=\"searchTerm = ''\"\n >\n </fd-input-group>\n </div>\n @for (cat of appGroups$ | async | filterAppsGrouped:searchTerm; track cat.Id) {\n <fd-panel\n fdCompact\n expandAriaLabel=\"Panel Expand\"\n expandAriaLabelledBy=\"panel-compact-1\"\n [expanded]=\"!!searchTerm?.length\"\n >\n <h5 fd-panel-title id=\"panel-compact-1\">{{ cat.Title }}</h5>\n <div fd-panel-content ariaLabel=\"Panel Content\" id=\"panel-content-3\" class=\"!p-0\">\n <ul fd-list [noBorder]=\"false\">\n @for (app of cat.Apps | filterApps:searchTerm; track app.Id) {\n <li fd-list-item>\n <a fd-list-link [navigated]=\"true\" [dynCommand]=\"app.DynamicCommand\" (click)=\"closeMenu.emit()\">\n <i fd-list-icon glyph=\"history\"></i>\n <span fd-list-title>{{ app.Title }}</span>\n <span fd-list-secondary>\n @if(pinnedAppInAppTileGroups$ | async; as pinnedAppInAppTileGroups) {\n <button\n ariaLabel=\"Bookmark\"\n fdType=\"transparent\"\n title=\"Bookmark\"\n fd-button\n [glyph]=\"'pushpin-off'\"\n [fdType]=\"\n pinnedAppInAppTileGroups[app.Id]\n ? pinnedAppInAppTileGroups[app.Id].length\n ? 'emphasized'\n : 'transparent'\n : app.$HasPinned\n ? 'emphasized'\n : 'transparent'\n \"\n (click)=\"$event.stopPropagation(); onPinClick(app)\"\n ></button>\n }\n </span>\n </a>\n </li>\n }\n </ul>\n </div>\n </fd-panel>\n }\n</div>\n", styles: [":host{display:block;min-height:100vh}\n"], dependencies: [{ kind: "directive", type: i1$5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4$3.ContentDensityDirective, selector: "[fdContentDensity]:not([fdCompact]):not([fdCondensed]):not([fdCozy]), [fdCompact]:not([fdContentDensity]):not([fdCondensed]):not([fdCozy]), [fdCondensed]:not([fdContentDensity]):not([fdCompact]):not([fdCozy]), [fdCozy]:not([fdContentDensity]):not([fdCompact]):not([fdCondensed])", inputs: ["fdContentDensity", "fdCompact", "fdCondensed", "fdCozy"], exportAs: ["fdContentDensity"] }, { kind: "component", type: i2.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i5.FormItemComponent, selector: "[fd-form-item]", inputs: ["isInline", "horizontal"] }, { kind: "component", type: i6$1.InputGroupComponent, selector: "fd-input-group", inputs: ["placement", "required", "inline", "addOnText", "buttonFocusable", "type", "glyph", "glyphFont", "button", "isControl", "showFocus", "isExpanded", "glyphAriaLabel", "addonButtonAriaHidden", "iconTitle", "ariaLabelledBy"], outputs: ["addOnButtonClicked", "search"] }, { kind: "component", type: i8$1.ListComponent, selector: "[fd-list], [fdList]", inputs: ["dropdownMode", "multiInputMode", "mobileMode", "hasMessage", "noBorder", "navigationIndicator", "selection", "keyboardSupport", "byline", "unreadIndicator", "role"], outputs: ["focusEscapeList"] }, { kind: "component", type: i8$1.ListItemComponent, selector: "[fdListItem] ,[fd-list-item]", inputs: ["selected", "noData", "action", "interactive", "growing", "counter", "unread", "byline", "ariaRole", "id"], outputs: ["keyDown"] }, { kind: "directive", type: i8$1.ListTitleDirective, selector: "[fd-list-title], [fdListTitle]", inputs: ["wrap"] }, { kind: "directive", type: i8$1.ListSecondaryDirective, selector: "[fd-list-secondary], [fdListSecondary]", inputs: ["type"] }, { kind: "directive", type: i8$1.ListIconDirective, selector: "[fdListIcon], [fd-list-icon]", inputs: ["glyph", "glyphFont", "class", "role"] }, { kind: "directive", type: i8$1.ListLinkDirective, selector: "[fd-list-link], [fdListLink]", inputs: ["navigationIndicator", "navigated", "focusable"] }, { kind: "component", type: i9.PanelComponent, selector: "fd-panel", inputs: ["class", "fixed", "id", "expandId", "expandAriaLabel", "expandAriaLabelledBy", "expanded"], outputs: ["expandedChange"] }, { kind: "directive", type: i9.PanelContentDirective, selector: "[fd-panel-content]", inputs: ["height", "minHeight", "maxHeight", "ariaLabel", "ariaLabelledBy", "role", "id"] }, { kind: "directive", type: i9.PanelTitleDirective, selector: "[fd-panel-title]", inputs: ["id"] }, { kind: "directive", type: i1.DynamicCommandDirective, selector: "[dynCommand]", inputs: ["dynCommand", "mo", "enableCommand"], outputs: ["commandClick"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: FilterAppsGroupedPipe, name: "filterAppsGrouped" }, { kind: "pipe", type: FilterAppsPipe, name: "filterApps" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2424
+ }
2425
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: PopoverAppFinderComponent, decorators: [{
2426
+ type: Component,
2427
+ args: [{ selector: 'bt-popover-app-finder', changeDetection: ChangeDetectionStrategy.OnPush, host: {
2428
+ class: '!tw-min-h-min'
2429
+ }, template: "<!--@for (cat of appGroups$ | async; track cat.Id) {-->\n<!-- <div class=\"px-4 py-2 font-lg\">-->\n<!-- <p class=\"font-bold\">{{ cat.$Caption }}</p>-->\n<!-- </div>-->\n<!-- <div class=\"grid grid-cols-4 gap-2 p-2\">-->\n<!-- @for (app of cat.Apps; track app.Id) {-->\n<!-- <div class=\"flex flex-col items-center w-24 gap-1 border border-transparent hover:border-gray-300 bg-transparent hover:bg-gray-100 transition-all rounded-lg p-2 cursor-pointer\">-->\n<!-- <div class=\"size-12 rounded-full bg-gray-300\"></div>-->\n<!-- <span class=\"truncate w-20 text-center\">-->\n<!-- {{ app.$Caption }}</span>-->\n<!-- </div>-->\n<!-- }-->\n<!-- </div>-->\n<!--}-->\n<div>\n <div class=\"!tw-px-4 !tw-pt-2\" fd-form-item>\n <fd-input-group\n glyph=\"decline\"\n glyphAriaLabel=\"Clear\"\n placeholder=\"\u062C\u0633\u062A\u062C\u0648\"\n [button]=\"true\"\n [disabled]=\"false\"\n [(ngModel)]=\"searchTerm\"\n (addOnButtonClicked)=\"searchTerm = ''\"\n >\n </fd-input-group>\n </div>\n @for (cat of appGroups$ | async | filterAppsGrouped:searchTerm; track cat.Id) {\n <fd-panel\n fdCompact\n expandAriaLabel=\"Panel Expand\"\n expandAriaLabelledBy=\"panel-compact-1\"\n [expanded]=\"!!searchTerm?.length\"\n >\n <h5 fd-panel-title id=\"panel-compact-1\">{{ cat.Title }}</h5>\n <div fd-panel-content ariaLabel=\"Panel Content\" id=\"panel-content-3\" class=\"!p-0\">\n <ul fd-list [noBorder]=\"false\">\n @for (app of cat.Apps | filterApps:searchTerm; track app.Id) {\n <li fd-list-item>\n <a fd-list-link [navigated]=\"true\" [dynCommand]=\"app.DynamicCommand\" (click)=\"closeMenu.emit()\">\n <i fd-list-icon glyph=\"history\"></i>\n <span fd-list-title>{{ app.Title }}</span>\n <span fd-list-secondary>\n @if(pinnedAppInAppTileGroups$ | async; as pinnedAppInAppTileGroups) {\n <button\n ariaLabel=\"Bookmark\"\n fdType=\"transparent\"\n title=\"Bookmark\"\n fd-button\n [glyph]=\"'pushpin-off'\"\n [fdType]=\"\n pinnedAppInAppTileGroups[app.Id]\n ? pinnedAppInAppTileGroups[app.Id].length\n ? 'emphasized'\n : 'transparent'\n : app.$HasPinned\n ? 'emphasized'\n : 'transparent'\n \"\n (click)=\"$event.stopPropagation(); onPinClick(app)\"\n ></button>\n }\n </span>\n </a>\n </li>\n }\n </ul>\n </div>\n </fd-panel>\n }\n</div>\n", styles: [":host{display:block;min-height:100vh}\n"] }]
2430
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1$1.DialogService }, { type: AppFinderService }, { type: i0.ElementRef }, { type: i1$1.ContentDensityService }], propDecorators: { closeMenu: [{
2431
+ type: Output
2432
+ }] } });
2433
+
2434
+ class NotificationGroupHeaderComponent extends BaseComponent {
2435
+ constructor(_cdr) {
2436
+ super();
2437
+ this._cdr = _cdr;
2438
+ this.unreadCount = 0;
2439
+ }
2440
+ ngOnInit() {
2441
+ super.ngOnInit();
2442
+ this.setUnreadCount(this.notifications);
2443
+ }
2444
+ ngOnChanges(changes) {
2445
+ super.ngOnChanges(changes);
2446
+ const { notifications } = changes;
2447
+ if (notifications && !notifications.firstChange) {
2448
+ this.setUnreadCount(notifications.currentValue);
2449
+ this._cdr.detectChanges();
2450
+ }
2451
+ }
2452
+ setUnreadCount(notifications) {
2453
+ this.unreadCount = notifications.filter((c) => c.Unread).length;
2454
+ }
2455
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: NotificationGroupHeaderComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
2456
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: NotificationGroupHeaderComponent, selector: "bt-notification-group-header", inputs: { notifications: "notifications", title: "title" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<h2 fd-notification-title [unread]=\"false\">\r\n {{ title | bbbTranslate }} ({{ notifications.length }}) @if (unreadCount !== 0) {\r\n <strong>{{ 'New' | bbbTranslate }} ({{ unreadCount }})</strong>\r\n }\r\n</h2>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i4$4.NotificationTitleDirective, selector: "[fdNotificationTitle], [fd-notification-title]", inputs: ["unread"] }, { kind: "pipe", type: i1.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2457
+ }
2458
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: NotificationGroupHeaderComponent, decorators: [{
2459
+ type: Component,
2460
+ args: [{ selector: 'bt-notification-group-header', changeDetection: ChangeDetectionStrategy.OnPush, template: "<h2 fd-notification-title [unread]=\"false\">\r\n {{ title | bbbTranslate }} ({{ notifications.length }}) @if (unreadCount !== 0) {\r\n <strong>{{ 'New' | bbbTranslate }} ({{ unreadCount }})</strong>\r\n }\r\n</h2>\r\n" }]
2461
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { notifications: [{
2462
+ type: Input
2463
+ }], title: [{
2464
+ type: Input
2465
+ }] } });
2466
+
2467
+ class NotificationGroupComponent extends BaseComponent {
2468
+ constructor(_groupByPipe, _cdr) {
2469
+ super();
2470
+ this._groupByPipe = _groupByPipe;
2471
+ this._cdr = _cdr;
2472
+ this._deviceSize = '';
2473
+ this.viewed = new EventEmitter();
2474
+ this.remove = new EventEmitter();
2475
+ this.actionClick = new EventEmitter();
2476
+ this.showEvent = new EventEmitter();
2477
+ this.loadMore = new EventEmitter();
2478
+ this.expanded = {};
2479
+ this.tabList = [
2480
+ { title: 'By Date', groupByItems: [] },
2481
+ { title: 'By Type', groupByItems: [] },
2482
+ { title: 'By Priority', groupByItems: [] }
2483
+ ];
2484
+ this.viewedNotifications = [];
2485
+ }
2486
+ ngOnInit() {
2487
+ super.ngOnInit();
2488
+ this._deviceSize = this.deviceSize;
2489
+ this.applyGroupByItems(this.notifications);
2490
+ }
2491
+ ngOnChanges(changes) {
2492
+ super.ngOnChanges(changes);
2493
+ const { notifications } = changes;
2494
+ if (notifications && !notifications.firstChange) {
2495
+ this.applyGroupByItems(notifications.currentValue);
2496
+ this._cdr.detectChanges();
2497
+ }
2498
+ }
2499
+ applyGroupByItems(notifications) {
2500
+ if (!notifications?.length) {
2501
+ return;
2502
+ }
2503
+ this.tabList[0].groupByItems = this._groupByPipe.transform(notifications, 'CreationDate');
2504
+ this.tabList[1].groupByItems = this._groupByPipe.transform(notifications, 'Subject');
2505
+ this.tabList[2].groupByItems = this._groupByPipe.transform(notifications, 'Priority');
2506
+ for (let i = 0; i < this.tabList.length; i++) {
2507
+ if (this.tabList[i].groupByItems.length) {
2508
+ const firstKey = this.tabList[i].groupByItems[0].key;
2509
+ if (firstKey && typeof this.expanded[firstKey] === 'undefined') {
2510
+ this.expanded[firstKey] = true;
2511
+ }
2512
+ }
2513
+ }
2514
+ }
2515
+ _trackByTitle(_index, _) {
2516
+ return _index;
2517
+ }
2518
+ _trackByKey(_index, item) {
2519
+ return item.key;
2520
+ }
2521
+ _trackMoById(_index, mo) {
2522
+ return mo.Id;
2523
+ }
2524
+ onVisibilityChange(e, mo, isLast) {
2525
+ if (e === IntersectionStatus.Visible) {
2526
+ if (mo.Unread) {
2527
+ this.viewedNotifications = [...this.viewedNotifications.filter((c) => c.Unread), mo];
2528
+ this.viewed.emit(mo);
2529
+ }
2530
+ if (isLast) {
2531
+ this.loadMore.emit();
2532
+ }
2533
+ }
2534
+ }
2535
+ onWorkflowExecuteChoiceStatusChanged(e, mo) {
2536
+ if (e.result && !e.error) {
2537
+ this.remove.emit({ items: [mo], silent: true });
2538
+ BarsaApi.Bw.Toast.Success(`${e.choice?.Title} ${BarsaApi.BBB.Action}`);
2539
+ return;
2540
+ }
2541
+ mo.$ChoiceDefStatus = e;
2542
+ this._cdr.detectChanges();
2543
+ }
2544
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: NotificationGroupComponent, deps: [{ token: i1.GroupByPipe }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
2545
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: NotificationGroupComponent, selector: "bt-notification-group", inputs: { notifications: "notifications", loading: "loading", deviceSize: "deviceSize", notificationCount: "notificationCount" }, outputs: { viewed: "viewed", remove: "remove", actionClick: "actionClick", showEvent: "showEvent", loadMore: "loadMore" }, host: { properties: { "class": "this._deviceSize" } }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "@if (notifications && notifications.length > 0) {\n<ng-container>\n <fd-notification-group>\n <fd-tab-list size=\"s\" [expandOverflowText]=\"'More' | bbbTranslate\">\n @for (tab of tabList; track _trackByTitle(index, tab); let index = $index) {\n <fd-tab [title]=\"tab.title | bbbTranslate\">\n @for (groupItem of tab.groupByItems; track _trackByKey(index, groupItem); let index = $index) {\n <fd-notification-group-list>\n <fd-notification-group-header [(expanded)]=\"expanded[groupItem.key]\">\n <fd-notification-header>\n <bt-notification-group-header\n [notifications]=\"groupItem.value\"\n [title]=\"groupItem.key\"\n ></bt-notification-group-header>\n </fd-notification-header>\n <fd-notification-actions>\n <!-- <button fd-button label=\"Accept All\"></button> -->\n <button\n fd-button\n fdType=\"transparent\"\n [ariaLabel]=\"'DeleteAll' | bbbTranslate\"\n [title]=\"'DeleteAll' | bbbTranslate\"\n glyph=\"decline\"\n (click)=\"remove.emit({ items: groupItem.value, silent: false })\"\n ></button>\n </fd-notification-actions>\n </fd-notification-group-header>\n <ng-container\n *ngTemplateOutlet=\"\n notificationBody;\n context: { $implicit: groupItem.value, expanded: expanded[groupItem.key] }\n \"\n ></ng-container>\n <!-- <fd-notification-limit *ngIf=\"groupItem.value.length - 4 > 0\">\n <h1 fd-notification-limit-title>\n There are {{ groupItem.value.length - 4 }} more notifications\n </h1>\n <p fd-notification-limit-description>\n You need to close or take action on the listed notifications to display more.\n </p>\n </fd-notification-limit> -->\n </fd-notification-group-list>\n }\n </fd-tab>\n }\n </fd-tab-list>\n </fd-notification-group>\n</ng-container>\n} @else { @if (!loading) {\n<bsu-no-data [simple]=\"true\" style=\"height: 3rem\"></bsu-no-data>\n} @else {\n<div style=\"height: 30px; position: relative\">\n <bsu-mask [top]=\"'10px'\"></bsu-mask>\n</div>\n} }\n<ng-template #loadingTpl>\n <div style=\"height: 30px; position: relative\">\n <bsu-mask [top]=\"'10px'\"></bsu-mask>\n </div>\n</ng-template>\n<ng-template #notificationItem> </ng-template>\n\n<ng-template #notificationBody let-notifications let-exapanded=\"expanded\">\n <div style=\"max-height: 346px; overflow-y: auto; overflow-x: hidden\">\n @for (mo of notifications; track _trackMoById($index, mo); let first = $first; let last = $last) {\n <bsu-notification-item\n [notificationItem]=\"mo\"\n (viewed)=\"viewed.emit($event)\"\n (remove)=\"remove.emit($event)\"\n (showEvent)=\"showEvent.emit($event)\"\n (actionClick)=\"actionClick.emit($event)\"\n intersectionObserver\n [intersectionThreshold]=\"0.5\"\n [deviceSize]=\"deviceSize\"\n (visibilityChange)=\"onVisibilityChange($event, mo, last)\"\n ></bsu-notification-item>\n } @if (loading) {\n <ng-container *ngTemplateOutlet=\"loadingTpl\"></ng-container>\n }\n </div>\n</ng-template>\n", styles: [":host{display:block;min-width:600px}:host ::ng-deep .fd-tabs__content{overflow:hidden}:host ::ng-deep .fd-notification{padding:0;box-shadow:none}fd-notification{margin:0;padding-left:0rem!important;padding-right:0rem!important}fd-notification-body{position:relative}.noloading{visibility:hidden;height:0;width:0}.loading{visibility:visible;height:100%;width:100%}:host.s{min-width:auto}\n"], dependencies: [{ kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i4$4.NotificationHeaderComponent, selector: "fd-notification-header", inputs: ["uniqueId"] }, { kind: "component", type: i4$4.NotificationActionsComponent, selector: "fd-notification-actions" }, { kind: "component", type: i4$4.NotificationGroupHeaderComponent, selector: "fd-notification-group-header", inputs: ["expandCompact", "expandAriaLabel", "expandAriaLabelledBy", "expanded"], outputs: ["expandedChange"] }, { kind: "component", type: i4$4.NotificationGroupComponent, selector: "fd-notification-group", inputs: ["class", "mobile", "width"] }, { kind: "component", type: i4$4.NotificationGroupListComponent, selector: "fd-notification-group-list" }, { kind: "component", type: i9$2.TabListComponent, selector: "fd-tab-list", inputs: ["size", "mode", "collapseOverflow", "maxVisibleTabs", "stackContent", "maxContentHeight", "collapsibleTabs", "defaultTab", "selectDefaultOnTabsChange", "focusFirstFocusableElement"], outputs: ["selectedTabChange", "selectedTabIndexChange", "visibleItemsCount", "hiddenItemsCount"] }, { kind: "component", type: i9$2.TabPanelComponent, selector: "fd-tab", inputs: ["id", "ariaLabel", "ariaLabelledBy", "title", "count", "glyph", "header", "disabled", "tabState"], outputs: ["opened", "closed"] }, { kind: "directive", type: i1.IntersectionObserverDirective, selector: "[intersectionObserver]", inputs: ["intersectionDebounce", "intersectionRootMargin", "intersectionRoot", "intersectionThreshold"], outputs: ["visibilityChange"] }, { 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: i4.NotificationItemComponent, selector: "bsu-notification-item", inputs: ["option", "notificationItem", "showCloseButton", "deviceSize"], outputs: ["viewed", "remove", "actionClick", "showEvent", "closeEvent"] }, { kind: "component", type: NotificationGroupHeaderComponent, selector: "bt-notification-group-header", inputs: ["notifications", "title"] }, { kind: "pipe", type: i1.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2546
+ }
2547
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: NotificationGroupComponent, decorators: [{
2548
+ type: Component,
2549
+ args: [{ selector: 'bt-notification-group', changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (notifications && notifications.length > 0) {\n<ng-container>\n <fd-notification-group>\n <fd-tab-list size=\"s\" [expandOverflowText]=\"'More' | bbbTranslate\">\n @for (tab of tabList; track _trackByTitle(index, tab); let index = $index) {\n <fd-tab [title]=\"tab.title | bbbTranslate\">\n @for (groupItem of tab.groupByItems; track _trackByKey(index, groupItem); let index = $index) {\n <fd-notification-group-list>\n <fd-notification-group-header [(expanded)]=\"expanded[groupItem.key]\">\n <fd-notification-header>\n <bt-notification-group-header\n [notifications]=\"groupItem.value\"\n [title]=\"groupItem.key\"\n ></bt-notification-group-header>\n </fd-notification-header>\n <fd-notification-actions>\n <!-- <button fd-button label=\"Accept All\"></button> -->\n <button\n fd-button\n fdType=\"transparent\"\n [ariaLabel]=\"'DeleteAll' | bbbTranslate\"\n [title]=\"'DeleteAll' | bbbTranslate\"\n glyph=\"decline\"\n (click)=\"remove.emit({ items: groupItem.value, silent: false })\"\n ></button>\n </fd-notification-actions>\n </fd-notification-group-header>\n <ng-container\n *ngTemplateOutlet=\"\n notificationBody;\n context: { $implicit: groupItem.value, expanded: expanded[groupItem.key] }\n \"\n ></ng-container>\n <!-- <fd-notification-limit *ngIf=\"groupItem.value.length - 4 > 0\">\n <h1 fd-notification-limit-title>\n There are {{ groupItem.value.length - 4 }} more notifications\n </h1>\n <p fd-notification-limit-description>\n You need to close or take action on the listed notifications to display more.\n </p>\n </fd-notification-limit> -->\n </fd-notification-group-list>\n }\n </fd-tab>\n }\n </fd-tab-list>\n </fd-notification-group>\n</ng-container>\n} @else { @if (!loading) {\n<bsu-no-data [simple]=\"true\" style=\"height: 3rem\"></bsu-no-data>\n} @else {\n<div style=\"height: 30px; position: relative\">\n <bsu-mask [top]=\"'10px'\"></bsu-mask>\n</div>\n} }\n<ng-template #loadingTpl>\n <div style=\"height: 30px; position: relative\">\n <bsu-mask [top]=\"'10px'\"></bsu-mask>\n </div>\n</ng-template>\n<ng-template #notificationItem> </ng-template>\n\n<ng-template #notificationBody let-notifications let-exapanded=\"expanded\">\n <div style=\"max-height: 346px; overflow-y: auto; overflow-x: hidden\">\n @for (mo of notifications; track _trackMoById($index, mo); let first = $first; let last = $last) {\n <bsu-notification-item\n [notificationItem]=\"mo\"\n (viewed)=\"viewed.emit($event)\"\n (remove)=\"remove.emit($event)\"\n (showEvent)=\"showEvent.emit($event)\"\n (actionClick)=\"actionClick.emit($event)\"\n intersectionObserver\n [intersectionThreshold]=\"0.5\"\n [deviceSize]=\"deviceSize\"\n (visibilityChange)=\"onVisibilityChange($event, mo, last)\"\n ></bsu-notification-item>\n } @if (loading) {\n <ng-container *ngTemplateOutlet=\"loadingTpl\"></ng-container>\n }\n </div>\n</ng-template>\n", styles: [":host{display:block;min-width:600px}:host ::ng-deep .fd-tabs__content{overflow:hidden}:host ::ng-deep .fd-notification{padding:0;box-shadow:none}fd-notification{margin:0;padding-left:0rem!important;padding-right:0rem!important}fd-notification-body{position:relative}.noloading{visibility:hidden;height:0;width:0}.loading{visibility:visible;height:100%;width:100%}:host.s{min-width:auto}\n"] }]
2550
+ }], ctorParameters: () => [{ type: i1.GroupByPipe }, { type: i0.ChangeDetectorRef }], propDecorators: { notifications: [{
2551
+ type: Input
2552
+ }], loading: [{
2553
+ type: Input
2554
+ }], deviceSize: [{
2555
+ type: Input
2556
+ }], notificationCount: [{
2557
+ type: Input
2558
+ }], _deviceSize: [{
2559
+ type: HostBinding,
2560
+ args: ['class']
2561
+ }], viewed: [{
2562
+ type: Output
2563
+ }], remove: [{
2564
+ type: Output
2565
+ }], actionClick: [{
2566
+ type: Output
2567
+ }], showEvent: [{
2568
+ type: Output
2569
+ }], loadMore: [{
2570
+ type: Output
2571
+ }] } });
2572
+
2573
+ class BarsaShellbarComponent extends BaseComponent {
2574
+ constructor(_notificationService, _dialogService, _document, appVersion) {
2575
+ super();
2576
+ this._notificationService = _notificationService;
2577
+ this._dialogService = _dialogService;
2578
+ this._document = _document;
2579
+ this.appVersion = appVersion;
2580
+ this.openNotificationPanel = new EventEmitter();
2581
+ this.openQuickAccessPanel = new EventEmitter();
2582
+ this.cultureChanged = new EventEmitter();
2583
+ this.notificationLoadMore = new EventEmitter();
2584
+ this.removeNotification = new EventEmitter();
2585
+ this.notifiationActionClick = new EventEmitter();
2586
+ this.notificationViewed = new EventEmitter();
2587
+ this._cdr = inject(ChangeDetectorRef);
2588
+ this.Array = Array;
2589
+ this.isOpenNotificatoin = false;
2590
+ this.isOpenQuickAccess = false;
2591
+ this.user = {
2592
+ initials: 'WW',
2593
+ colorAccent: 1
2594
+ };
2595
+ this.searchTerms = ['مرخصی', 'ماموریت', 'تیکت', 'پروژه'];
2596
+ this.showVersion = false;
2597
+ this._viewedNotifications$ = new Subject();
2598
+ this.onBellNotification = () => {
2599
+ this._document?.body && this._document.body.click();
2600
+ this._dialogService
2601
+ .open(this._notificationsDialog, {
2602
+ mobile: true,
2603
+ verticalPadding: false,
2604
+ closeOnNavigation: true
2605
+ })
2606
+ .afterLoaded.subscribe(() => {
2607
+ this.openNotificationPanel.emit();
2608
+ });
2609
+ };
2610
+ this._viewedNotifications = [];
2611
+ this.onOpenQuickAccess = () => {
2612
+ this.isOpenQuickAccess = true;
2613
+ this.openQuickAccessPanel.emit();
2614
+ };
2615
+ this.onOpenNotification = () => {
2616
+ this.isOpenNotificatoin = true;
2617
+ this.openNotificationPanel.emit();
2618
+ };
2619
+ this.onLanguage = (e) => {
2620
+ const culture = e.currentTarget.textContent.trim();
2621
+ this._changeCulture(culture);
2622
+ };
2623
+ this.showVersion = !BarsaApi.LoginFormData.IsServiceDesk;
2624
+ this.showVersion = false;
2625
+ document.body.addEventListener('click', () => {
2626
+ this.isOpenQuickAccess = false;
2627
+ this._cdr.detectChanges();
2628
+ });
2629
+ }
2630
+ ngOnInit() {
2631
+ super.ngOnInit();
2632
+ }
2633
+ onCultureChange(culture) {
2634
+ this._changeCulture(culture);
2635
+ }
2636
+ onShowNotification(e) {
2637
+ this.isOpenNotificatoin = false;
2638
+ this._notificationService.ShowNotificationRelatedMo(e);
2639
+ }
2640
+ onNotificationItemViewed(viewedMo) {
2641
+ this.notificationViewed.emit(viewedMo);
2642
+ }
2643
+ onRemoveNotifications(e) {
2644
+ this.removeNotification.emit(e);
2645
+ }
2646
+ onNotificationAction(e) {
2647
+ this.notifiationActionClick.emit(e);
2648
+ }
2649
+ onNotificationLoadMore() {
2650
+ this.notificationLoadMore.emit();
2651
+ }
2652
+ _changeCulture(culture) {
2653
+ this.cultureChanged.emit(culture);
2654
+ }
2655
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: BarsaShellbarComponent, deps: [{ token: i1.NotificationService }, { token: i1$1.DialogService }, { token: DOCUMENT }, { token: APP_VERSION }], target: i0.ɵɵFactoryTarget.Component }); }
2656
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: BarsaShellbarComponent, selector: "bt-barsa-shellbar", inputs: { cssCustomUrl: "cssCustomUrl", cssUrl: "cssUrl", allowAnonymous: "allowAnonymous", multiLanguages: "multiLanguages", userLoggedIn: "userLoggedIn", settings: "settings", productMenuControl: "productMenuControl", deviceSize: "deviceSize", cultures: "cultures", shellbarData: "shellbarData", notificationCount: "notificationCount", notifcationLoaded: "notifcationLoaded", notificationLoading: "notificationLoading", notifications: "notifications", productMenuItems1: "productMenuItems1", bodyClick: "bodyClick", logo: "logo", actions: "actions", userMenu: "userMenu", productSwitcher: "productSwitcher", subtitle: "subtitle", isMobile: "isMobile" }, outputs: { openNotificationPanel: "openNotificationPanel", openQuickAccessPanel: "openQuickAccessPanel", cultureChanged: "cultureChanged", notificationLoadMore: "notificationLoadMore", removeNotification: "removeNotification", notifiationActionClick: "notifiationActionClick", notificationViewed: "notificationViewed" }, viewQueries: [{ propertyName: "comboboxComponent", first: true, predicate: ComboboxComponent, descendants: true }, { propertyName: "popoverComponent", first: true, predicate: ["popoverComponent"], descendants: true }, { propertyName: "_notificationsDialog", first: true, predicate: ["notificationsDialog"], descendants: true, read: TemplateRef, static: true }], usesInheritance: true, ngImport: i0, template: "@if (cssUrl) {\r\n<link type=\"text/css\" rel=\"stylesheet\" [href]=\"cssUrl\" />\r\n} @if (cssCustomUrl) {\r\n<link type=\"text/css\" rel=\"stylesheet\" [href]=\"cssCustomUrl\" />\r\n} @if (userLoggedIn || allowAnonymous) {\r\n<fd-shellbar [size]=\"deviceSize\" [ngClass]=\"deviceSize\">\r\n @if (deviceSize === 's' && userLoggedIn && !settings?.HideQuickAccess) {\r\n <fd-shellbar-action\r\n [glyph]=\"'apps'\"\r\n [label]=\"'Quick Access' | bbbTranslate\"\r\n [notificationCount]=\"notificationCount.unread ?? 0\"\r\n [notificationLabel]=\"'Quick Access' | bbbTranslate\"\r\n [callback]=\"onOpenQuickAccess\"\r\n >\r\n </fd-shellbar-action>\r\n }\r\n <!-- @if (userLoggedIn && !settings?.HideQuickAccess) {-->\r\n <!-- <fd-popover-->\r\n <!-- [(isOpen)]=\"isOpenQuickAccess\"-->\r\n <!-- [triggers]=\"[]\"-->\r\n <!-- [focusTrapped]=\"true\"-->\r\n <!-- [noArrow]=\"true\"-->\r\n <!-- placement=\"bottom\"-->\r\n <!-- title=\"Quick Access Popover\"-->\r\n <!-- [focusAutoCapture]=\"true\"-->\r\n <!-- [mobile]=\"deviceSize === 's'\"-->\r\n <!-- #popoverComponent-->\r\n <!-- >-->\r\n <!-- <fd-popover-control>-->\r\n <!-- <fd-shellbar-action-->\r\n <!-- [glyph]=\"'grid'\"-->\r\n <!-- [label]=\"'Quick Access'\"-->\r\n <!-- [callback]=\"onOpenQuickAccess\"-->\r\n <!-- >-->\r\n <!-- </fd-shellbar-action>-->\r\n <!-- </fd-popover-control>-->\r\n <!-- <fd-popover-body style=\"min-width: 320px; overflow-x: auto; box-shadow: var(&#45;&#45;sapContent_Shadow0)\">-->\r\n <!-- <ng-container-->\r\n <!-- *ngTemplateOutlet=\"QuickAccessTemplate\"-->\r\n <!-- ></ng-container>-->\r\n <!-- </fd-popover-body>-->\r\n <!-- </fd-popover>-->\r\n <!-- }-->\r\n @if (userLoggedIn && !settings?.HideQuickAccess) {\r\n <button\r\n fd-shellbar-side-nav\r\n fd-button\r\n fdType=\"transparent\"\r\n glyph=\"menu2\"\r\n style=\"width: 2.75rem\"\r\n (click)=\"$event.stopPropagation(); isOpenQuickAccess = !isOpenQuickAccess\"\r\n ></button>\r\n } @if (logo) {\r\n <fd-shellbar-logo>\r\n <a\r\n [style.backgroundImage]=\"'url(' + (logo?.FileId | picFieldSrc: 'GetPictureFromFileInfo':null) + ')'\"\r\n href=\"/\"\r\n class=\"fd-shellbar__logo fd-shellbar__logo--image-replaced\"\r\n aria-label=\"Barsa Novin Ray\"\r\n ></a>\r\n </fd-shellbar-logo>\r\n } @if (!settings?.HideProductMenu && productMenuItems1 && productMenuItems1.length > 0) {\r\n <fd-product-menu [control]=\"productMenuControl\" [closePopoverOnSelect]=\"true\" [items]=\"productMenuItems1\">\r\n </fd-product-menu>\r\n }\r\n <fd-shellbar-subtitle> {{ subtitle | bbbTranslate }}{{ showVersion ? appVersion : '' }}</fd-shellbar-subtitle>\r\n @if (user && (userMenu?.length || !settings?.HideLanguage)) {\r\n <fd-shellbar-actions [user]=\"user\" [userMenu]=\"userMenu\" #langRef>\r\n @for (action of actions; track action) {\r\n <fd-shellbar-action [glyph]=\"action.Icon\" [callback]=\"action.Callback\" [label]=\"action.Label\">\r\n </fd-shellbar-action>\r\n } @if (deviceSize === 's' && userLoggedIn && !settings?.HideNotifications) {\r\n <fd-shellbar-action\r\n [glyph]=\"'bell'\"\r\n [label]=\"'Notifications' | bbbTranslate\"\r\n [notificationCount]=\"notificationCount.unread ?? 0\"\r\n [notificationLabel]=\"'Notifications' | bbbTranslate\"\r\n [callback]=\"onBellNotification\"\r\n >\r\n </fd-shellbar-action>\r\n } @if (!settings?.HideNotifications && userLoggedIn) {\r\n <fd-popover\r\n [(isOpen)]=\"isOpenNotificatoin\"\r\n [triggers]=\"[]\"\r\n [focusTrapped]=\"true\"\r\n [noArrow]=\"true\"\r\n placement=\"bottom\"\r\n title=\"Notification Popover\"\r\n [focusAutoCapture]=\"true\"\r\n [mobile]=\"deviceSize === 's'\"\r\n #popoverComponent\r\n >\r\n <fd-popover-control>\r\n <fd-shellbar-action\r\n [glyph]=\"'bell'\"\r\n [label]=\"'Notification'\"\r\n [notificationCount]=\"notificationCount.unread\"\r\n [notificationLabel]=\"'Notification Label'\"\r\n [callback]=\"onOpenNotification\"\r\n >\r\n </fd-shellbar-action>\r\n </fd-popover-control>\r\n <fd-popover-body style=\"min-width: 320px; overflow-x: auto; box-shadow: var(--sapContent_Shadow0)\">\r\n <ng-container\r\n *ngTemplateOutlet=\"notificationGroupTpl; context: { notificationCount: notificationCount }\"\r\n ></ng-container>\r\n </fd-popover-body>\r\n </fd-popover>\r\n } @if (!settings?.HideLanguage && deviceSize !== 's' && multiLanguages) {\r\n <fd-shellbar-action [glyph]=\"'world'\" [label]=\"'language'\" [fdMenuTrigger]=\"menu\" (callback)=\"(onLanguage)\">\r\n </fd-shellbar-action>\r\n } @if (!settings?.HideLanguage && deviceSize === 's' && multiLanguages) { @for (culture of cultures | keyvalue;\r\n track culture) {\r\n <fd-shellbar-action\r\n [label]=\"culture.value\"\r\n [callback]=\"onLanguage\"\r\n class=\"culture-abbrivation\"\r\n [glyph]=\"culture.key\"\r\n [ngClass]=\"'flags'\"\r\n >\r\n </fd-shellbar-action>\r\n } } @if (productSwitcher?.length) {\r\n <fd-product-switch>\r\n <fd-product-switch-body [products]=\"productSwitcher\" [forceListMode]=\"deviceSize === 's'\">\r\n </fd-product-switch-body>\r\n </fd-product-switch>\r\n }\r\n </fd-shellbar-actions>\r\n }\r\n</fd-shellbar>\r\n}\r\n<ng-template #loading>\r\n <bsu-mask></bsu-mask>\r\n</ng-template>\r\n\r\n<div\r\n class=\"tw-fixed tw-top-[38.5px] tw-h-[calc(100vh-38.5px)] tw-bg-white tw-transition-all tw-z-[100] tw-shadow-2xl tw-overflow-auto\"\r\n [class.!tw-right-0]=\"isOpenQuickAccess\"\r\n [ngClass]=\"isMobile ? 'tw-w-screen -tw-right-full' : 'tw-w-80 -tw-right-80'\"\r\n (click)=\"$event.stopPropagation()\"\r\n>\r\n <ng-container *ngTemplateOutlet=\"QuickAccessTemplate\"></ng-container>\r\n</div>\r\n\r\n@if(isOpenQuickAccess) {\r\n<div\r\n class=\"tw-fixed tw-right-0 tw-top-[38.5px] tw-h-[calc(100vh-38.5px)] tw-bg-slate-800/[.5] tw-z-[90] tw-w-screen tw-backdrop-blur-sm\"\r\n (click)=\"isOpenQuickAccess = false\"\r\n></div>\r\n}\r\n<fd-menu #menu>\r\n <ul fd-list>\r\n @for (culture of cultures | keyvalue; track culture) {\r\n <li fd-list-item>\r\n <a fd-list-link (click)=\"onCultureChange(culture.value)\">\r\n <span fd-list-title>\r\n <img width=\"14px\" height=\"12px\" [src]=\"'/assets/flags/' + culture.key + '.png'\" />\r\n <span class=\"culture-abbrivation\" [ngClass]=\"culture.key\"> {{ culture.key }}</span>\r\n </span>\r\n </a>\r\n </li>\r\n }\r\n </ul>\r\n</fd-menu>\r\n<ng-template #notificationGroupTpl let-notificationCount=\"notificationCount\">\r\n @if (!notifcationLoaded && notificationLoading === true) {\r\n <div style=\"position: relative; height: 100px\">\r\n <bsu-mask size=\"s\"></bsu-mask>\r\n </div>\r\n }\r\n <bt-notification-group\r\n [notifications]=\"notifications\"\r\n [notificationCount]=\"notificationCount\"\r\n [loading]=\"notificationLoading === true\"\r\n (viewed)=\"onNotificationItemViewed($event)\"\r\n (remove)=\"onRemoveNotifications($event)\"\r\n (showEvent)=\"popoverComponent.close(); onShowNotification($event)\"\r\n (actionClick)=\"popoverComponent.close(); onNotificationAction($event)\"\r\n (loadMore)=\"onNotificationLoadMore()\"\r\n [deviceSize]=\"deviceSize\"\r\n ></bt-notification-group>\r\n</ng-template>\r\n<ng-template #QuickAccessTemplate>\r\n @if (!notifcationLoaded && notificationLoading === true) {\r\n <div style=\"position: relative; height: 100px\">\r\n <bsu-mask size=\"s\"></bsu-mask>\r\n </div>\r\n }\r\n <bt-popover-app-finder (closeMenu)=\"isOpenQuickAccess = false\"></bt-popover-app-finder>\r\n</ng-template>\r\n\r\n<ng-template let-dialog let-dialogConfig=\"dialogConfig\" #notificationsDialog>\r\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\r\n <fd-dialog-header>\r\n <h1 id=\"fd-dialog-header-10\" fd-title>{{ 'Notification' | bbbTranslate }}</h1>\r\n <button fd-dialog-close-button (click)=\"dialog.dismiss()\"></button>\r\n </fd-dialog-header>\r\n <fd-dialog-body class=\"mobile\">\r\n <ng-container\r\n *ngTemplateOutlet=\"notificationGroupTpl; context: { notificationCount: notificationCount }\"\r\n ></ng-container>\r\n </fd-dialog-body>\r\n </fd-dialog>\r\n</ng-template>\r\n", styles: [":host{display:contents}:host ::ng-deep fd-shellbar-actions fd-avatar{background-color:transparent!important;color:var(--sapShell_InteractiveTextColor, #d1e8ff)}:host ::ng-deep fd-combobox .fd-input-group input{min-width:2rem;height:1.625rem;margin-top:.1875rem;margin-bottom:.1875rem;padding:0 .5rem;box-sizing:border-box}:host ::ng-deep fd-combobox .fd-input-group span{min-width:2rem;min-height:1.625rem}:host ::ng-deep .fd-shellbar__subtitle{font-size:1rem}:host ::ng-deep .fd-shellbar--s{padding:0}:host ::ng-deep .fd-shellbar--s ::ng-deep .fd-shellbar__subtitle{display:block;overflow:hidden;text-wrap:wrap;width:100%;word-break:break-all}:host ::ng-deep .fd-shellbar--s ::ng-deep .fd-shellbar__group.fd-shellbar__group--product{flex:1}:host ::ng-deep .fd-shellbar--s ::ng-deep .fd-shellbar__group.fd-shellbar__group--actions{max-width:120px}.fd-shellbar__logo{min-height:3rem;height:3rem;width:3rem}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i8$1.ListComponent, selector: "[fd-list], [fdList]", inputs: ["dropdownMode", "multiInputMode", "mobileMode", "hasMessage", "noBorder", "navigationIndicator", "selection", "keyboardSupport", "byline", "unreadIndicator", "role"], outputs: ["focusEscapeList"] }, { kind: "component", type: i8$1.ListItemComponent, selector: "[fdListItem] ,[fd-list-item]", inputs: ["selected", "noData", "action", "interactive", "growing", "counter", "unread", "byline", "ariaRole", "id"], outputs: ["keyDown"] }, { kind: "directive", type: i8$1.ListTitleDirective, selector: "[fd-list-title], [fdListTitle]", inputs: ["wrap"] }, { kind: "directive", type: i8$1.ListLinkDirective, selector: "[fd-list-link], [fdListLink]", inputs: ["navigationIndicator", "navigated", "focusable"] }, { kind: "component", type: i3$1.MenuComponent, selector: "fd-menu", inputs: ["mobile", "disabled", "focusTrapped", "focusAutoCapture", "openOnHoverTime", "mobileConfig", "ariaLabel", "ariaLabelledby", "id"], outputs: ["activePath"] }, { kind: "directive", type: i3$1.MenuTriggerDirective, selector: "[fdMenuTrigger]", inputs: ["fdMenuTrigger"] }, { kind: "component", type: i7.DialogComponent, selector: "fd-dialog", inputs: ["class", "dialogRef", "dialogConfig"] }, { kind: "component", type: i7.DialogBodyComponent, selector: "fd-dialog-body" }, { kind: "component", type: i7.DialogHeaderComponent, selector: "fd-dialog-header" }, { kind: "component", type: i7.DialogCloseButtonComponent, selector: "[fd-dialog-close-button]", inputs: ["mobile", "title", "ariaLabel"] }, { kind: "component", type: i8.TitleComponent, selector: "[fd-title], [fdTitle]", inputs: ["headerSize", "wrap"], exportAs: ["fd-title"] }, { kind: "component", type: i9$3.ProductSwitchComponent, selector: "fd-product-switch", inputs: ["placement", "disabled"] }, { kind: "component", type: i9$3.ProductSwitchBodyComponent, selector: "fd-product-switch-body", inputs: ["dragAndDropEnabled", "products", "forceListMode"], outputs: ["productsChange", "itemClicked"] }, { kind: "component", type: i10$1.PopoverControlComponent, selector: "fd-popover-control, [fdPopoverControl]" }, { kind: "component", type: i10$1.PopoverBodyComponent, selector: "fd-popover-body", inputs: ["minWidth", "maxWidth", "minHeight", "maxHeight"] }, { kind: "component", type: i10$1.PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig", "preventSpaceKeyScroll"] }, { kind: "component", type: i11.ShellbarComponent, selector: "fd-shellbar", inputs: ["size", "breakpoints", "sideNav", "groupFlex"] }, { kind: "component", type: i11.ProductMenuComponent, selector: "fd-product-menu", inputs: ["closeOnEscapeKey", "closeOnOutsideClick", "triggers", "placement", "disabled", "fillControlMode", "control", "items", "closePopoverOnSelect"] }, { kind: "component", type: i11.ShellbarSubtitleComponent, selector: "fd-shellbar-subtitle" }, { kind: "component", type: i11.ShellbarActionsComponent, selector: "fd-shellbar-actions", inputs: ["user", "userMenu", "closePopoverOnSelect"], outputs: ["searchOpen"] }, { kind: "component", type: i11.ShellbarActionComponent, selector: "fd-shellbar-action", inputs: ["glyph", "glyphFont", "callback", "label", "notificationLabel", "notificationCount"] }, { kind: "component", type: i11.ShellbarLogoComponent, selector: "fd-shellbar-logo" }, { kind: "directive", type: i11.ShellbarSidenavDirective, selector: "[fdShellbarSidenav], [fd-shellbar-side-nav]" }, { kind: "directive", type: i1.MobileDirective, selector: "[mobile]" }, { kind: "component", type: i4.MaskComponent, selector: "bsu-mask", inputs: ["size", "top"] }, { kind: "component", type: PopoverAppFinderComponent, selector: "bt-popover-app-finder", outputs: ["closeMenu"] }, { kind: "component", type: NotificationGroupComponent, selector: "bt-notification-group", inputs: ["notifications", "loading", "deviceSize", "notificationCount"], outputs: ["viewed", "remove", "actionClick", "showEvent", "loadMore"] }, { kind: "pipe", type: i3.KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: i1.PictureFieldSourcePipe, name: "picFieldSrc" }, { kind: "pipe", type: i1.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2657
+ }
2658
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: BarsaShellbarComponent, decorators: [{
2659
+ type: Component,
2660
+ args: [{ selector: 'bt-barsa-shellbar', changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (cssUrl) {\r\n<link type=\"text/css\" rel=\"stylesheet\" [href]=\"cssUrl\" />\r\n} @if (cssCustomUrl) {\r\n<link type=\"text/css\" rel=\"stylesheet\" [href]=\"cssCustomUrl\" />\r\n} @if (userLoggedIn || allowAnonymous) {\r\n<fd-shellbar [size]=\"deviceSize\" [ngClass]=\"deviceSize\">\r\n @if (deviceSize === 's' && userLoggedIn && !settings?.HideQuickAccess) {\r\n <fd-shellbar-action\r\n [glyph]=\"'apps'\"\r\n [label]=\"'Quick Access' | bbbTranslate\"\r\n [notificationCount]=\"notificationCount.unread ?? 0\"\r\n [notificationLabel]=\"'Quick Access' | bbbTranslate\"\r\n [callback]=\"onOpenQuickAccess\"\r\n >\r\n </fd-shellbar-action>\r\n }\r\n <!-- @if (userLoggedIn && !settings?.HideQuickAccess) {-->\r\n <!-- <fd-popover-->\r\n <!-- [(isOpen)]=\"isOpenQuickAccess\"-->\r\n <!-- [triggers]=\"[]\"-->\r\n <!-- [focusTrapped]=\"true\"-->\r\n <!-- [noArrow]=\"true\"-->\r\n <!-- placement=\"bottom\"-->\r\n <!-- title=\"Quick Access Popover\"-->\r\n <!-- [focusAutoCapture]=\"true\"-->\r\n <!-- [mobile]=\"deviceSize === 's'\"-->\r\n <!-- #popoverComponent-->\r\n <!-- >-->\r\n <!-- <fd-popover-control>-->\r\n <!-- <fd-shellbar-action-->\r\n <!-- [glyph]=\"'grid'\"-->\r\n <!-- [label]=\"'Quick Access'\"-->\r\n <!-- [callback]=\"onOpenQuickAccess\"-->\r\n <!-- >-->\r\n <!-- </fd-shellbar-action>-->\r\n <!-- </fd-popover-control>-->\r\n <!-- <fd-popover-body style=\"min-width: 320px; overflow-x: auto; box-shadow: var(&#45;&#45;sapContent_Shadow0)\">-->\r\n <!-- <ng-container-->\r\n <!-- *ngTemplateOutlet=\"QuickAccessTemplate\"-->\r\n <!-- ></ng-container>-->\r\n <!-- </fd-popover-body>-->\r\n <!-- </fd-popover>-->\r\n <!-- }-->\r\n @if (userLoggedIn && !settings?.HideQuickAccess) {\r\n <button\r\n fd-shellbar-side-nav\r\n fd-button\r\n fdType=\"transparent\"\r\n glyph=\"menu2\"\r\n style=\"width: 2.75rem\"\r\n (click)=\"$event.stopPropagation(); isOpenQuickAccess = !isOpenQuickAccess\"\r\n ></button>\r\n } @if (logo) {\r\n <fd-shellbar-logo>\r\n <a\r\n [style.backgroundImage]=\"'url(' + (logo?.FileId | picFieldSrc: 'GetPictureFromFileInfo':null) + ')'\"\r\n href=\"/\"\r\n class=\"fd-shellbar__logo fd-shellbar__logo--image-replaced\"\r\n aria-label=\"Barsa Novin Ray\"\r\n ></a>\r\n </fd-shellbar-logo>\r\n } @if (!settings?.HideProductMenu && productMenuItems1 && productMenuItems1.length > 0) {\r\n <fd-product-menu [control]=\"productMenuControl\" [closePopoverOnSelect]=\"true\" [items]=\"productMenuItems1\">\r\n </fd-product-menu>\r\n }\r\n <fd-shellbar-subtitle> {{ subtitle | bbbTranslate }}{{ showVersion ? appVersion : '' }}</fd-shellbar-subtitle>\r\n @if (user && (userMenu?.length || !settings?.HideLanguage)) {\r\n <fd-shellbar-actions [user]=\"user\" [userMenu]=\"userMenu\" #langRef>\r\n @for (action of actions; track action) {\r\n <fd-shellbar-action [glyph]=\"action.Icon\" [callback]=\"action.Callback\" [label]=\"action.Label\">\r\n </fd-shellbar-action>\r\n } @if (deviceSize === 's' && userLoggedIn && !settings?.HideNotifications) {\r\n <fd-shellbar-action\r\n [glyph]=\"'bell'\"\r\n [label]=\"'Notifications' | bbbTranslate\"\r\n [notificationCount]=\"notificationCount.unread ?? 0\"\r\n [notificationLabel]=\"'Notifications' | bbbTranslate\"\r\n [callback]=\"onBellNotification\"\r\n >\r\n </fd-shellbar-action>\r\n } @if (!settings?.HideNotifications && userLoggedIn) {\r\n <fd-popover\r\n [(isOpen)]=\"isOpenNotificatoin\"\r\n [triggers]=\"[]\"\r\n [focusTrapped]=\"true\"\r\n [noArrow]=\"true\"\r\n placement=\"bottom\"\r\n title=\"Notification Popover\"\r\n [focusAutoCapture]=\"true\"\r\n [mobile]=\"deviceSize === 's'\"\r\n #popoverComponent\r\n >\r\n <fd-popover-control>\r\n <fd-shellbar-action\r\n [glyph]=\"'bell'\"\r\n [label]=\"'Notification'\"\r\n [notificationCount]=\"notificationCount.unread\"\r\n [notificationLabel]=\"'Notification Label'\"\r\n [callback]=\"onOpenNotification\"\r\n >\r\n </fd-shellbar-action>\r\n </fd-popover-control>\r\n <fd-popover-body style=\"min-width: 320px; overflow-x: auto; box-shadow: var(--sapContent_Shadow0)\">\r\n <ng-container\r\n *ngTemplateOutlet=\"notificationGroupTpl; context: { notificationCount: notificationCount }\"\r\n ></ng-container>\r\n </fd-popover-body>\r\n </fd-popover>\r\n } @if (!settings?.HideLanguage && deviceSize !== 's' && multiLanguages) {\r\n <fd-shellbar-action [glyph]=\"'world'\" [label]=\"'language'\" [fdMenuTrigger]=\"menu\" (callback)=\"(onLanguage)\">\r\n </fd-shellbar-action>\r\n } @if (!settings?.HideLanguage && deviceSize === 's' && multiLanguages) { @for (culture of cultures | keyvalue;\r\n track culture) {\r\n <fd-shellbar-action\r\n [label]=\"culture.value\"\r\n [callback]=\"onLanguage\"\r\n class=\"culture-abbrivation\"\r\n [glyph]=\"culture.key\"\r\n [ngClass]=\"'flags'\"\r\n >\r\n </fd-shellbar-action>\r\n } } @if (productSwitcher?.length) {\r\n <fd-product-switch>\r\n <fd-product-switch-body [products]=\"productSwitcher\" [forceListMode]=\"deviceSize === 's'\">\r\n </fd-product-switch-body>\r\n </fd-product-switch>\r\n }\r\n </fd-shellbar-actions>\r\n }\r\n</fd-shellbar>\r\n}\r\n<ng-template #loading>\r\n <bsu-mask></bsu-mask>\r\n</ng-template>\r\n\r\n<div\r\n class=\"tw-fixed tw-top-[38.5px] tw-h-[calc(100vh-38.5px)] tw-bg-white tw-transition-all tw-z-[100] tw-shadow-2xl tw-overflow-auto\"\r\n [class.!tw-right-0]=\"isOpenQuickAccess\"\r\n [ngClass]=\"isMobile ? 'tw-w-screen -tw-right-full' : 'tw-w-80 -tw-right-80'\"\r\n (click)=\"$event.stopPropagation()\"\r\n>\r\n <ng-container *ngTemplateOutlet=\"QuickAccessTemplate\"></ng-container>\r\n</div>\r\n\r\n@if(isOpenQuickAccess) {\r\n<div\r\n class=\"tw-fixed tw-right-0 tw-top-[38.5px] tw-h-[calc(100vh-38.5px)] tw-bg-slate-800/[.5] tw-z-[90] tw-w-screen tw-backdrop-blur-sm\"\r\n (click)=\"isOpenQuickAccess = false\"\r\n></div>\r\n}\r\n<fd-menu #menu>\r\n <ul fd-list>\r\n @for (culture of cultures | keyvalue; track culture) {\r\n <li fd-list-item>\r\n <a fd-list-link (click)=\"onCultureChange(culture.value)\">\r\n <span fd-list-title>\r\n <img width=\"14px\" height=\"12px\" [src]=\"'/assets/flags/' + culture.key + '.png'\" />\r\n <span class=\"culture-abbrivation\" [ngClass]=\"culture.key\"> {{ culture.key }}</span>\r\n </span>\r\n </a>\r\n </li>\r\n }\r\n </ul>\r\n</fd-menu>\r\n<ng-template #notificationGroupTpl let-notificationCount=\"notificationCount\">\r\n @if (!notifcationLoaded && notificationLoading === true) {\r\n <div style=\"position: relative; height: 100px\">\r\n <bsu-mask size=\"s\"></bsu-mask>\r\n </div>\r\n }\r\n <bt-notification-group\r\n [notifications]=\"notifications\"\r\n [notificationCount]=\"notificationCount\"\r\n [loading]=\"notificationLoading === true\"\r\n (viewed)=\"onNotificationItemViewed($event)\"\r\n (remove)=\"onRemoveNotifications($event)\"\r\n (showEvent)=\"popoverComponent.close(); onShowNotification($event)\"\r\n (actionClick)=\"popoverComponent.close(); onNotificationAction($event)\"\r\n (loadMore)=\"onNotificationLoadMore()\"\r\n [deviceSize]=\"deviceSize\"\r\n ></bt-notification-group>\r\n</ng-template>\r\n<ng-template #QuickAccessTemplate>\r\n @if (!notifcationLoaded && notificationLoading === true) {\r\n <div style=\"position: relative; height: 100px\">\r\n <bsu-mask size=\"s\"></bsu-mask>\r\n </div>\r\n }\r\n <bt-popover-app-finder (closeMenu)=\"isOpenQuickAccess = false\"></bt-popover-app-finder>\r\n</ng-template>\r\n\r\n<ng-template let-dialog let-dialogConfig=\"dialogConfig\" #notificationsDialog>\r\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\r\n <fd-dialog-header>\r\n <h1 id=\"fd-dialog-header-10\" fd-title>{{ 'Notification' | bbbTranslate }}</h1>\r\n <button fd-dialog-close-button (click)=\"dialog.dismiss()\"></button>\r\n </fd-dialog-header>\r\n <fd-dialog-body class=\"mobile\">\r\n <ng-container\r\n *ngTemplateOutlet=\"notificationGroupTpl; context: { notificationCount: notificationCount }\"\r\n ></ng-container>\r\n </fd-dialog-body>\r\n </fd-dialog>\r\n</ng-template>\r\n", styles: [":host{display:contents}:host ::ng-deep fd-shellbar-actions fd-avatar{background-color:transparent!important;color:var(--sapShell_InteractiveTextColor, #d1e8ff)}:host ::ng-deep fd-combobox .fd-input-group input{min-width:2rem;height:1.625rem;margin-top:.1875rem;margin-bottom:.1875rem;padding:0 .5rem;box-sizing:border-box}:host ::ng-deep fd-combobox .fd-input-group span{min-width:2rem;min-height:1.625rem}:host ::ng-deep .fd-shellbar__subtitle{font-size:1rem}:host ::ng-deep .fd-shellbar--s{padding:0}:host ::ng-deep .fd-shellbar--s ::ng-deep .fd-shellbar__subtitle{display:block;overflow:hidden;text-wrap:wrap;width:100%;word-break:break-all}:host ::ng-deep .fd-shellbar--s ::ng-deep .fd-shellbar__group.fd-shellbar__group--product{flex:1}:host ::ng-deep .fd-shellbar--s ::ng-deep .fd-shellbar__group.fd-shellbar__group--actions{max-width:120px}.fd-shellbar__logo{min-height:3rem;height:3rem;width:3rem}\n"] }]
2661
+ }], ctorParameters: () => [{ type: i1.NotificationService }, { type: i1$1.DialogService }, { type: Document, decorators: [{
2662
+ type: Inject,
2663
+ args: [DOCUMENT]
2664
+ }] }, { type: undefined, decorators: [{
2665
+ type: Inject,
2666
+ args: [APP_VERSION]
2667
+ }] }], propDecorators: { cssCustomUrl: [{
2668
+ type: Input
2669
+ }], cssUrl: [{
2670
+ type: Input
2671
+ }], allowAnonymous: [{
2672
+ type: Input
2673
+ }], multiLanguages: [{
2674
+ type: Input
2675
+ }], userLoggedIn: [{
2676
+ type: Input
2677
+ }], settings: [{
2678
+ type: Input
2679
+ }], productMenuControl: [{
2680
+ type: Input
2681
+ }], deviceSize: [{
2682
+ type: Input
2683
+ }], cultures: [{
2684
+ type: Input
2685
+ }], shellbarData: [{
2686
+ type: Input
2687
+ }], notificationCount: [{
2688
+ type: Input
2689
+ }], notifcationLoaded: [{
2690
+ type: Input
2691
+ }], notificationLoading: [{
2692
+ type: Input
2693
+ }], notifications: [{
2694
+ type: Input
2695
+ }], productMenuItems1: [{
2696
+ type: Input
2697
+ }], bodyClick: [{
2698
+ type: Input
2699
+ }], logo: [{
2700
+ type: Input
2701
+ }], actions: [{
2702
+ type: Input
2703
+ }], userMenu: [{
2704
+ type: Input
2705
+ }], productSwitcher: [{
2706
+ type: Input
2707
+ }], subtitle: [{
2708
+ type: Input
2709
+ }], isMobile: [{
2710
+ type: Input
2711
+ }], openNotificationPanel: [{
2712
+ type: Output
2713
+ }], openQuickAccessPanel: [{
2714
+ type: Output
2715
+ }], cultureChanged: [{
2716
+ type: Output
2717
+ }], notificationLoadMore: [{
2718
+ type: Output
2719
+ }], removeNotification: [{
2720
+ type: Output
2721
+ }], notifiationActionClick: [{
2722
+ type: Output
2723
+ }], notificationViewed: [{
2724
+ type: Output
2725
+ }], comboboxComponent: [{
2726
+ type: ViewChild,
2727
+ args: [ComboboxComponent]
2728
+ }], popoverComponent: [{
2729
+ type: ViewChild,
2730
+ args: ['popoverComponent', { static: false }]
2731
+ }], _notificationsDialog: [{
2732
+ type: ViewChild,
2733
+ args: ['notificationsDialog', { static: true, read: TemplateRef }]
2734
+ }] } });
2735
+
2736
+ class ShellbarComponent extends BaseComponent {
2737
+ get subtitle() {
2738
+ if (!this.shellbarData) {
2739
+ return '';
2740
+ }
2741
+ if (this._portalService.deviceSize === 's' && this.shellbarData.MobileSubtitle) {
2742
+ return this.shellbarData.MobileSubtitle
2743
+ ? `${this.shellbarData.MobileSubtitle} ${typeof this.shellbarData?.calcSubtitle === 'string' ? this.shellbarData.calcSubtitle : ''}`
2744
+ : '';
2745
+ }
2746
+ return this.shellbarData.Subtitle
2747
+ ? `${this.shellbarData?.Subtitle} ${typeof this.shellbarData?.calcSubtitle === 'string' ? this.shellbarData.calcSubtitle : ''}`
2748
+ : '';
2749
+ }
2750
+ get logo() {
2751
+ return this.shellbarData?.Logo;
2752
+ }
2753
+ get actions() {
2754
+ return this.settings?.HideUserMenu ? [] : this.shellbarData?.ActionItems?.MoDataList ?? [];
2755
+ }
2756
+ get userMenu() {
2757
+ const moDataList = BarsaApi.Common.Util.TryGetValue(this.shellbarData, 'UserMenuItems.MoDataList');
2758
+ const items = moDataList ? [...moDataList] : [];
2759
+ if (!items.length) {
2760
+ return [];
2761
+ }
2762
+ items.forEach((c) => {
2763
+ c.text = this._bbbTranslatePipe.transform(c.text);
2764
+ c.callback = new Function(c.Code + this.bodyClick);
2765
+ });
2766
+ if (!BarsaApi.LoginFormData.IsAnonymous && BarsaApi.LoginFormData.IsUserLoggedIn) {
2767
+ items.splice(0, 0, { Id: '-1', $Caption: '', text: BarsaApi.LoginFormData.UserDisplayName });
2768
+ }
2769
+ return this.settings?.HideUserMenu ? [] : items;
2770
+ }
2771
+ get productSwitcher() {
2772
+ return (this.shellbarData?.ProductSwitchItems?.MoDataList ?? []);
2773
+ }
2774
+ get multiLanguages() {
2775
+ return this.shellbarData?.MultiLanguages;
2776
+ }
2777
+ get productMenuItems() {
2778
+ const items = this.shellbarData?.ProductMenuItems?.MoDataList ?? [];
2779
+ items.forEach((c) => (c.callback = new Function(c.Code + this.bodyClick)));
2780
+ return items;
2781
+ }
2782
+ constructor(_bbbTranslatePipe, _portalService, _breadCrumbService, _tilesService, _cdr, _domSanitizer, _notificationService, appVersion) {
2783
+ super();
2784
+ this._bbbTranslatePipe = _bbbTranslatePipe;
2785
+ this._portalService = _portalService;
2786
+ this._breadCrumbService = _breadCrumbService;
2787
+ this._tilesService = _tilesService;
2788
+ this._cdr = _cdr;
2789
+ this._domSanitizer = _domSanitizer;
2790
+ this._notificationService = _notificationService;
2791
+ this.appVersion = appVersion;
2792
+ this.isOpenNotificatoin = false;
2793
+ this.user = {
2794
+ initials: 'WW',
2795
+ colorAccent: 1
2796
+ };
2797
+ this.allowAnonymous = true;
2798
+ this.notifcationLoaded = false;
2799
+ this._viewedNotifications$ = new Subject();
2800
+ this._viewedNotifications = [];
2801
+ this.bodyClick = ';$("body").click()';
2802
+ this.isMobile = getDeviceIsMobile();
2803
+ this.onOpenNotification = () => {
2804
+ this.isOpenNotificatoin = true;
2805
+ this._handleOpenNotificationPanel();
2806
+ };
2807
+ this.onCultureChanged = (culture) => {
2808
+ this._changeCulture(culture);
2809
+ };
2810
+ this.userLoggedIn$ = this._portalService.userLoggedIn$;
2811
+ this.notifiationCountLoaded$ = this._notificationService.notificationCountLoaded$;
2812
+ this._viewedNotifications$
2813
+ .pipe(takeUntil(this._onDestroy$), tap((item) => this._viewedNotifications.push(item)), map((item) => this._viewedNotifications), debounceTime(2000), map((items) => items.map((item) => item.Tag)))
2814
+ .subscribe((tags) => {
2815
+ this._viewedNotifications = [];
2816
+ this._notificationService.setNotificationViewed(tags);
2817
+ });
2818
+ }
2819
+ ngOnInit() {
2820
+ super.ngOnInit();
2821
+ this.cultures = BarsaApi.LoginFormData.Cultures;
2822
+ this.cssUrl$ = this._portalService.cssUrl$;
2823
+ this.cssCustomUrl$ = this._portalService.cssCustomUrl$;
2824
+ this.notificationsCount$ = this._notificationService.notificationCount$;
2825
+ this._notificationService.notificationCount$.subscribe(() => this._cdr.detectChanges());
2826
+ this.notificationLoading$ = this._notificationService.notificationLoading$;
2827
+ this.notifications$ = this._notificationService.notifications$.pipe(takeUntil(this._onDestroy$), map((notifications) => this._mapNotifications(notifications)));
2828
+ BarsaApi.Bw.SetUserPortalSettings = (userPortalSettings) => {
2829
+ this._portalService.setUserPortalSettings(userPortalSettings);
2830
+ };
2831
+ BarsaApi.Bw.SetShellbarSubtitle = (calcSubtitle) => {
2832
+ this.shellbarData.calcSubtitle = calcSubtitle;
2833
+ this._cdr.detectChanges();
2834
+ };
2835
+ this.deviceSize$ = this._portalService.deviceSize$.pipe(takeUntil(this._onDestroy$));
2836
+ this._breadCrumbService.breadcrumbs$.pipe(takeUntil(this._onDestroy$)).subscribe((breadCrumbs) => {
2837
+ if (breadCrumbs.length > 0) {
2838
+ this.productMenuControl = breadCrumbs[breadCrumbs.length - 1].label;
2839
+ }
2840
+ this._cdr.detectChanges();
2841
+ });
2842
+ this._tilesService.shellbar$.pipe(takeUntil(this._onDestroy$)).subscribe((mo) => {
2843
+ this.shellbarData = mo;
2844
+ // this._cdr.detectChanges();
2845
+ forkJoin([of(this.productMenuItems), of([])]) // to append user defined
2846
+ .pipe(takeUntil(this._onDestroy$), map(([s1, s2]) => [...s1, ...s2]))
2847
+ .subscribe((c) => {
2848
+ this.productMenuItems1 = c;
2849
+ this._cdr.detectChanges();
2850
+ });
2851
+ });
2852
+ if (this.allowAnonymous) {
2853
+ this._tilesService.loadShellbar();
2854
+ }
2855
+ this._portalService.userLoggedIn$.pipe(takeUntil(this._onDestroy$)).subscribe((loggedIn) => {
2856
+ if (!loggedIn) {
2857
+ return;
2858
+ }
2859
+ this._tilesService.loadShellbar();
2860
+ this._notificationService.loadUnreadNotificationCount();
2861
+ });
2862
+ }
2863
+ onCultureChange(culture) {
2864
+ this._changeCulture(culture);
2865
+ }
2866
+ onShowNotification(e) {
2867
+ this.isOpenNotificatoin = false;
2868
+ this._notificationService.ShowNotificationRelatedMo(e);
2869
+ }
2870
+ onNotificationItemViewed(viewedMo) {
2871
+ this._viewedNotifications$.next(viewedMo);
2872
+ }
2873
+ onRemoveNotifications(e) {
2874
+ this._notificationService.removeNotification(e.items);
2875
+ }
2876
+ onNotificationAction(e) {
2877
+ this._portalService.ExecuteNotificationAction(e.item.Tag, e.btn.Title);
2878
+ }
2879
+ onNotificationLoadMore() {
2880
+ this._notificationService.loadMore();
2881
+ }
2882
+ onNotificationWorkflowChoiceSuccess(result) { }
2883
+ onNotificationWorkflowChoiceFailed(err) { }
2884
+ onHandleOpenNotificationPanel() {
2885
+ this._handleOpenNotificationPanel();
2886
+ }
2887
+ _handleOpenNotificationPanel() {
2888
+ if (this.notifcationLoaded) {
2889
+ return;
2890
+ }
2891
+ this.notifcationLoaded = true;
2892
+ this._notificationService.loadNotifications();
2893
+ }
2894
+ _mapNotifications(notifications) {
2895
+ return notifications.map((notification) => ({
2896
+ ...notification,
2897
+ contentSafeHtml: notification.Content
2898
+ ? this._domSanitizer.bypassSecurityTrustHtml(notification.Content)
2899
+ : ''
2900
+ }));
2901
+ }
2902
+ _changeCulture(culture /* culture sample :English */) {
2903
+ BarsaApi.Bw.SetCultureByDisplayName(culture);
2904
+ BarsaApi.Bw.NavigateTo('/');
2905
+ }
2906
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: ShellbarComponent, deps: [{ token: i1.BbbTranslatePipe }, { token: i1.PortalService }, { token: i1.BreadcrumbService }, { token: TilesService }, { token: i0.ChangeDetectorRef }, { token: i3$4.DomSanitizer }, { token: i1.NotificationService }, { token: APP_VERSION }], target: i0.ɵɵFactoryTarget.Component }); }
2907
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: ShellbarComponent, selector: "bt-shellbar", viewQueries: [{ propertyName: "comboboxComponent", first: true, predicate: ComboboxComponent, descendants: true }, { propertyName: "popoverComponent", first: true, predicate: ["popoverComponent"], descendants: true }, { propertyName: "_notificationsDialog", first: true, predicate: ["notificationsDialog"], descendants: true, read: TemplateRef, static: true }], usesInheritance: true, ngImport: i0, template: "@if (userLoggedIn$ | async; as userloggend) { @if (notifiationCountLoaded$ | async; as notifiationCountLoaded) { @if\r\n(deviceSize$ | async; as deviceSize) { @if (shellbarData) {\r\n<bt-barsa-shellbar\r\n [cssUrl]=\"cssUrl$ | async\"\r\n [cssCustomUrl]=\"cssCustomUrl$ | async\"\r\n [userLoggedIn]=\"true\"\r\n [allowAnonymous]=\"allowAnonymous\"\r\n [deviceSize]=\"deviceSize\"\r\n [shellbarData]=\"shellbarData\"\r\n [productMenuControl]=\"productMenuControl\"\r\n [settings]=\"settings\"\r\n [isMobile]=\"isMobile\"\r\n [multiLanguages]=\"multiLanguages\"\r\n [notificationCount]=\"(notificationsCount$ | async)!!\"\r\n [notifications]=\"(notifications$ | async) ?? []\"\r\n [notifcationLoaded]=\"notifcationLoaded\"\r\n [notificationLoading]=\"(notificationLoading$ | async) === true\"\r\n [cultures]=\"cultures\"\r\n [logo]=\"logo\"\r\n [actions]=\"actions\"\r\n [userMenu]=\"userMenu\"\r\n [productSwitcher]=\"productSwitcher\"\r\n [subtitle]=\"subtitle\"\r\n [productMenuItems1]=\"productMenuItems1\"\r\n (cultureChanged)=\"onCultureChanged($event)\"\r\n (notificationViewed)=\"onNotificationItemViewed($event)\"\r\n (notifiationActionClick)=\"onNotificationAction($event)\"\r\n (removeNotification)=\"onRemoveNotifications($event)\"\r\n (notificationLoadMore)=\"onNotificationLoadMore()\"\r\n (openNotificationPanel)=\"onHandleOpenNotificationPanel()\"\r\n>\r\n</bt-barsa-shellbar>\r\n} } } } @else { @if (notificationsCount$ | async; as notificationCount) {\r\n<bt-barsa-shellbar\r\n [cssUrl]=\"''\"\r\n [cssCustomUr]=\"''\"\r\n [userLoggedIn]=\"false\"\r\n [multiLanguages]=\"multiLanguages\"\r\n [userMenu]=\"userMenu\"\r\n [logo]=\"logo\"\r\n [productMenuItems1]=\"productMenuItems1\"\r\n [allowAnonymous]=\"allowAnonymous\"\r\n [deviceSize]=\"(deviceSize$ | async)!!\"\r\n [shellbarData]=\"shellbarData\"\r\n [cultures]=\"cultures\"\r\n [logo]=\"logo\"\r\n [actions]=\"actions\"\r\n [userMenu]=\"userMenu\"\r\n [productMenuControl]=\"productMenuControl\"\r\n [productSwitcher]=\"productSwitcher\"\r\n [subtitle]=\"subtitle\"\r\n [settings]=\"settings\"\r\n [notificationCount]=\"{ unread: 0, all: 0 }\"\r\n [notifications]=\"[]\"\r\n [notifcationLoaded]=\"true\"\r\n [notificationLoading]=\"false\"\r\n [cultures]=\"cultures\"\r\n [productMenuItems1]=\"productMenuItems1\"\r\n (cultureChanged)=\"onCultureChanged($event)\"\r\n>\r\n</bt-barsa-shellbar>\r\n} }\r\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "component", type: BarsaShellbarComponent, selector: "bt-barsa-shellbar", inputs: ["cssCustomUrl", "cssUrl", "allowAnonymous", "multiLanguages", "userLoggedIn", "settings", "productMenuControl", "deviceSize", "cultures", "shellbarData", "notificationCount", "notifcationLoaded", "notificationLoading", "notifications", "productMenuItems1", "bodyClick", "logo", "actions", "userMenu", "productSwitcher", "subtitle", "isMobile"], outputs: ["openNotificationPanel", "openQuickAccessPanel", "cultureChanged", "notificationLoadMore", "removeNotification", "notifiationActionClick", "notificationViewed"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2908
+ }
2909
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: ShellbarComponent, decorators: [{
2910
+ type: Component,
2911
+ args: [{ selector: 'bt-shellbar', changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (userLoggedIn$ | async; as userloggend) { @if (notifiationCountLoaded$ | async; as notifiationCountLoaded) { @if\r\n(deviceSize$ | async; as deviceSize) { @if (shellbarData) {\r\n<bt-barsa-shellbar\r\n [cssUrl]=\"cssUrl$ | async\"\r\n [cssCustomUrl]=\"cssCustomUrl$ | async\"\r\n [userLoggedIn]=\"true\"\r\n [allowAnonymous]=\"allowAnonymous\"\r\n [deviceSize]=\"deviceSize\"\r\n [shellbarData]=\"shellbarData\"\r\n [productMenuControl]=\"productMenuControl\"\r\n [settings]=\"settings\"\r\n [isMobile]=\"isMobile\"\r\n [multiLanguages]=\"multiLanguages\"\r\n [notificationCount]=\"(notificationsCount$ | async)!!\"\r\n [notifications]=\"(notifications$ | async) ?? []\"\r\n [notifcationLoaded]=\"notifcationLoaded\"\r\n [notificationLoading]=\"(notificationLoading$ | async) === true\"\r\n [cultures]=\"cultures\"\r\n [logo]=\"logo\"\r\n [actions]=\"actions\"\r\n [userMenu]=\"userMenu\"\r\n [productSwitcher]=\"productSwitcher\"\r\n [subtitle]=\"subtitle\"\r\n [productMenuItems1]=\"productMenuItems1\"\r\n (cultureChanged)=\"onCultureChanged($event)\"\r\n (notificationViewed)=\"onNotificationItemViewed($event)\"\r\n (notifiationActionClick)=\"onNotificationAction($event)\"\r\n (removeNotification)=\"onRemoveNotifications($event)\"\r\n (notificationLoadMore)=\"onNotificationLoadMore()\"\r\n (openNotificationPanel)=\"onHandleOpenNotificationPanel()\"\r\n>\r\n</bt-barsa-shellbar>\r\n} } } } @else { @if (notificationsCount$ | async; as notificationCount) {\r\n<bt-barsa-shellbar\r\n [cssUrl]=\"''\"\r\n [cssCustomUr]=\"''\"\r\n [userLoggedIn]=\"false\"\r\n [multiLanguages]=\"multiLanguages\"\r\n [userMenu]=\"userMenu\"\r\n [logo]=\"logo\"\r\n [productMenuItems1]=\"productMenuItems1\"\r\n [allowAnonymous]=\"allowAnonymous\"\r\n [deviceSize]=\"(deviceSize$ | async)!!\"\r\n [shellbarData]=\"shellbarData\"\r\n [cultures]=\"cultures\"\r\n [logo]=\"logo\"\r\n [actions]=\"actions\"\r\n [userMenu]=\"userMenu\"\r\n [productMenuControl]=\"productMenuControl\"\r\n [productSwitcher]=\"productSwitcher\"\r\n [subtitle]=\"subtitle\"\r\n [settings]=\"settings\"\r\n [notificationCount]=\"{ unread: 0, all: 0 }\"\r\n [notifications]=\"[]\"\r\n [notifcationLoaded]=\"true\"\r\n [notificationLoading]=\"false\"\r\n [cultures]=\"cultures\"\r\n [productMenuItems1]=\"productMenuItems1\"\r\n (cultureChanged)=\"onCultureChanged($event)\"\r\n>\r\n</bt-barsa-shellbar>\r\n} }\r\n", styles: [":host{display:block}\n"] }]
2912
+ }], ctorParameters: () => [{ type: i1.BbbTranslatePipe }, { type: i1.PortalService }, { type: i1.BreadcrumbService }, { type: TilesService }, { type: i0.ChangeDetectorRef }, { type: i3$4.DomSanitizer }, { type: i1.NotificationService }, { type: undefined, decorators: [{
2913
+ type: Inject,
2914
+ args: [APP_VERSION]
2915
+ }] }], propDecorators: { comboboxComponent: [{
2916
+ type: ViewChild,
2917
+ args: [ComboboxComponent]
2918
+ }], popoverComponent: [{
2919
+ type: ViewChild,
2920
+ args: ['popoverComponent', { static: false }]
2921
+ }], _notificationsDialog: [{
2922
+ type: ViewChild,
2923
+ args: ['notificationsDialog', { static: true, read: TemplateRef }]
2924
+ }] } });
2925
+
2926
+ class TileHomeFilterPipe {
2927
+ transform(collection) {
2928
+ return collection.filter((val) => this.matchFilter(val));
2929
+ }
2930
+ matchFilter(value) {
2931
+ const match = Object.keys(value.Data).some((key) => {
2932
+ if (key.startsWith('$')) {
2933
+ return false;
2934
+ }
2935
+ if (key.startsWith('c')) {
2936
+ return BarsaApi.Common.Util.TryGetValue(value, 'Data.' + key);
2937
+ }
2938
+ });
2939
+ return match;
2940
+ }
2941
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TileHomeFilterPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
2942
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.5", ngImport: i0, type: TileHomeFilterPipe, name: "tileHomeFilter" }); }
2943
+ }
2944
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TileHomeFilterPipe, decorators: [{
2945
+ type: Pipe,
2946
+ args: [{
2947
+ name: 'tileHomeFilter'
2948
+ }]
2949
+ }] });
2950
+
2951
+ class GroupTilesPipe {
2952
+ transform(appGroup) {
2953
+ const predefineTiles = appGroup.AppTiles;
2954
+ if (predefineTiles?.length === 0) {
2955
+ return of([]);
2956
+ }
2957
+ const predefine$ = of(predefineTiles);
2958
+ const userDefine$ = of(appGroup.UserAppTileGroupSetting?.UserAppTilesSetting?.MoDataList);
2959
+ return forkJoin([predefine$, userDefine$]).pipe(map(([s1, s2]) => [...s1, ...s2]), map((arrTiles) => {
2960
+ const tempTiles = arrTiles.filter((c) => c.Visible).sort((a, b) => (a.OrderItem > b.OrderItem ? 1 : 0));
2961
+ const group = { ...appGroup };
2962
+ group.Title = BarsaApi.Common.Util.TryGetValue(group, 'UserAppTileGroupSetting.Title', group.Title);
2963
+ group.OrderItem = BarsaApi.Common.Util.TryGetValue(group, 'UserAppTileGroupSetting.OrderItem', group.OrderItem);
2964
+ return tempTiles;
2965
+ }), shareReplay(1));
2966
+ }
2967
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: GroupTilesPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
2968
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.5", ngImport: i0, type: GroupTilesPipe, name: "groupTiles" }); }
2969
+ }
2970
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: GroupTilesPipe, decorators: [{
2971
+ type: Pipe,
2972
+ args: [{
2973
+ name: 'groupTiles'
2974
+ }]
2975
+ }] });
2976
+
2977
+ class HomeGroupPipe {
2978
+ constructor() { }
2979
+ transform(appGroups) {
2980
+ return appGroups.filter((c) => c.navigatorTiles && c.navigatorTiles.length > 0);
2981
+ }
2982
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: HomeGroupPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
2983
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.5", ngImport: i0, type: HomeGroupPipe, name: "homeGroup" }); }
2984
+ }
2985
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: HomeGroupPipe, decorators: [{
2986
+ type: Pipe,
2987
+ args: [{
2988
+ name: 'homeGroup'
2989
+ }]
2990
+ }], ctorParameters: () => [] });
2991
+
2992
+ class ActionLinksPipe {
2993
+ transform(tiles) {
2994
+ return tiles.filter((tile) => tile.IsActionLink);
2995
+ }
2996
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: ActionLinksPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
2997
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.5", ngImport: i0, type: ActionLinksPipe, name: "actionLinks" }); }
2998
+ }
2999
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: ActionLinksPipe, decorators: [{
3000
+ type: Pipe,
3001
+ args: [{
3002
+ name: 'actionLinks'
3003
+ }]
3004
+ }] });
3005
+
3006
+ const components = [
3007
+ ShellbarComponent,
3008
+ SimpleTileComponent,
3009
+ TilesViewerComponent,
3010
+ ProfileTileComponent,
3011
+ FeedTileComponent,
3012
+ FooterTileComponent,
3013
+ TileComponent,
3014
+ LogoTileComponent,
3015
+ NumericTileComponent,
3016
+ FooterEditTileComponent,
3017
+ FormAppFinderComponent,
3018
+ PinTileComponent,
3019
+ ChangeAppTileComponent,
3020
+ CreateAppGroupComponent,
3021
+ MicroTileChartAreaComponent,
3022
+ MicroTileChartCircularComponent,
3023
+ MicroTileChartLineComponent,
3024
+ MicroTileChartStackbarComponent,
3025
+ MicroTileChartComparisonComponent,
3026
+ MicroTileChartBarComponent,
3027
+ MicroTileChartBulletComponent,
3028
+ TilesViewerContainerComponent,
3029
+ NewsTileComponent,
3030
+ ActionsLinkComponent,
3031
+ ActionItemComponent,
3032
+ AppFinderComponent,
3033
+ AppFinderGroupComponent,
3034
+ AppFinderAppListComponent,
3035
+ TilesViewerGroupComponent,
3036
+ FormTileComponent,
3037
+ BarsaShellbarComponent,
3038
+ PopoverAppFinderComponent
3039
+ ];
3040
+ const pipes = [GroupTilesPipe, TileHomeFilterPipe, HomeGroupPipe, ActionLinksPipe, TilePropPipe];
3041
+ const directives = [EmptyListDirective, TileRendererDirective, TileStyleDirective];
3042
+ class BarsaTilesModule extends BaseModule {
3043
+ constructor(dcm, componentFactoryResolver) {
3044
+ super(dcm, componentFactoryResolver, 'BarsaTilesModule');
3045
+ this.dcm = dcm;
3046
+ this.componentFactoryResolver = componentFactoryResolver;
3047
+ this.dynamicComponents = [...components];
3048
+ }
3049
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: BarsaTilesModule, deps: [{ token: i1.DynamicComponentService }, { token: i0.ComponentFactoryResolver }], target: i0.ɵɵFactoryTarget.NgModule }); }
3050
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.5", ngImport: i0, type: BarsaTilesModule, declarations: [ShellbarComponent,
3051
+ SimpleTileComponent,
3052
+ TilesViewerComponent,
3053
+ ProfileTileComponent,
3054
+ FeedTileComponent,
3055
+ FooterTileComponent,
3056
+ TileComponent,
3057
+ LogoTileComponent,
3058
+ NumericTileComponent,
3059
+ FooterEditTileComponent,
3060
+ FormAppFinderComponent,
3061
+ PinTileComponent,
3062
+ ChangeAppTileComponent,
3063
+ CreateAppGroupComponent,
3064
+ MicroTileChartAreaComponent,
3065
+ MicroTileChartCircularComponent,
3066
+ MicroTileChartLineComponent,
3067
+ MicroTileChartStackbarComponent,
3068
+ MicroTileChartComparisonComponent,
3069
+ MicroTileChartBarComponent,
3070
+ MicroTileChartBulletComponent,
3071
+ TilesViewerContainerComponent,
3072
+ NewsTileComponent,
3073
+ ActionsLinkComponent,
3074
+ ActionItemComponent,
3075
+ AppFinderComponent,
3076
+ AppFinderGroupComponent,
3077
+ AppFinderAppListComponent,
3078
+ TilesViewerGroupComponent,
3079
+ FormTileComponent,
3080
+ BarsaShellbarComponent,
3081
+ PopoverAppFinderComponent, GroupTilesPipe, TileHomeFilterPipe, HomeGroupPipe, ActionLinksPipe, TilePropPipe, EmptyListDirective, TileRendererDirective, TileStyleDirective, NotificationGroupComponent,
3082
+ NotificationGroupHeaderComponent], imports: [CommonModule,
3083
+ FormsModule,
3084
+ DragDropModule,
3085
+ CdkTableModule,
3086
+ FundamentalNgxCoreModule,
3087
+ GridListModule,
3088
+ ReactiveFormsModule,
3089
+ BarsaNovinRayCoreModule,
3090
+ BarsaSapUiModule,
3091
+ BarsaEchartsModule,
3092
+ IconTabBarComponent,
3093
+ IconTabBarTabComponent,
3094
+ IconTabBarTabContentDirective,
3095
+ FilterAppsGroupedPipe,
3096
+ FilterAppsPipe], exports: [ShellbarComponent,
3097
+ SimpleTileComponent,
3098
+ TilesViewerComponent,
3099
+ ProfileTileComponent,
3100
+ FeedTileComponent,
3101
+ FooterTileComponent,
3102
+ TileComponent,
3103
+ LogoTileComponent,
3104
+ NumericTileComponent,
3105
+ FooterEditTileComponent,
3106
+ FormAppFinderComponent,
3107
+ PinTileComponent,
3108
+ ChangeAppTileComponent,
3109
+ CreateAppGroupComponent,
3110
+ MicroTileChartAreaComponent,
3111
+ MicroTileChartCircularComponent,
3112
+ MicroTileChartLineComponent,
3113
+ MicroTileChartStackbarComponent,
3114
+ MicroTileChartComparisonComponent,
3115
+ MicroTileChartBarComponent,
3116
+ MicroTileChartBulletComponent,
3117
+ TilesViewerContainerComponent,
3118
+ NewsTileComponent,
3119
+ ActionsLinkComponent,
3120
+ ActionItemComponent,
3121
+ AppFinderComponent,
3122
+ AppFinderGroupComponent,
3123
+ AppFinderAppListComponent,
3124
+ TilesViewerGroupComponent,
3125
+ FormTileComponent,
3126
+ BarsaShellbarComponent,
3127
+ PopoverAppFinderComponent] }); }
3128
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: BarsaTilesModule, providers: [TilesService, AppFinderService, LowerCasePipe], imports: [CommonModule,
3129
+ FormsModule,
3130
+ DragDropModule,
3131
+ CdkTableModule,
3132
+ FundamentalNgxCoreModule,
3133
+ GridListModule,
3134
+ ReactiveFormsModule,
3135
+ BarsaNovinRayCoreModule,
3136
+ BarsaSapUiModule,
3137
+ BarsaEchartsModule,
3138
+ IconTabBarComponent,
3139
+ IconTabBarTabComponent] }); }
3140
+ }
3141
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: BarsaTilesModule, decorators: [{
3142
+ type: NgModule,
3143
+ args: [{
3144
+ schemas: [NO_ERRORS_SCHEMA],
3145
+ imports: [
3146
+ CommonModule,
3147
+ FormsModule,
3148
+ DragDropModule,
3149
+ CdkTableModule,
3150
+ FundamentalNgxCoreModule,
3151
+ GridListModule,
3152
+ ReactiveFormsModule,
3153
+ BarsaNovinRayCoreModule,
3154
+ BarsaSapUiModule,
3155
+ BarsaEchartsModule,
3156
+ IconTabBarComponent,
3157
+ IconTabBarTabComponent,
3158
+ IconTabBarTabContentDirective,
3159
+ FilterAppsGroupedPipe,
3160
+ FilterAppsPipe
3161
+ ],
3162
+ providers: [TilesService, AppFinderService, LowerCasePipe],
3163
+ declarations: [
3164
+ ...components,
3165
+ ...pipes,
3166
+ ...directives,
3167
+ NotificationGroupComponent,
3168
+ NotificationGroupHeaderComponent
3169
+ ],
3170
+ exports: [...components]
3171
+ }]
3172
+ }], ctorParameters: () => [{ type: i1.DynamicComponentService }, { type: i0.ComponentFactoryResolver }] });
3173
+
3174
+ /**
3175
+ * Generated bundle index. Do not edit.
3176
+ */
3177
+
3178
+ export { ActionItemComponent, ActionsLinkComponent, AppFinderAppListComponent, AppFinderComponent, AppFinderGroupComponent, BarsaShellbarComponent, BarsaTilesModule, ChangeAppTileComponent, CreateAppGroupComponent, FeedTileComponent, FooterEditTileComponent, FooterTileComponent, FormAppFinderComponent, FormTileComponent, GroupTilesPipe, LogoTileComponent, MicroTileChartAreaComponent, MicroTileChartBarComponent, MicroTileChartBulletComponent, MicroTileChartCircularComponent, MicroTileChartComparisonComponent, MicroTileChartLineComponent, MicroTileChartStackbarComponent, NewsTileComponent, NumericTileComponent, PinTileComponent, PopoverAppFinderComponent, ProfileTileComponent, ShellbarComponent, SimpleTileComponent, TileComponent, TileHomeFilterPipe, TilePropPipe, TilesService, TilesViewerComponent, TilesViewerContainerComponent, TilesViewerGroupComponent, TilesViewerService };
3179
+ //# sourceMappingURL=barsa-tiles.mjs.map