barsa-tiles 1.0.456 → 1.0.457

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