@memberjunction/ng-explorer-core 6.2.0-edge.0 → 6.2.0-edge.1
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.
- package/dist/app-routing.module.d.ts +23 -1
- package/dist/app-routing.module.d.ts.map +1 -1
- package/dist/app-routing.module.js +50 -14
- package/dist/app-routing.module.js.map +1 -1
- package/dist/lib/command-palette/command-palette.component.d.ts +7 -1
- package/dist/lib/command-palette/command-palette.component.d.ts.map +1 -1
- package/dist/lib/command-palette/command-palette.component.js +28 -14
- package/dist/lib/command-palette/command-palette.component.js.map +1 -1
- package/dist/lib/conversation-feedback/conversation-feedback.d.ts +103 -13
- package/dist/lib/conversation-feedback/conversation-feedback.d.ts.map +1 -1
- package/dist/lib/conversation-feedback/conversation-feedback.js +219 -67
- package/dist/lib/conversation-feedback/conversation-feedback.js.map +1 -1
- package/dist/lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component.d.ts +64 -10
- package/dist/lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component.d.ts.map +1 -1
- package/dist/lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component.js +172 -66
- package/dist/lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component.js.map +1 -1
- package/dist/lib/generic/resource-container-component.d.ts +19 -5
- package/dist/lib/generic/resource-container-component.d.ts.map +1 -1
- package/dist/lib/generic/resource-container-component.js +43 -13
- package/dist/lib/generic/resource-container-component.js.map +1 -1
- package/dist/lib/guards/entities.guard.d.ts +4 -0
- package/dist/lib/guards/entities.guard.d.ts.map +1 -1
- package/dist/lib/guards/entities.guard.js +10 -2
- package/dist/lib/guards/entities.guard.js.map +1 -1
- package/dist/lib/identity-claims/claim-redeem.component.d.ts +4 -0
- package/dist/lib/identity-claims/claim-redeem.component.d.ts.map +1 -1
- package/dist/lib/identity-claims/claim-redeem.component.js +10 -2
- package/dist/lib/identity-claims/claim-redeem.component.js.map +1 -1
- package/dist/lib/oauth/oauth-callback.component.d.ts +4 -0
- package/dist/lib/oauth/oauth-callback.component.d.ts.map +1 -1
- package/dist/lib/oauth/oauth-callback.component.js +10 -2
- package/dist/lib/oauth/oauth-callback.component.js.map +1 -1
- package/dist/lib/profile/profile-dialog.component.d.ts.map +1 -1
- package/dist/lib/profile/profile-dialog.component.js +194 -191
- package/dist/lib/profile/profile-dialog.component.js.map +1 -1
- package/dist/lib/resource-wrappers/artifact-resource.component.d.ts +20 -2
- package/dist/lib/resource-wrappers/artifact-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/artifact-resource.component.js +33 -9
- package/dist/lib/resource-wrappers/artifact-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/chat-collections-resource.component.d.ts +80 -10
- package/dist/lib/resource-wrappers/chat-collections-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/chat-collections-resource.component.js +168 -56
- package/dist/lib/resource-wrappers/chat-collections-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/chat-conversations-resource.component.d.ts +186 -23
- package/dist/lib/resource-wrappers/chat-conversations-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/chat-conversations-resource.component.js +500 -177
- package/dist/lib/resource-wrappers/chat-conversations-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/chat-deeplink-params.d.ts +2 -0
- package/dist/lib/resource-wrappers/chat-deeplink-params.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/chat-deeplink-params.js +5 -1
- package/dist/lib/resource-wrappers/chat-deeplink-params.js.map +1 -1
- package/dist/lib/resource-wrappers/chat-search-routing.d.ts +25 -0
- package/dist/lib/resource-wrappers/chat-search-routing.d.ts.map +1 -0
- package/dist/lib/resource-wrappers/chat-search-routing.js +24 -0
- package/dist/lib/resource-wrappers/chat-search-routing.js.map +1 -0
- package/dist/lib/resource-wrappers/chat-tasks-resource.component.d.ts +14 -2
- package/dist/lib/resource-wrappers/chat-tasks-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/chat-tasks-resource.component.js +32 -8
- package/dist/lib/resource-wrappers/chat-tasks-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/dashboard-resource.component.d.ts +54 -8
- package/dist/lib/resource-wrappers/dashboard-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/dashboard-resource.component.js +138 -46
- package/dist/lib/resource-wrappers/dashboard-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/livekit-room-resource.component.d.ts +223 -30
- package/dist/lib/resource-wrappers/livekit-room-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/livekit-room-resource.component.js +438 -118
- package/dist/lib/resource-wrappers/livekit-room-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/search-results-resource.component.d.ts +7 -3
- package/dist/lib/resource-wrappers/search-results-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/search-results-resource.component.js +23 -15
- package/dist/lib/resource-wrappers/search-results-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/view-resource.component.d.ts +68 -10
- package/dist/lib/resource-wrappers/view-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/view-resource.component.js +178 -62
- package/dist/lib/resource-wrappers/view-resource.component.js.map +1 -1
- package/dist/lib/services/startup-validation.service.d.ts +4 -0
- package/dist/lib/services/startup-validation.service.d.ts.map +1 -1
- package/dist/lib/services/startup-validation.service.js +10 -2
- package/dist/lib/services/startup-validation.service.js.map +1 -1
- package/dist/lib/services/system-validation.service.d.ts +13 -1
- package/dist/lib/services/system-validation.service.d.ts.map +1 -1
- package/dist/lib/services/system-validation.service.js +29 -5
- package/dist/lib/services/system-validation.service.js.map +1 -1
- package/dist/lib/shell/components/dialogs/app-access-dialog.component.d.ts +54 -4
- package/dist/lib/shell/components/dialogs/app-access-dialog.component.d.ts.map +1 -1
- package/dist/lib/shell/components/dialogs/app-access-dialog.component.js +130 -40
- package/dist/lib/shell/components/dialogs/app-access-dialog.component.js.map +1 -1
- package/dist/lib/shell/components/header/app-nav.component.d.ts +29 -1
- package/dist/lib/shell/components/header/app-nav.component.d.ts.map +1 -1
- package/dist/lib/shell/components/header/app-nav.component.js +56 -12
- package/dist/lib/shell/components/header/app-nav.component.js.map +1 -1
- package/dist/lib/shell/components/header/app-switcher.component.d.ts +33 -5
- package/dist/lib/shell/components/header/app-switcher.component.d.ts.map +1 -1
- package/dist/lib/shell/components/header/app-switcher.component.js +85 -29
- package/dist/lib/shell/components/header/app-switcher.component.js.map +1 -1
- package/dist/lib/shell/components/record-open/record-origin-crumb.component.js +1 -1
- package/dist/lib/shell/components/record-open/record-origin-crumb.component.js.map +1 -1
- package/dist/lib/shell/components/tabs/component-cache-manager.d.ts +50 -6
- package/dist/lib/shell/components/tabs/component-cache-manager.d.ts.map +1 -1
- package/dist/lib/shell/components/tabs/component-cache-manager.js +95 -22
- package/dist/lib/shell/components/tabs/component-cache-manager.js.map +1 -1
- package/dist/lib/shell/components/tabs/tab-container.component.d.ts +91 -9
- package/dist/lib/shell/components/tabs/tab-container.component.d.ts.map +1 -1
- package/dist/lib/shell/components/tabs/tab-container.component.js +257 -101
- package/dist/lib/shell/components/tabs/tab-container.component.js.map +1 -1
- package/dist/lib/shell/loading-themes.d.ts +16 -12
- package/dist/lib/shell/loading-themes.d.ts.map +1 -1
- package/dist/lib/shell/loading-themes.js +145 -137
- package/dist/lib/shell/loading-themes.js.map +1 -1
- package/dist/lib/shell/readiness-beacon.d.ts +2 -0
- package/dist/lib/shell/readiness-beacon.d.ts.map +1 -1
- package/dist/lib/shell/readiness-beacon.js +5 -1
- package/dist/lib/shell/readiness-beacon.js.map +1 -1
- package/dist/lib/shell/services/about-dialog.service.d.ts +6 -0
- package/dist/lib/shell/services/about-dialog.service.d.ts.map +1 -1
- package/dist/lib/shell/services/about-dialog.service.js +16 -4
- package/dist/lib/shell/services/about-dialog.service.js.map +1 -1
- package/dist/lib/shell/services/profile-dialog.service.d.ts +6 -0
- package/dist/lib/shell/services/profile-dialog.service.d.ts.map +1 -1
- package/dist/lib/shell/services/profile-dialog.service.js +16 -4
- package/dist/lib/shell/services/profile-dialog.service.js.map +1 -1
- package/dist/lib/shell/services/user-sharing-center-dialog.service.d.ts +6 -0
- package/dist/lib/shell/services/user-sharing-center-dialog.service.d.ts.map +1 -1
- package/dist/lib/shell/services/user-sharing-center-dialog.service.js +15 -3
- package/dist/lib/shell/services/user-sharing-center-dialog.service.js.map +1 -1
- package/dist/lib/shell/shell.component.d.ts +262 -39
- package/dist/lib/shell/shell.component.d.ts.map +1 -1
- package/dist/lib/shell/shell.component.js +688 -292
- package/dist/lib/shell/shell.component.js.map +1 -1
- package/dist/lib/single-dashboard/Components/add-item/add-item.component.d.ts +64 -8
- package/dist/lib/single-dashboard/Components/add-item/add-item.component.d.ts.map +1 -1
- package/dist/lib/single-dashboard/Components/add-item/add-item.component.js +129 -37
- package/dist/lib/single-dashboard/Components/add-item/add-item.component.js.map +1 -1
- package/dist/lib/single-dashboard/Components/delete-item/delete-item.component.d.ts +26 -2
- package/dist/lib/single-dashboard/Components/delete-item/delete-item.component.d.ts.map +1 -1
- package/dist/lib/single-dashboard/Components/delete-item/delete-item.component.js +48 -10
- package/dist/lib/single-dashboard/Components/delete-item/delete-item.component.js.map +1 -1
- package/dist/lib/single-dashboard/Components/edit-dashboard/edit-dashboard.component.d.ts +84 -6
- package/dist/lib/single-dashboard/Components/edit-dashboard/edit-dashboard.component.d.ts.map +1 -1
- package/dist/lib/single-dashboard/Components/edit-dashboard/edit-dashboard.component.js +133 -29
- package/dist/lib/single-dashboard/Components/edit-dashboard/edit-dashboard.component.js.map +1 -1
- package/dist/lib/single-dashboard/single-dashboard.component.d.ts +173 -23
- package/dist/lib/single-dashboard/single-dashboard.component.d.ts.map +1 -1
- package/dist/lib/single-dashboard/single-dashboard.component.js +383 -109
- package/dist/lib/single-dashboard/single-dashboard.component.js.map +1 -1
- package/dist/lib/single-list-detail/single-list-detail.component.d.ts +383 -55
- package/dist/lib/single-list-detail/single-list-detail.component.d.ts.map +1 -1
- package/dist/lib/single-list-detail/single-list-detail.component.js +962 -326
- package/dist/lib/single-list-detail/single-list-detail.component.js.map +1 -1
- package/dist/lib/single-query/single-query.component.d.ts +22 -2
- package/dist/lib/single-query/single-query.component.d.ts.map +1 -1
- package/dist/lib/single-query/single-query.component.js +40 -10
- package/dist/lib/single-query/single-query.component.js.map +1 -1
- package/dist/lib/single-record/single-record.component.d.ts +41 -3
- package/dist/lib/single-record/single-record.component.d.ts.map +1 -1
- package/dist/lib/single-record/single-record.component.js +71 -11
- package/dist/lib/single-record/single-record.component.js.map +1 -1
- package/dist/lib/single-search-result/single-search-result.component.d.ts +23 -3
- package/dist/lib/single-search-result/single-search-result.component.d.ts.map +1 -1
- package/dist/lib/single-search-result/single-search-result.component.js +42 -12
- package/dist/lib/single-search-result/single-search-result.component.js.map +1 -1
- package/dist/lib/system-validation/system-validation-banner.component.d.ts +12 -2
- package/dist/lib/system-validation/system-validation-banner.component.d.ts.map +1 -1
- package/dist/lib/system-validation/system-validation-banner.component.js +25 -5
- package/dist/lib/system-validation/system-validation-banner.component.js.map +1 -1
- package/dist/lib/user-menu/user-menu.types.d.ts +4 -0
- package/dist/lib/user-menu/user-menu.types.d.ts.map +1 -1
- package/dist/lib/user-menu/user-menu.types.js +10 -2
- package/dist/lib/user-menu/user-menu.types.js.map +1 -1
- package/dist/lib/user-notifications/user-notifications.component.d.ts +59 -7
- package/dist/lib/user-notifications/user-notifications.component.d.ts.map +1 -1
- package/dist/lib/user-notifications/user-notifications.component.js +151 -47
- package/dist/lib/user-notifications/user-notifications.component.js.map +1 -1
- package/dist/lib/user-profile/user-profile.component.d.ts +3 -2
- package/dist/lib/user-profile/user-profile.component.d.ts.map +1 -1
- package/dist/lib/user-profile/user-profile.component.js +5 -4
- package/dist/lib/user-profile/user-profile.component.js.map +1 -1
- package/package.json +52 -52
|
@@ -94,14 +94,54 @@ function AppAccessDialogComponent_Conditional_0_Template(rf, ctx) { if (rf & 1)
|
|
|
94
94
|
*/
|
|
95
95
|
export class AppAccessDialogComponent {
|
|
96
96
|
cdr;
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
97
|
+
Visible = false;
|
|
98
|
+
/** @deprecated Use {@link Visible}. */
|
|
99
|
+
set visible(value) {
|
|
100
|
+
this.Visible = value;
|
|
101
|
+
}
|
|
102
|
+
/** @deprecated Use {@link Visible}. */
|
|
103
|
+
get visible() {
|
|
104
|
+
return this.Visible;
|
|
105
|
+
}
|
|
106
|
+
VisibleChange = new EventEmitter();
|
|
107
|
+
/**
|
|
108
|
+
* @deprecated Use {@link VisibleChange}.
|
|
109
|
+
*
|
|
110
|
+
* The same emitter under the old binding name, so a template still binding
|
|
111
|
+
* (visibleChange) keeps working. Must stay AFTER VisibleChange: class fields
|
|
112
|
+
* initialise in order, and the other way round this captures undefined.
|
|
113
|
+
*/
|
|
114
|
+
visibleChange = this.VisibleChange;
|
|
115
|
+
Result = new EventEmitter();
|
|
116
|
+
/**
|
|
117
|
+
* @deprecated Use {@link Result}.
|
|
118
|
+
*
|
|
119
|
+
* The same emitter under the old binding name, so a template still binding
|
|
120
|
+
* (result) keeps working. Must stay AFTER Result: class fields
|
|
121
|
+
* initialise in order, and the other way round this captures undefined.
|
|
122
|
+
*/
|
|
123
|
+
result = this.Result;
|
|
100
124
|
config = null;
|
|
101
|
-
|
|
125
|
+
IsProcessing = false;
|
|
126
|
+
/** @deprecated Use {@link IsProcessing}. */
|
|
127
|
+
get isProcessing() {
|
|
128
|
+
return this.IsProcessing;
|
|
129
|
+
}
|
|
130
|
+
/** @deprecated Use {@link IsProcessing}. */
|
|
131
|
+
set isProcessing(value) {
|
|
132
|
+
this.IsProcessing = value;
|
|
133
|
+
}
|
|
102
134
|
// Auto-dismiss countdown
|
|
103
135
|
countdownInterval = null;
|
|
104
|
-
|
|
136
|
+
CountdownSeconds = 0;
|
|
137
|
+
/** @deprecated Use {@link CountdownSeconds}. */
|
|
138
|
+
get countdownSeconds() {
|
|
139
|
+
return this.CountdownSeconds;
|
|
140
|
+
}
|
|
141
|
+
/** @deprecated Use {@link CountdownSeconds}. */
|
|
142
|
+
set countdownSeconds(value) {
|
|
143
|
+
this.CountdownSeconds = value;
|
|
144
|
+
}
|
|
105
145
|
AUTO_DISMISS_SECONDS = 5;
|
|
106
146
|
constructor(cdr) {
|
|
107
147
|
this.cdr = cdr;
|
|
@@ -109,26 +149,34 @@ export class AppAccessDialogComponent {
|
|
|
109
149
|
/**
|
|
110
150
|
* Show the dialog with the specified configuration
|
|
111
151
|
*/
|
|
112
|
-
|
|
152
|
+
Show(config) {
|
|
113
153
|
this.config = config;
|
|
114
|
-
this.
|
|
115
|
-
this.
|
|
116
|
-
this.
|
|
154
|
+
this.Visible = true;
|
|
155
|
+
this.IsProcessing = false;
|
|
156
|
+
this.VisibleChange.emit(true);
|
|
117
157
|
// Start countdown for types that auto-dismiss
|
|
118
158
|
if (this.shouldAutoDismiss()) {
|
|
119
159
|
this.startCountdown();
|
|
120
160
|
}
|
|
121
161
|
this.cdr.detectChanges();
|
|
122
162
|
}
|
|
163
|
+
/** @deprecated Use {@link Show}. */
|
|
164
|
+
show(config) {
|
|
165
|
+
return this.Show(config);
|
|
166
|
+
}
|
|
123
167
|
/**
|
|
124
168
|
* Hide the dialog
|
|
125
169
|
*/
|
|
126
|
-
|
|
170
|
+
Hide() {
|
|
127
171
|
this.stopCountdown();
|
|
128
|
-
this.
|
|
129
|
-
this.
|
|
172
|
+
this.Visible = false;
|
|
173
|
+
this.VisibleChange.emit(false);
|
|
130
174
|
this.cdr.detectChanges();
|
|
131
175
|
}
|
|
176
|
+
/** @deprecated Use {@link Hide}. */
|
|
177
|
+
hide() {
|
|
178
|
+
return this.Hide();
|
|
179
|
+
}
|
|
132
180
|
ngOnDestroy() {
|
|
133
181
|
this.stopCountdown();
|
|
134
182
|
}
|
|
@@ -160,7 +208,7 @@ export class AppAccessDialogComponent {
|
|
|
160
208
|
/**
|
|
161
209
|
* Get the dialog icon based on type
|
|
162
210
|
*/
|
|
163
|
-
get
|
|
211
|
+
get Icon() {
|
|
164
212
|
if (!this.config)
|
|
165
213
|
return 'fa-circle-info';
|
|
166
214
|
switch (this.config.type) {
|
|
@@ -181,10 +229,14 @@ export class AppAccessDialogComponent {
|
|
|
181
229
|
return 'fa-circle-info';
|
|
182
230
|
}
|
|
183
231
|
}
|
|
232
|
+
/** @deprecated Use {@link Icon}. */
|
|
233
|
+
get icon() {
|
|
234
|
+
return this.Icon;
|
|
235
|
+
}
|
|
184
236
|
/**
|
|
185
237
|
* Get the dialog icon color based on type
|
|
186
238
|
*/
|
|
187
|
-
get
|
|
239
|
+
get IconColor() {
|
|
188
240
|
if (!this.config)
|
|
189
241
|
return 'var(--mj-text-secondary)';
|
|
190
242
|
switch (this.config.type) {
|
|
@@ -203,6 +255,10 @@ export class AppAccessDialogComponent {
|
|
|
203
255
|
return 'var(--mj-text-secondary)';
|
|
204
256
|
}
|
|
205
257
|
}
|
|
258
|
+
/** @deprecated Use {@link IconColor}. */
|
|
259
|
+
get iconColor() {
|
|
260
|
+
return this.IconColor;
|
|
261
|
+
}
|
|
206
262
|
/**
|
|
207
263
|
* Get the main message based on type
|
|
208
264
|
*/
|
|
@@ -231,7 +287,7 @@ export class AppAccessDialogComponent {
|
|
|
231
287
|
/**
|
|
232
288
|
* Get the secondary/help message based on type
|
|
233
289
|
*/
|
|
234
|
-
get
|
|
290
|
+
get HelpMessage() {
|
|
235
291
|
if (!this.config)
|
|
236
292
|
return '';
|
|
237
293
|
switch (this.config.type) {
|
|
@@ -250,18 +306,26 @@ export class AppAccessDialogComponent {
|
|
|
250
306
|
return '';
|
|
251
307
|
}
|
|
252
308
|
}
|
|
309
|
+
/** @deprecated Use {@link HelpMessage}. */
|
|
310
|
+
get helpMessage() {
|
|
311
|
+
return this.HelpMessage;
|
|
312
|
+
}
|
|
253
313
|
/**
|
|
254
314
|
* Check if the primary action button should be shown
|
|
255
315
|
*/
|
|
256
|
-
get
|
|
316
|
+
get ShowPrimaryAction() {
|
|
257
317
|
if (!this.config)
|
|
258
318
|
return false;
|
|
259
319
|
return this.config.type === 'not_installed' || this.config.type === 'disabled';
|
|
260
320
|
}
|
|
321
|
+
/** @deprecated Use {@link ShowPrimaryAction}. */
|
|
322
|
+
get showPrimaryAction() {
|
|
323
|
+
return this.ShowPrimaryAction;
|
|
324
|
+
}
|
|
261
325
|
/**
|
|
262
326
|
* Get the primary action button text
|
|
263
327
|
*/
|
|
264
|
-
get
|
|
328
|
+
get PrimaryActionText() {
|
|
265
329
|
if (!this.config)
|
|
266
330
|
return '';
|
|
267
331
|
switch (this.config.type) {
|
|
@@ -272,22 +336,30 @@ export class AppAccessDialogComponent {
|
|
|
272
336
|
return 'OK';
|
|
273
337
|
}
|
|
274
338
|
}
|
|
339
|
+
/** @deprecated Use {@link PrimaryActionText}. */
|
|
340
|
+
get primaryActionText() {
|
|
341
|
+
return this.PrimaryActionText;
|
|
342
|
+
}
|
|
275
343
|
/**
|
|
276
344
|
* Get the secondary/dismiss button text with countdown if applicable
|
|
277
345
|
* For actionable dialogs (install/enable), show "Cancel"
|
|
278
346
|
* For non-actionable dialogs (errors), show "OK" with countdown
|
|
279
347
|
*/
|
|
280
|
-
get
|
|
348
|
+
get DismissButtonText() {
|
|
281
349
|
// For actionable dialogs, use "Cancel"
|
|
282
|
-
if (this.
|
|
350
|
+
if (this.ShowPrimaryAction) {
|
|
283
351
|
return 'Cancel';
|
|
284
352
|
}
|
|
285
353
|
// For non-actionable dialogs, show countdown if active
|
|
286
|
-
if (this.
|
|
287
|
-
return `OK (${this.
|
|
354
|
+
if (this.CountdownSeconds > 0) {
|
|
355
|
+
return `OK (${this.CountdownSeconds})`;
|
|
288
356
|
}
|
|
289
357
|
return 'OK';
|
|
290
358
|
}
|
|
359
|
+
/** @deprecated Use {@link DismissButtonText}. */
|
|
360
|
+
get dismissButtonText() {
|
|
361
|
+
return this.DismissButtonText;
|
|
362
|
+
}
|
|
291
363
|
/**
|
|
292
364
|
* Check if this dialog type should auto-dismiss
|
|
293
365
|
*/
|
|
@@ -301,12 +373,12 @@ export class AppAccessDialogComponent {
|
|
|
301
373
|
*/
|
|
302
374
|
startCountdown() {
|
|
303
375
|
this.stopCountdown();
|
|
304
|
-
this.
|
|
376
|
+
this.CountdownSeconds = this.AUTO_DISMISS_SECONDS;
|
|
305
377
|
this.countdownInterval = setInterval(() => {
|
|
306
|
-
this.
|
|
378
|
+
this.CountdownSeconds--;
|
|
307
379
|
this.cdr.detectChanges();
|
|
308
|
-
if (this.
|
|
309
|
-
this.
|
|
380
|
+
if (this.CountdownSeconds <= 0) {
|
|
381
|
+
this.OnDismiss();
|
|
310
382
|
}
|
|
311
383
|
}, 1000);
|
|
312
384
|
}
|
|
@@ -318,37 +390,49 @@ export class AppAccessDialogComponent {
|
|
|
318
390
|
clearInterval(this.countdownInterval);
|
|
319
391
|
this.countdownInterval = null;
|
|
320
392
|
}
|
|
321
|
-
this.
|
|
393
|
+
this.CountdownSeconds = 0;
|
|
322
394
|
}
|
|
323
395
|
/**
|
|
324
396
|
* Handle primary action (install/enable)
|
|
325
397
|
*/
|
|
326
|
-
async
|
|
398
|
+
async OnPrimaryAction() {
|
|
327
399
|
if (!this.config)
|
|
328
400
|
return;
|
|
329
|
-
this.
|
|
401
|
+
this.IsProcessing = true;
|
|
330
402
|
this.cdr.detectChanges();
|
|
331
403
|
const action = this.config.type === 'not_installed' ? 'install' : 'enable';
|
|
332
|
-
this.
|
|
404
|
+
this.Result.emit({
|
|
333
405
|
action,
|
|
334
406
|
appId: this.config.appId
|
|
335
407
|
});
|
|
336
408
|
// Don't hide yet - let the parent component handle the result and close when ready
|
|
337
409
|
}
|
|
410
|
+
/** @deprecated Use {@link OnPrimaryAction}. */
|
|
411
|
+
async onPrimaryAction() {
|
|
412
|
+
return this.OnPrimaryAction();
|
|
413
|
+
}
|
|
338
414
|
/**
|
|
339
415
|
* Handle dismiss/redirect action
|
|
340
416
|
*/
|
|
341
|
-
|
|
417
|
+
OnDismiss() {
|
|
342
418
|
this.stopCountdown();
|
|
343
|
-
this.
|
|
344
|
-
this.
|
|
419
|
+
this.Result.emit({ action: 'redirect' });
|
|
420
|
+
this.Hide();
|
|
421
|
+
}
|
|
422
|
+
/** @deprecated Use {@link OnDismiss}. */
|
|
423
|
+
onDismiss() {
|
|
424
|
+
return this.OnDismiss();
|
|
345
425
|
}
|
|
346
426
|
/**
|
|
347
427
|
* Mark processing as complete (called by parent after install/enable)
|
|
348
428
|
*/
|
|
429
|
+
CompleteProcessing() {
|
|
430
|
+
this.IsProcessing = false;
|
|
431
|
+
this.Hide();
|
|
432
|
+
}
|
|
433
|
+
/** @deprecated Use {@link CompleteProcessing}. */
|
|
349
434
|
completeProcessing() {
|
|
350
|
-
this.
|
|
351
|
-
this.hide();
|
|
435
|
+
return this.CompleteProcessing();
|
|
352
436
|
}
|
|
353
437
|
/**
|
|
354
438
|
* Handle keyboard events for the dialog
|
|
@@ -356,27 +440,27 @@ export class AppAccessDialogComponent {
|
|
|
356
440
|
* Escape key dismisses the dialog
|
|
357
441
|
*/
|
|
358
442
|
handleKeyDown(event) {
|
|
359
|
-
if (!this.
|
|
443
|
+
if (!this.Visible || this.IsProcessing)
|
|
360
444
|
return;
|
|
361
445
|
if (event.key === 'Enter') {
|
|
362
446
|
// Enter triggers primary action if available
|
|
363
|
-
if (this.
|
|
447
|
+
if (this.ShowPrimaryAction) {
|
|
364
448
|
event.preventDefault();
|
|
365
449
|
event.stopPropagation();
|
|
366
|
-
this.
|
|
450
|
+
this.OnPrimaryAction();
|
|
367
451
|
}
|
|
368
452
|
}
|
|
369
453
|
else if (event.key === 'Escape') {
|
|
370
454
|
// Escape dismisses the dialog
|
|
371
455
|
event.preventDefault();
|
|
372
456
|
event.stopPropagation();
|
|
373
|
-
this.
|
|
457
|
+
this.OnDismiss();
|
|
374
458
|
}
|
|
375
459
|
}
|
|
376
460
|
static ɵfac = function AppAccessDialogComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || AppAccessDialogComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
|
|
377
461
|
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AppAccessDialogComponent, selectors: [["mj-app-access-dialog"]], hostBindings: function AppAccessDialogComponent_HostBindings(rf, ctx) { if (rf & 1) {
|
|
378
462
|
i0.ɵɵlistener("keydown", function AppAccessDialogComponent_keydown_HostBindingHandler($event) { return ctx.handleKeyDown($event); }, i0.ɵɵresolveDocument);
|
|
379
|
-
} }, inputs: { visible: "visible" }, outputs: { visibleChange: "visibleChange", result: "result" }, standalone: false, decls: 1, vars: 1, consts: [[1, "dialog-overlay"], [1, "dialog-overlay", 3, "click"], [1, "dialog-container", 3, "click"], [1, "dialog-icon"], [1, "fa-solid", 3, "ngClass"], [1, "dialog-title"], [1, "dialog-message"], [1, "dialog-help"], [1, "dialog-actions"], [1, "dialog-btn", "primary", 3, "disabled"], [1, "dialog-btn", 3, "click", "disabled"], [1, "dialog-btn", "primary", 3, "click", "disabled"], [1, "fa-solid", "fa-spinner", "fa-spin"]], template: function AppAccessDialogComponent_Template(rf, ctx) { if (rf & 1) {
|
|
463
|
+
} }, inputs: { Visible: "Visible", visible: "visible" }, outputs: { VisibleChange: "VisibleChange", visibleChange: "visibleChange", Result: "Result", result: "result" }, standalone: false, decls: 1, vars: 1, consts: [[1, "dialog-overlay"], [1, "dialog-overlay", 3, "click"], [1, "dialog-container", 3, "click"], [1, "dialog-icon"], [1, "fa-solid", 3, "ngClass"], [1, "dialog-title"], [1, "dialog-message"], [1, "dialog-help"], [1, "dialog-actions"], [1, "dialog-btn", "primary", 3, "disabled"], [1, "dialog-btn", 3, "click", "disabled"], [1, "dialog-btn", "primary", 3, "click", "disabled"], [1, "fa-solid", "fa-spinner", "fa-spin"]], template: function AppAccessDialogComponent_Template(rf, ctx) { if (rf & 1) {
|
|
380
464
|
i0.ɵɵconditionalCreate(0, AppAccessDialogComponent_Conditional_0_Template, 13, 11, "div", 0);
|
|
381
465
|
} if (rf & 2) {
|
|
382
466
|
i0.ɵɵconditional(ctx.visible ? 0 : -1);
|
|
@@ -385,10 +469,16 @@ export class AppAccessDialogComponent {
|
|
|
385
469
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AppAccessDialogComponent, [{
|
|
386
470
|
type: Component,
|
|
387
471
|
args: [{ standalone: false, selector: 'mj-app-access-dialog', template: "@if (visible) {\n <div class=\"dialog-overlay\" (click)=\"onDismiss()\">\n <div class=\"dialog-container\" (click)=\"$event.stopPropagation()\">\n <!-- Icon -->\n <div class=\"dialog-icon\" [style.color]=\"iconColor\">\n <i class=\"fa-solid\" [ngClass]=\"icon\"></i>\n </div>\n <!-- Title -->\n <h2 class=\"dialog-title\">{{ title }}</h2>\n <!-- Message -->\n <p class=\"dialog-message\">{{ message }}</p>\n <!-- Help message -->\n @if (helpMessage) {\n <p class=\"dialog-help\">{{ helpMessage }}</p>\n }\n <!-- Actions -->\n <div class=\"dialog-actions\">\n @if (showPrimaryAction) {\n <button\n class=\"dialog-btn primary\"\n [disabled]=\"isProcessing\"\n (click)=\"onPrimaryAction()\">\n @if (isProcessing) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n }\n @if (!isProcessing) {\n <span>{{ primaryActionText }}</span>\n }\n @if (isProcessing) {\n <span>Processing...</span>\n }\n </button>\n }\n <button\n class=\"dialog-btn\"\n [class.secondary]=\"showPrimaryAction\"\n [disabled]=\"isProcessing\"\n (click)=\"onDismiss()\">\n {{ dismissButtonText }}\n </button>\n </div>\n </div>\n </div>\n}\n", styles: [".dialog-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.6);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 10001; /* Higher than loading screen (10000) */\n animation: fadeIn 0.2s ease-out;\n padding: 16px; /* Ensure padding on small screens */\n box-sizing: border-box;\n}\n\n@keyframes fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n.dialog-container {\n background: var(--mj-bg-surface-card);\n border-radius: 12px;\n padding: 32px;\n max-width: 420px;\n width: 90%;\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);\n text-align: center;\n animation: slideUp 0.3s ease-out;\n}\n\n@keyframes slideUp {\n from {\n opacity: 0;\n transform: translateY(20px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n.dialog-icon {\n font-size: 48px;\n margin-bottom: 16px;\n}\n\n.dialog-title {\n margin: 0 0 12px 0;\n font-size: 20px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.dialog-message {\n margin: 0 0 8px 0;\n font-size: 14px;\n line-height: 1.5;\n color: var(--mj-text-secondary);\n}\n\n.dialog-help {\n margin: 0 0 20px 0;\n font-size: 12px;\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n.dialog-actions {\n display: flex;\n gap: 12px;\n justify-content: center;\n margin-top: 24px;\n}\n\n.dialog-btn {\n padding: 10px 24px;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n border: none;\n min-width: 100px;\n}\n\n.dialog-btn:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.dialog-btn.primary {\n background: var(--mj-brand-primary);\n color: white;\n}\n\n.dialog-btn.primary:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n}\n\n.dialog-btn.primary:active:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n}\n\n.dialog-btn.secondary,\n.dialog-btn:not(.primary):not(.secondary) {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n border: 1px solid var(--mj-border-default);\n}\n\n.dialog-btn.secondary:hover:not(:disabled),\n.dialog-btn:not(.primary):not(.secondary):hover:not(:disabled) {\n background: var(--mj-bg-surface-hover);\n}\n\n.dialog-btn.secondary:active:not(:disabled),\n.dialog-btn:not(.primary):not(.secondary):active:not(:disabled) {\n background: var(--mj-bg-surface-active);\n}\n\n/* Spinner animation */\n.fa-spin {\n animation: spin 1s linear infinite;\n}\n\n@keyframes spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n/* Responsive - Tablet */\n@media (max-width: 768px) {\n .dialog-container {\n max-width: 380px;\n }\n\n .dialog-message {\n font-size: 13px;\n }\n}\n\n/* Responsive - Mobile */\n@media (max-width: 480px) {\n .dialog-container {\n padding: 20px;\n margin: 0;\n max-width: none;\n width: 100%;\n border-radius: 8px;\n }\n\n .dialog-icon {\n font-size: 36px;\n margin-bottom: 12px;\n }\n\n .dialog-title {\n font-size: 17px;\n margin-bottom: 10px;\n }\n\n .dialog-message {\n font-size: 13px;\n margin-bottom: 6px;\n }\n\n .dialog-help {\n font-size: 11px;\n margin-bottom: 16px;\n }\n\n .dialog-actions {\n flex-direction: column;\n gap: 10px;\n margin-top: 20px;\n }\n\n .dialog-btn {\n width: 100%;\n padding: 12px 20px;\n font-size: 15px;\n }\n}\n\n/* Very small screens */\n@media (max-width: 360px) {\n .dialog-container {\n padding: 16px;\n }\n\n .dialog-icon {\n font-size: 32px;\n }\n\n .dialog-title {\n font-size: 16px;\n }\n}\n"] }]
|
|
388
|
-
}], () => [{ type: i0.ChangeDetectorRef }], {
|
|
472
|
+
}], () => [{ type: i0.ChangeDetectorRef }], { Visible: [{
|
|
473
|
+
type: Input
|
|
474
|
+
}], visible: [{
|
|
389
475
|
type: Input
|
|
476
|
+
}], VisibleChange: [{
|
|
477
|
+
type: Output
|
|
390
478
|
}], visibleChange: [{
|
|
391
479
|
type: Output
|
|
480
|
+
}], Result: [{
|
|
481
|
+
type: Output
|
|
392
482
|
}], result: [{
|
|
393
483
|
type: Output
|
|
394
484
|
}], handleKeyDown: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-access-dialog.component.js","sourceRoot":"","sources":["../../../../../src/lib/shell/components/dialogs/app-access-dialog.component.ts","../../../../../src/lib/shell/components/dialogs/app-access-dialog.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, OnDestroy, ChangeDetectorRef, HostListener } from '@angular/core';\n\n/**\n * Type of app access issue\n */\nexport type AppAccessDialogType =\n | 'not_installed' // User can install the app\n | 'disabled' // User has disabled the app, can re-enable\n | 'no_access' // User doesn't have permission\n | 'not_found' // App doesn't exist\n | 'inactive' // App is inactive/disabled by admin\n | 'no_apps' // User has no apps configured at all\n | 'layout_error'; // Golden Layout failed to initialize\n\n/**\n * Configuration for the app access dialog\n */\nexport interface AppAccessDialogConfig {\n type: AppAccessDialogType;\n appName?: string;\n appId?: string;\n}\n\n/**\n * Result from the dialog\n */\nexport interface AppAccessDialogResult {\n action: 'install' | 'enable' | 'redirect' | 'dismissed';\n appId?: string;\n}\n\n/**\n * Dialog component for handling app access errors.\n * Shows appropriate messages and actions based on the type of access issue.\n * Features auto-dismiss with countdown timer for certain dialog types.\n */\n@Component({\n standalone: false,\n selector: 'mj-app-access-dialog',\n templateUrl: './app-access-dialog.component.html',\n styleUrls: ['./app-access-dialog.component.css']\n})\nexport class AppAccessDialogComponent implements OnDestroy {\n @Input() visible = false;\n @Output() visibleChange = new EventEmitter<boolean>();\n @Output() result = new EventEmitter<AppAccessDialogResult>();\n\n config: AppAccessDialogConfig | null = null;\n isProcessing = false;\n\n // Auto-dismiss countdown\n private countdownInterval: ReturnType<typeof setInterval> | null = null;\n countdownSeconds = 0;\n private readonly AUTO_DISMISS_SECONDS = 5;\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n /**\n * Show the dialog with the specified configuration\n */\n show(config: AppAccessDialogConfig): void {\n this.config = config;\n this.visible = true;\n this.isProcessing = false;\n this.visibleChange.emit(true);\n\n // Start countdown for types that auto-dismiss\n if (this.shouldAutoDismiss()) {\n this.startCountdown();\n }\n\n this.cdr.detectChanges();\n }\n\n /**\n * Hide the dialog\n */\n hide(): void {\n this.stopCountdown();\n this.visible = false;\n this.visibleChange.emit(false);\n this.cdr.detectChanges();\n }\n\n ngOnDestroy(): void {\n this.stopCountdown();\n }\n\n /**\n * Get the dialog title based on type\n */\n get title(): string {\n if (!this.config) return '';\n\n switch (this.config.type) {\n case 'not_installed':\n return 'Add Application?';\n case 'disabled':\n return 'Add Application?';\n case 'no_access':\n return 'Access Denied';\n case 'not_found':\n return 'Application Not Found';\n case 'inactive':\n return 'Application Unavailable';\n case 'no_apps':\n return 'No Applications Available';\n case 'layout_error':\n return 'Display Error';\n default:\n return 'Application Error';\n }\n }\n\n /**\n * Get the dialog icon based on type\n */\n get icon(): string {\n if (!this.config) return 'fa-circle-info';\n\n switch (this.config.type) {\n case 'not_installed':\n case 'disabled':\n return 'fa-circle-question';\n case 'no_access':\n return 'fa-lock';\n case 'not_found':\n return 'fa-circle-xmark';\n case 'inactive':\n return 'fa-circle-pause';\n case 'no_apps':\n return 'fa-folder-open';\n case 'layout_error':\n return 'fa-triangle-exclamation';\n default:\n return 'fa-circle-info';\n }\n }\n\n /**\n * Get the dialog icon color based on type\n */\n get iconColor(): string {\n if (!this.config) return 'var(--mj-text-secondary)';\n\n switch (this.config.type) {\n case 'not_installed':\n case 'disabled':\n return '#2196F3'; // Blue for actionable\n case 'no_access':\n case 'inactive':\n return '#FF9800'; // Orange for warning\n case 'not_found':\n case 'layout_error':\n return '#F44336'; // Red for error\n case 'no_apps':\n return '#9E9E9E'; // Gray for info\n default:\n return 'var(--mj-text-secondary)';\n }\n }\n\n /**\n * Get the main message based on type\n */\n get message(): string {\n if (!this.config) return '';\n\n const appName = this.config.appName || 'this application';\n\n switch (this.config.type) {\n case 'not_installed':\n case 'disabled':\n return `Would you like to add \"${appName}\" to your applications?`;\n case 'no_access':\n return `You don't have permission to access \"${appName}\".`;\n case 'not_found':\n return `The application \"${appName}\" doesn't exist in this system.`;\n case 'inactive':\n return `The application \"${appName}\" is currently inactive and unavailable.`;\n case 'no_apps':\n return `You don't have any applications configured. Your system administrator needs to set up your application access.`;\n case 'layout_error':\n return `There was an error displaying the application interface. The system will redirect you to an available application.`;\n default:\n return 'An error occurred while loading the application.';\n }\n }\n\n /**\n * Get the secondary/help message based on type\n */\n get helpMessage(): string {\n if (!this.config) return '';\n\n switch (this.config.type) {\n case 'not_installed':\n case 'disabled':\n return '';\n case 'no_access':\n case 'not_found':\n case 'inactive':\n return 'If you believe this is an error, please contact your system administrator.';\n case 'no_apps':\n return 'Please contact your system administrator to configure your application access.';\n case 'layout_error':\n return 'If this error persists, try clearing your browser cache or contact your system administrator.';\n default:\n return '';\n }\n }\n\n /**\n * Check if the primary action button should be shown\n */\n get showPrimaryAction(): boolean {\n if (!this.config) return false;\n return this.config.type === 'not_installed' || this.config.type === 'disabled';\n }\n\n /**\n * Get the primary action button text\n */\n get primaryActionText(): string {\n if (!this.config) return '';\n\n switch (this.config.type) {\n case 'not_installed':\n case 'disabled':\n return 'Add';\n default:\n return 'OK';\n }\n }\n\n /**\n * Get the secondary/dismiss button text with countdown if applicable\n * For actionable dialogs (install/enable), show \"Cancel\"\n * For non-actionable dialogs (errors), show \"OK\" with countdown\n */\n get dismissButtonText(): string {\n // For actionable dialogs, use \"Cancel\"\n if (this.showPrimaryAction) {\n return 'Cancel';\n }\n\n // For non-actionable dialogs, show countdown if active\n if (this.countdownSeconds > 0) {\n return `OK (${this.countdownSeconds})`;\n }\n return 'OK';\n }\n\n /**\n * Check if this dialog type should auto-dismiss\n */\n private shouldAutoDismiss(): boolean {\n if (!this.config) return false;\n return ['no_access', 'not_found', 'inactive', 'layout_error'].includes(this.config.type);\n }\n\n /**\n * Start the countdown timer for auto-dismiss\n */\n private startCountdown(): void {\n this.stopCountdown();\n this.countdownSeconds = this.AUTO_DISMISS_SECONDS;\n\n this.countdownInterval = setInterval(() => {\n this.countdownSeconds--;\n this.cdr.detectChanges();\n\n if (this.countdownSeconds <= 0) {\n this.onDismiss();\n }\n }, 1000);\n }\n\n /**\n * Stop the countdown timer\n */\n private stopCountdown(): void {\n if (this.countdownInterval) {\n clearInterval(this.countdownInterval);\n this.countdownInterval = null;\n }\n this.countdownSeconds = 0;\n }\n\n /**\n * Handle primary action (install/enable)\n */\n async onPrimaryAction(): Promise<void> {\n if (!this.config) return;\n\n this.isProcessing = true;\n this.cdr.detectChanges();\n\n const action = this.config.type === 'not_installed' ? 'install' : 'enable';\n\n this.result.emit({\n action,\n appId: this.config.appId\n });\n\n // Don't hide yet - let the parent component handle the result and close when ready\n }\n\n /**\n * Handle dismiss/redirect action\n */\n onDismiss(): void {\n this.stopCountdown();\n this.result.emit({ action: 'redirect' });\n this.hide();\n }\n\n /**\n * Mark processing as complete (called by parent after install/enable)\n */\n completeProcessing(): void {\n this.isProcessing = false;\n this.hide();\n }\n\n /**\n * Handle keyboard events for the dialog\n * Enter key triggers primary action (Install/Enable)\n * Escape key dismisses the dialog\n */\n @HostListener('document:keydown', ['$event'])\n handleKeyDown(event: KeyboardEvent): void {\n if (!this.visible || this.isProcessing) return;\n\n if (event.key === 'Enter') {\n // Enter triggers primary action if available\n if (this.showPrimaryAction) {\n event.preventDefault();\n event.stopPropagation();\n this.onPrimaryAction();\n }\n } else if (event.key === 'Escape') {\n // Escape dismisses the dialog\n event.preventDefault();\n event.stopPropagation();\n this.onDismiss();\n }\n }\n}\n","@if (visible) {\n <div class=\"dialog-overlay\" (click)=\"onDismiss()\">\n <div class=\"dialog-container\" (click)=\"$event.stopPropagation()\">\n <!-- Icon -->\n <div class=\"dialog-icon\" [style.color]=\"iconColor\">\n <i class=\"fa-solid\" [ngClass]=\"icon\"></i>\n </div>\n <!-- Title -->\n <h2 class=\"dialog-title\">{{ title }}</h2>\n <!-- Message -->\n <p class=\"dialog-message\">{{ message }}</p>\n <!-- Help message -->\n @if (helpMessage) {\n <p class=\"dialog-help\">{{ helpMessage }}</p>\n }\n <!-- Actions -->\n <div class=\"dialog-actions\">\n @if (showPrimaryAction) {\n <button\n class=\"dialog-btn primary\"\n [disabled]=\"isProcessing\"\n (click)=\"onPrimaryAction()\">\n @if (isProcessing) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n }\n @if (!isProcessing) {\n <span>{{ primaryActionText }}</span>\n }\n @if (isProcessing) {\n <span>Processing...</span>\n }\n </button>\n }\n <button\n class=\"dialog-btn\"\n [class.secondary]=\"showPrimaryAction\"\n [disabled]=\"isProcessing\"\n (click)=\"onDismiss()\">\n {{ dismissButtonText }}\n </button>\n </div>\n </div>\n </div>\n}\n"]}
|
|
1
|
+
{"version":3,"file":"app-access-dialog.component.js","sourceRoot":"","sources":["../../../../../src/lib/shell/components/dialogs/app-access-dialog.component.ts","../../../../../src/lib/shell/components/dialogs/app-access-dialog.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, OnDestroy, ChangeDetectorRef, HostListener } from '@angular/core';\n\n/**\n * Type of app access issue\n */\nexport type AppAccessDialogType =\n | 'not_installed' // User can install the app\n | 'disabled' // User has disabled the app, can re-enable\n | 'no_access' // User doesn't have permission\n | 'not_found' // App doesn't exist\n | 'inactive' // App is inactive/disabled by admin\n | 'no_apps' // User has no apps configured at all\n | 'layout_error'; // Golden Layout failed to initialize\n\n/**\n * Configuration for the app access dialog\n */\nexport interface AppAccessDialogConfig {\n type: AppAccessDialogType; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n appName?: string; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n appId?: string; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n}\n\n/**\n * Result from the dialog\n */\nexport interface AppAccessDialogResult {\n action: 'install' | 'enable' | 'redirect' | 'dismissed'; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n appId?: string; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n}\n\n/**\n * Dialog component for handling app access errors.\n * Shows appropriate messages and actions based on the type of access issue.\n * Features auto-dismiss with countdown timer for certain dialog types.\n */\n@Component({\n standalone: false,\n selector: 'mj-app-access-dialog',\n templateUrl: './app-access-dialog.component.html',\n styleUrls: ['./app-access-dialog.component.css']\n})\nexport class AppAccessDialogComponent implements OnDestroy {\n @Input() Visible = false;\n\n /** @deprecated Use {@link Visible}. */\n @Input() set visible(value: AppAccessDialogComponent['Visible']) {\n this.Visible = value;\n }\n /** @deprecated Use {@link Visible}. */\n get visible(): AppAccessDialogComponent['Visible'] {\n return this.Visible;\n }\n @Output() VisibleChange = new EventEmitter<boolean>();\n\n /**\n * @deprecated Use {@link VisibleChange}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (visibleChange) keeps working. Must stay AFTER VisibleChange: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() visibleChange = this.VisibleChange;\n @Output() Result = new EventEmitter<AppAccessDialogResult>();\n\n /**\n * @deprecated Use {@link Result}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (result) keeps working. Must stay AFTER Result: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() result = this.Result;\n\n config: AppAccessDialogConfig | null = null;\n IsProcessing = false;\n\n /** @deprecated Use {@link IsProcessing}. */\n get isProcessing() {\n return this.IsProcessing;\n }\n /** @deprecated Use {@link IsProcessing}. */\n set isProcessing(value) {\n this.IsProcessing = value;\n }\n\n // Auto-dismiss countdown\n private countdownInterval: ReturnType<typeof setInterval> | null = null;\n CountdownSeconds = 0;\n\n /** @deprecated Use {@link CountdownSeconds}. */\n get countdownSeconds() {\n return this.CountdownSeconds;\n }\n /** @deprecated Use {@link CountdownSeconds}. */\n set countdownSeconds(value) {\n this.CountdownSeconds = value;\n }\n private readonly AUTO_DISMISS_SECONDS = 5;\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n /**\n * Show the dialog with the specified configuration\n */\n Show(config: AppAccessDialogConfig): void {\n this.config = config;\n this.Visible = true;\n this.IsProcessing = false;\n this.VisibleChange.emit(true);\n\n // Start countdown for types that auto-dismiss\n if (this.shouldAutoDismiss()) {\n this.startCountdown();\n }\n\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link Show}. */\n show(config: AppAccessDialogConfig): void {\n return this.Show(config);\n }\n\n /**\n * Hide the dialog\n */\n Hide(): void {\n this.stopCountdown();\n this.Visible = false;\n this.VisibleChange.emit(false);\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link Hide}. */\n hide(): void {\n return this.Hide();\n }\n\n ngOnDestroy(): void {\n this.stopCountdown();\n }\n\n /**\n * Get the dialog title based on type\n */\n get title(): string {\n if (!this.config) return '';\n\n switch (this.config.type) {\n case 'not_installed':\n return 'Add Application?';\n case 'disabled':\n return 'Add Application?';\n case 'no_access':\n return 'Access Denied';\n case 'not_found':\n return 'Application Not Found';\n case 'inactive':\n return 'Application Unavailable';\n case 'no_apps':\n return 'No Applications Available';\n case 'layout_error':\n return 'Display Error';\n default:\n return 'Application Error';\n }\n }\n\n /**\n * Get the dialog icon based on type\n */\n get Icon(): string {\n if (!this.config) return 'fa-circle-info';\n\n switch (this.config.type) {\n case 'not_installed':\n case 'disabled':\n return 'fa-circle-question';\n case 'no_access':\n return 'fa-lock';\n case 'not_found':\n return 'fa-circle-xmark';\n case 'inactive':\n return 'fa-circle-pause';\n case 'no_apps':\n return 'fa-folder-open';\n case 'layout_error':\n return 'fa-triangle-exclamation';\n default:\n return 'fa-circle-info';\n }\n }\n\n /** @deprecated Use {@link Icon}. */\n get icon(): string {\n return this.Icon;\n }\n\n /**\n * Get the dialog icon color based on type\n */\n get IconColor(): string {\n if (!this.config) return 'var(--mj-text-secondary)';\n\n switch (this.config.type) {\n case 'not_installed':\n case 'disabled':\n return '#2196F3'; // Blue for actionable\n case 'no_access':\n case 'inactive':\n return '#FF9800'; // Orange for warning\n case 'not_found':\n case 'layout_error':\n return '#F44336'; // Red for error\n case 'no_apps':\n return '#9E9E9E'; // Gray for info\n default:\n return 'var(--mj-text-secondary)';\n }\n }\n\n /** @deprecated Use {@link IconColor}. */\n get iconColor(): string {\n return this.IconColor;\n }\n\n /**\n * Get the main message based on type\n */\n get message(): string {\n if (!this.config) return '';\n\n const appName = this.config.appName || 'this application';\n\n switch (this.config.type) {\n case 'not_installed':\n case 'disabled':\n return `Would you like to add \"${appName}\" to your applications?`;\n case 'no_access':\n return `You don't have permission to access \"${appName}\".`;\n case 'not_found':\n return `The application \"${appName}\" doesn't exist in this system.`;\n case 'inactive':\n return `The application \"${appName}\" is currently inactive and unavailable.`;\n case 'no_apps':\n return `You don't have any applications configured. Your system administrator needs to set up your application access.`;\n case 'layout_error':\n return `There was an error displaying the application interface. The system will redirect you to an available application.`;\n default:\n return 'An error occurred while loading the application.';\n }\n }\n\n /**\n * Get the secondary/help message based on type\n */\n get HelpMessage(): string {\n if (!this.config) return '';\n\n switch (this.config.type) {\n case 'not_installed':\n case 'disabled':\n return '';\n case 'no_access':\n case 'not_found':\n case 'inactive':\n return 'If you believe this is an error, please contact your system administrator.';\n case 'no_apps':\n return 'Please contact your system administrator to configure your application access.';\n case 'layout_error':\n return 'If this error persists, try clearing your browser cache or contact your system administrator.';\n default:\n return '';\n }\n }\n\n /** @deprecated Use {@link HelpMessage}. */\n get helpMessage(): string {\n return this.HelpMessage;\n }\n\n /**\n * Check if the primary action button should be shown\n */\n get ShowPrimaryAction(): boolean {\n if (!this.config) return false;\n return this.config.type === 'not_installed' || this.config.type === 'disabled';\n }\n\n /** @deprecated Use {@link ShowPrimaryAction}. */\n get showPrimaryAction(): boolean {\n return this.ShowPrimaryAction;\n }\n\n /**\n * Get the primary action button text\n */\n get PrimaryActionText(): string {\n if (!this.config) return '';\n\n switch (this.config.type) {\n case 'not_installed':\n case 'disabled':\n return 'Add';\n default:\n return 'OK';\n }\n }\n\n /** @deprecated Use {@link PrimaryActionText}. */\n get primaryActionText(): string {\n return this.PrimaryActionText;\n }\n\n /**\n * Get the secondary/dismiss button text with countdown if applicable\n * For actionable dialogs (install/enable), show \"Cancel\"\n * For non-actionable dialogs (errors), show \"OK\" with countdown\n */\n get DismissButtonText(): string {\n // For actionable dialogs, use \"Cancel\"\n if (this.ShowPrimaryAction) {\n return 'Cancel';\n }\n\n // For non-actionable dialogs, show countdown if active\n if (this.CountdownSeconds > 0) {\n return `OK (${this.CountdownSeconds})`;\n }\n return 'OK';\n }\n\n /** @deprecated Use {@link DismissButtonText}. */\n get dismissButtonText(): string {\n return this.DismissButtonText;\n }\n\n /**\n * Check if this dialog type should auto-dismiss\n */\n private shouldAutoDismiss(): boolean {\n if (!this.config) return false;\n return ['no_access', 'not_found', 'inactive', 'layout_error'].includes(this.config.type);\n }\n\n /**\n * Start the countdown timer for auto-dismiss\n */\n private startCountdown(): void {\n this.stopCountdown();\n this.CountdownSeconds = this.AUTO_DISMISS_SECONDS;\n\n this.countdownInterval = setInterval(() => {\n this.CountdownSeconds--;\n this.cdr.detectChanges();\n\n if (this.CountdownSeconds <= 0) {\n this.OnDismiss();\n }\n }, 1000);\n }\n\n /**\n * Stop the countdown timer\n */\n private stopCountdown(): void {\n if (this.countdownInterval) {\n clearInterval(this.countdownInterval);\n this.countdownInterval = null;\n }\n this.CountdownSeconds = 0;\n }\n\n /**\n * Handle primary action (install/enable)\n */\n async OnPrimaryAction(): Promise<void> {\n if (!this.config) return;\n\n this.IsProcessing = true;\n this.cdr.detectChanges();\n\n const action = this.config.type === 'not_installed' ? 'install' : 'enable';\n\n this.Result.emit({\n action,\n appId: this.config.appId\n });\n\n // Don't hide yet - let the parent component handle the result and close when ready\n }\n\n /** @deprecated Use {@link OnPrimaryAction}. */\n async onPrimaryAction(): Promise<void> {\n return this.OnPrimaryAction();\n }\n\n /**\n * Handle dismiss/redirect action\n */\n OnDismiss(): void {\n this.stopCountdown();\n this.Result.emit({ action: 'redirect' });\n this.Hide();\n }\n\n /** @deprecated Use {@link OnDismiss}. */\n onDismiss(): void {\n return this.OnDismiss();\n }\n\n /**\n * Mark processing as complete (called by parent after install/enable)\n */\n CompleteProcessing(): void {\n this.IsProcessing = false;\n this.Hide();\n }\n\n /** @deprecated Use {@link CompleteProcessing}. */\n completeProcessing(): void {\n return this.CompleteProcessing();\n }\n\n /**\n * Handle keyboard events for the dialog\n * Enter key triggers primary action (Install/Enable)\n * Escape key dismisses the dialog\n */\n @HostListener('document:keydown', ['$event'])\n handleKeyDown(event: KeyboardEvent): void {\n if (!this.Visible || this.IsProcessing) return;\n\n if (event.key === 'Enter') {\n // Enter triggers primary action if available\n if (this.ShowPrimaryAction) {\n event.preventDefault();\n event.stopPropagation();\n this.OnPrimaryAction();\n }\n } else if (event.key === 'Escape') {\n // Escape dismisses the dialog\n event.preventDefault();\n event.stopPropagation();\n this.OnDismiss();\n }\n }\n}\n","@if (visible) {\n <div class=\"dialog-overlay\" (click)=\"onDismiss()\">\n <div class=\"dialog-container\" (click)=\"$event.stopPropagation()\">\n <!-- Icon -->\n <div class=\"dialog-icon\" [style.color]=\"iconColor\">\n <i class=\"fa-solid\" [ngClass]=\"icon\"></i>\n </div>\n <!-- Title -->\n <h2 class=\"dialog-title\">{{ title }}</h2>\n <!-- Message -->\n <p class=\"dialog-message\">{{ message }}</p>\n <!-- Help message -->\n @if (helpMessage) {\n <p class=\"dialog-help\">{{ helpMessage }}</p>\n }\n <!-- Actions -->\n <div class=\"dialog-actions\">\n @if (showPrimaryAction) {\n <button\n class=\"dialog-btn primary\"\n [disabled]=\"isProcessing\"\n (click)=\"onPrimaryAction()\">\n @if (isProcessing) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n }\n @if (!isProcessing) {\n <span>{{ primaryActionText }}</span>\n }\n @if (isProcessing) {\n <span>Processing...</span>\n }\n </button>\n }\n <button\n class=\"dialog-btn\"\n [class.secondary]=\"showPrimaryAction\"\n [disabled]=\"isProcessing\"\n (click)=\"onDismiss()\">\n {{ dismissButtonText }}\n </button>\n </div>\n </div>\n </div>\n}\n"]}
|
|
@@ -67,7 +67,23 @@ export declare class AppNavComponent implements OnInit, OnDestroy, AfterViewInit
|
|
|
67
67
|
private navListRef?;
|
|
68
68
|
private moreBtnRef?;
|
|
69
69
|
private trailingSlotRef?;
|
|
70
|
+
NavItemClick: EventEmitter<NavItemClickEvent>;
|
|
71
|
+
/**
|
|
72
|
+
* @deprecated Use {@link NavItemClick}.
|
|
73
|
+
*
|
|
74
|
+
* The same emitter under the old binding name, so a template still binding
|
|
75
|
+
* (navItemClick) keeps working. Must stay AFTER NavItemClick: class fields
|
|
76
|
+
* initialise in order, and the other way round this captures undefined.
|
|
77
|
+
*/
|
|
70
78
|
navItemClick: EventEmitter<NavItemClickEvent>;
|
|
79
|
+
NavItemDismiss: EventEmitter<NavItem>;
|
|
80
|
+
/**
|
|
81
|
+
* @deprecated Use {@link NavItemDismiss}.
|
|
82
|
+
*
|
|
83
|
+
* The same emitter under the old binding name, so a template still binding
|
|
84
|
+
* (navItemDismiss) keeps working. Must stay AFTER NavItemDismiss: class fields
|
|
85
|
+
* initialise in order, and the other way round this captures undefined.
|
|
86
|
+
*/
|
|
71
87
|
navItemDismiss: EventEmitter<NavItem>;
|
|
72
88
|
/**
|
|
73
89
|
* Disable the priority+ overflow behavior. Used by the mobile drawer instance,
|
|
@@ -144,6 +160,8 @@ export declare class AppNavComponent implements OnInit, OnDestroy, AfterViewInit
|
|
|
144
160
|
/**
|
|
145
161
|
* Check if a nav item is dynamic (generated from recent orphan resources)
|
|
146
162
|
*/
|
|
163
|
+
IsDynamic(item: NavItem): boolean;
|
|
164
|
+
/** @deprecated Use {@link IsDynamic}. */
|
|
147
165
|
isDynamic(item: NavItem): boolean;
|
|
148
166
|
/**
|
|
149
167
|
* Compute if nav item is active based on active tab
|
|
@@ -152,26 +170,36 @@ export declare class AppNavComponent implements OnInit, OnDestroy, AfterViewInit
|
|
|
152
170
|
/**
|
|
153
171
|
* Get cached navigation items (no computation in getter)
|
|
154
172
|
*/
|
|
173
|
+
get NavItems(): NavItem[];
|
|
174
|
+
/** @deprecated Use {@link NavItems}. */
|
|
155
175
|
get navItems(): NavItem[];
|
|
156
176
|
/**
|
|
157
177
|
* Check if nav item is active (uses cached state from Map)
|
|
158
178
|
*/
|
|
179
|
+
IsActive(item: NavItem): boolean;
|
|
180
|
+
/** @deprecated Use {@link IsActive}. */
|
|
159
181
|
isActive(item: NavItem): boolean;
|
|
160
182
|
/**
|
|
161
183
|
* Track function for @for to optimize rendering
|
|
162
184
|
*/
|
|
185
|
+
TrackByNavItem(_index: number, item: NavItem): string;
|
|
186
|
+
/** @deprecated Use {@link TrackByNavItem}. */
|
|
163
187
|
trackByNavItem(_index: number, item: NavItem): string;
|
|
164
188
|
/**
|
|
165
189
|
* Handle nav item click
|
|
166
190
|
*/
|
|
191
|
+
OnNavClick(item: NavItem, event?: MouseEvent): void;
|
|
192
|
+
/** @deprecated Use {@link OnNavClick}. */
|
|
167
193
|
onNavClick(item: NavItem, event?: MouseEvent): void;
|
|
168
194
|
/**
|
|
169
195
|
* Handle dismiss click on a dynamic nav item.
|
|
170
196
|
* Removes from the app's recent stack and refreshes nav items immediately.
|
|
171
197
|
* Stops propagation so the nav click handler doesn't fire.
|
|
172
198
|
*/
|
|
199
|
+
OnDismiss(item: NavItem, event: MouseEvent): void;
|
|
200
|
+
/** @deprecated Use {@link OnDismiss}. */
|
|
173
201
|
onDismiss(item: NavItem, event: MouseEvent): void;
|
|
174
202
|
static ɵfac: i0.ɵɵFactoryDeclaration<AppNavComponent, never>;
|
|
175
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<AppNavComponent, "mj-app-nav", never, { "OverflowEnabled": { "alias": "OverflowEnabled"; "required": false; }; "app": { "alias": "app"; "required": false; }; }, { "navItemClick": "navItemClick"; "navItemDismiss": "navItemDismiss"; }, never, ["*"], false, never>;
|
|
203
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<AppNavComponent, "mj-app-nav", never, { "OverflowEnabled": { "alias": "OverflowEnabled"; "required": false; }; "app": { "alias": "app"; "required": false; }; }, { "NavItemClick": "NavItemClick"; "navItemClick": "navItemClick"; "NavItemDismiss": "NavItemDismiss"; "navItemDismiss": "navItemDismiss"; }, never, ["*"], false, never>;
|
|
176
204
|
}
|
|
177
205
|
//# sourceMappingURL=app-nav.component.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-nav.component.d.ts","sourceRoot":"","sources":["../../../../../src/lib/shell/components/header/app-nav.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,iBAAiB,EAA2B,UAAU,EAA2B,MAAM,eAAe,CAAC;AAC1L,OAAO,EAAE,eAAe,EAAkB,OAAO,EAAE,qBAAqB,EAA0B,MAAM,qCAAqC,CAAC;AAC9I,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;;AAG1D;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;;GASG;AACH,qBAOa,eAAgB,YAAW,MAAM,EAAE,SAAS,EAAE,aAAa;
|
|
1
|
+
{"version":3,"file":"app-nav.component.d.ts","sourceRoot":"","sources":["../../../../../src/lib/shell/components/header/app-nav.component.ts"],"names":[],"mappings":"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"}
|