@c8y/ngx-components 1021.22.67 → 1021.22.69
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/alarms/alarm-details.component.d.ts +0 -4
- package/alarms/alarm-details.component.d.ts.map +1 -1
- package/core/common/interval-based-reload.abstract.d.ts +12 -1
- package/core/common/interval-based-reload.abstract.d.ts.map +1 -1
- package/esm2022/alarms/alarm-details.component.mjs +10 -10
- package/esm2022/core/common/interval-based-reload.abstract.mjs +50 -2
- package/esm2022/widgets/implementations/alarms/alarm-widget-alarms-reload.component.mjs +9 -7
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.mjs +9 -7
- package/fesm2022/c8y-ngx-components-alarms.mjs +5 -5
- package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs +8 -6
- package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +8 -6
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +392 -346
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/locales/de.po +9 -0
- package/locales/es.po +9 -0
- package/locales/fr.po +9 -0
- package/locales/ja_JP.po +9 -0
- package/locales/ko.po +9 -0
- package/locales/locales.pot +9 -0
- package/locales/nl.po +9 -0
- package/locales/pl.po +9 -0
- package/locales/pt_BR.po +9 -0
- package/locales/zh_CN.po +9 -0
- package/locales/zh_TW.po +9 -0
- package/package.json +1 -1
- package/widgets/implementations/alarms/alarm-widget-alarms-reload.component.d.ts +7 -2
- package/widgets/implementations/alarms/alarm-widget-alarms-reload.component.d.ts.map +1 -1
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.d.ts +7 -2
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.d.ts.map +1 -1
|
@@ -4,7 +4,7 @@ import * as i2$2 from 'ngx-bootstrap/dropdown';
|
|
|
4
4
|
import { BsDropdownModule, BsDropdownDirective } from 'ngx-bootstrap/dropdown';
|
|
5
5
|
import * as i3$1 from '@angular/cdk/a11y';
|
|
6
6
|
import { A11yModule } from '@angular/cdk/a11y';
|
|
7
|
-
import { castArray, flatten, uniq, sortBy, groupBy, camelCase, isEqual, isUndefined, throttle as throttle$1, keys, get, isNaN as isNaN$1, isFinite, each, mapValues, mapKeys, forEach, reduce, union, cloneDeep, uniqBy, assign, min, every, first, map as map$2, find, negate, upperFirst, memoize as memoize$1, property, some, entries, omitBy, isDate,
|
|
7
|
+
import { castArray, flatten, uniq, sortBy, groupBy, camelCase, isEqual, isUndefined, throttle as throttle$1, keys, get, isNaN as isNaN$1, isFinite, each, mapValues, mapKeys, forEach, reduce, union, cloneDeep, uniqBy, assign, min, every, first, map as map$2, find, negate, upperFirst, memoize as memoize$1, property, some, entries, omitBy, isDate, flatMap, orderBy, isEmpty, filter as filter$2, snakeCase, matches, isString, clone, toNumber, isEqualWith, escape as escape$1, escapeRegExp, assignWith, set, omit, pick, has, transform, identity, flow, isNil, chunk, values, without, indexOf, parseInt as parseInt$1, kebabCase, forOwn } from 'lodash-es';
|
|
8
8
|
import { merge, of, defer, combineLatest, race, isObservable, from, Subject, BehaviorSubject, NEVER, Observable, firstValueFrom, map as map$1, distinctUntilChanged as distinctUntilChanged$1, fromEvent, pipe, throwError, concat, filter as filter$1, tap as tap$1, EMPTY, timer, fromEventPattern, startWith as startWith$1, switchMap as switchMap$1, takeUntil as takeUntil$1, empty, forkJoin, ReplaySubject, interval, shareReplay as shareReplay$1, mergeMap as mergeMap$1 } from 'rxjs';
|
|
9
9
|
import { map, distinctUntilChanged, filter, startWith, switchMap, take, shareReplay, scan, debounceTime, share, takeUntil, tap, catchError, first as first$1, retryWhen, delay, concatMap, debounce, sample, withLatestFrom, mergeMap, every as every$1, toArray, merge as merge$1, expand, skip, mapTo, finalize, reduce as reduce$1, combineLatestWith } from 'rxjs/operators';
|
|
10
10
|
import * as i1 from '@c8y/client';
|
|
@@ -9438,157 +9438,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
9438
9438
|
args: [{ providedIn: 'root' }]
|
|
9439
9439
|
}] });
|
|
9440
9440
|
|
|
9441
|
-
/**
|
|
9442
|
-
* Abstract class representing an interval reload functionality.
|
|
9443
|
-
* This class provides methods and properties for managing an interval-based reload mechanism.
|
|
9444
|
-
*/
|
|
9445
|
-
class IntervalBasedReload {
|
|
9446
|
-
/**
|
|
9447
|
-
* Stops the countdown and triggers a refresh action.
|
|
9448
|
-
* This function is responsible for halting the countdown interval component's operation.
|
|
9449
|
-
* After stopping the countdown, it emits an `onCountdownEnded` event.
|
|
9450
|
-
* This event is used to inform external components that the countdown has ended,
|
|
9451
|
-
* typically prompting them to reload or refresh their data.
|
|
9452
|
-
*/
|
|
9453
|
-
autoRefreshList() {
|
|
9454
|
-
if (this.isIntervalRefreshToggleOn && this.isAutoRefreshEnabled) {
|
|
9455
|
-
this.countdownIntervalComponent.stop();
|
|
9456
|
-
}
|
|
9457
|
-
this.onCountdownEnded.emit();
|
|
9458
|
-
}
|
|
9459
|
-
/**
|
|
9460
|
-
* Manages the countdown timer's visibility and state in response to user scrolling.
|
|
9461
|
-
*
|
|
9462
|
-
* This method toggles the countdown timer based on the user's scrolling behavior. It uses
|
|
9463
|
-
* the `disableCountdown` and `enableCountdown` methods for handling the countdown state.
|
|
9464
|
-
*
|
|
9465
|
-
* - If the user is scrolling down while the countdown is visible (`isScrolling` is true and
|
|
9466
|
-
* `hideCountdown` is false), `disableCountdown` is called to stop and hide the countdown,
|
|
9467
|
-
* and `isIntervalRefreshToggleOn` is set to false.
|
|
9468
|
-
*
|
|
9469
|
-
* - If the user has stopped scrolling, the countdown subscription is closed, and the countdown
|
|
9470
|
-
* is hidden (`!isScrolling`, `countdownSubscription?.closed`, `hideCountdown`), `enableCountdown`
|
|
9471
|
-
* is called to show and restart the countdown, and `isIntervalRefreshToggleOn` is set to true.
|
|
9472
|
-
*/
|
|
9473
|
-
handleScrolling() {
|
|
9474
|
-
// Checks if the user has scrolled down while the countdown is visible
|
|
9475
|
-
const onUserScrollDownHide = this.isScrolling && !this.hideCountdown;
|
|
9476
|
-
if (onUserScrollDownHide) {
|
|
9477
|
-
this.disableCountdown();
|
|
9478
|
-
this.isIntervalRefreshToggleOn = false;
|
|
9479
|
-
return;
|
|
9480
|
-
}
|
|
9481
|
-
// Checks if the user has stopped scrolling and the countdown is currently hidden
|
|
9482
|
-
const onUserScrollTopShow = !this.isScrolling && this.countdownSubscription?.closed && this.hideCountdown;
|
|
9483
|
-
if (onUserScrollTopShow) {
|
|
9484
|
-
this.isIntervalRefreshToggleOn = true;
|
|
9485
|
-
this.enableCountdown();
|
|
9486
|
-
}
|
|
9487
|
-
}
|
|
9488
|
-
/**
|
|
9489
|
-
* Handles the toggle state of the countdown on button click.
|
|
9490
|
-
*
|
|
9491
|
-
* This method is triggered by a mouse event, typically a click on the countdown toggle button.
|
|
9492
|
-
* It toggles `isIntervalRefreshToggleOn` to reflect the current state of the countdown timer.
|
|
9493
|
-
*
|
|
9494
|
-
* - If `isIntervalRefreshToggleOn` is set to false, indicating that the countdown should be stopped,
|
|
9495
|
-
* `disableCountdown` is called, and `manuallyDisabledCountdown` is set to true.
|
|
9496
|
-
*
|
|
9497
|
-
* - If `isIntervalRefreshToggleOn` is true and the countdown subscription is closed, indicating that
|
|
9498
|
-
* the countdown can be started, `enableCountdown` is called, and `manuallyDisabledCountdown`
|
|
9499
|
-
* is set to false.
|
|
9500
|
-
*
|
|
9501
|
-
* @param $event - The MouseEvent that triggered this method.
|
|
9502
|
-
*/
|
|
9503
|
-
onToggleCountdownButtonState($event) {
|
|
9504
|
-
$event.preventDefault();
|
|
9505
|
-
this.isIntervalRefreshToggleOn = !this.isRefreshDisabled && !this.isIntervalRefreshToggleOn;
|
|
9506
|
-
this.updateCountdownButtonTooltipText();
|
|
9507
|
-
if (!this.isIntervalRefreshToggleOn) {
|
|
9508
|
-
this.disableCountdown();
|
|
9509
|
-
this.manuallyDisabledCountdown = true;
|
|
9510
|
-
return;
|
|
9511
|
-
}
|
|
9512
|
-
const onRefreshToggleOn = this.isIntervalRefreshToggleOn && this.countdownSubscription.closed;
|
|
9513
|
-
if (onRefreshToggleOn) {
|
|
9514
|
-
this.enableCountdown();
|
|
9515
|
-
this.manuallyDisabledCountdown = false;
|
|
9516
|
-
}
|
|
9517
|
-
}
|
|
9518
|
-
/**
|
|
9519
|
-
* This function listens for changes in the `isLoading` observable, filtering out any truthy values.
|
|
9520
|
-
* Once a falsy value is detected (indicating that loading has finished), it attempts to start the countdown.
|
|
9521
|
-
*
|
|
9522
|
-
* IMPORTANT: If the widget's configuration (refreshInterval, check template) is not set prior to executing countdownIntervalComponent?.start,
|
|
9523
|
-
* the countdown interval will not start!
|
|
9524
|
-
*
|
|
9525
|
-
* @param injector - The injector used to provide necessary dependencies
|
|
9526
|
-
* within the `runInInjectionContext`.
|
|
9527
|
-
*/
|
|
9528
|
-
startCountdown() {
|
|
9529
|
-
this.countdownSubscription = this.isLoading
|
|
9530
|
-
.pipe(filter$1(isLoading => !Boolean(isLoading)), tap$1(() => {
|
|
9531
|
-
this.countdownIntervalComponent?.start();
|
|
9532
|
-
}))
|
|
9533
|
-
.subscribe();
|
|
9534
|
-
}
|
|
9535
|
-
/**
|
|
9536
|
-
* Disables and hides the countdown timer.
|
|
9537
|
-
*
|
|
9538
|
-
* This method stops the ongoing countdown process by
|
|
9539
|
-
* stopping the `countdownIntervalComponent` if it exists. It then hides the countdown timer
|
|
9540
|
-
* by setting `hideCountdown` to true. This method encapsulates the logic required to halt and
|
|
9541
|
-
* conceal the countdown timer.
|
|
9542
|
-
*/
|
|
9543
|
-
disableCountdown() {
|
|
9544
|
-
this.countdownSubscription.unsubscribe();
|
|
9545
|
-
this.countdownIntervalComponent?.stop();
|
|
9546
|
-
this.hideCountdown = true;
|
|
9547
|
-
}
|
|
9548
|
-
}
|
|
9549
|
-
|
|
9550
|
-
class AppSwitcherService {
|
|
9551
|
-
constructor(ui) {
|
|
9552
|
-
this.ui = ui;
|
|
9553
|
-
this.visibleApplicationTypes = ['HOSTED', 'EXTERNAL'];
|
|
9554
|
-
const { currentTenant } = this.ui;
|
|
9555
|
-
this.appsOfCurrentUser$ = this.ui.currentAppsOfUser.pipe(map(apps => this.filterVisible(apps)), shareReplay(1));
|
|
9556
|
-
this.oneCloudApps$ = this.appsOfCurrentUser$.pipe(map(apps => apps.filter(app => this.isCloudApp(app))), map(cloudApps => this.orderApps(cloudApps)), shareReplay(1));
|
|
9557
|
-
const nonCloudApps$ = this.appsOfCurrentUser$.pipe(map(apps => apps.filter(app => !this.isCloudApp(app))));
|
|
9558
|
-
this.apps$ = combineLatest([nonCloudApps$, currentTenant]).pipe(map(([apps, tenant]) => this.filterDuplicates(apps, tenant)), map(apps => this.orderApps(apps)), shareReplay(1));
|
|
9559
|
-
this.finishedLoading$ = combineLatest([this.apps$, this.oneCloudApps$]).pipe(map(() => true), take(1), shareReplay(1));
|
|
9560
|
-
}
|
|
9561
|
-
filterVisible(apps) {
|
|
9562
|
-
return apps.filter(app => this.visibleApplicationTypes.includes(app.type) &&
|
|
9563
|
-
!app.noAppSwitcher &&
|
|
9564
|
-
!this.isPackage(app) &&
|
|
9565
|
-
!get(app, 'manifest.noAppSwitcher'));
|
|
9566
|
-
}
|
|
9567
|
-
isPackage(app) {
|
|
9568
|
-
return !!app.manifest?.isPackage;
|
|
9569
|
-
}
|
|
9570
|
-
isCloudApp(app) {
|
|
9571
|
-
return !!app.cloud;
|
|
9572
|
-
}
|
|
9573
|
-
filterDuplicates(apps, tenant) {
|
|
9574
|
-
// Filter out apps that have duplicate contextpaths and are not own owned by the current tenant;
|
|
9575
|
-
const filterFn = app => !apps.some(otherApp => app !== otherApp &&
|
|
9576
|
-
app.contextPath &&
|
|
9577
|
-
app.contextPath === otherApp.contextPath &&
|
|
9578
|
-
app.owner.tenant.id !== tenant.name);
|
|
9579
|
-
return apps.filter(filterFn);
|
|
9580
|
-
}
|
|
9581
|
-
orderApps(apps) {
|
|
9582
|
-
return orderBy(apps, ({ name }) => name.toLowerCase());
|
|
9583
|
-
}
|
|
9584
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AppSwitcherService, deps: [{ token: AppStateService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
9585
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AppSwitcherService, providedIn: 'root' }); }
|
|
9586
|
-
}
|
|
9587
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AppSwitcherService, decorators: [{
|
|
9588
|
-
type: Injectable,
|
|
9589
|
-
args: [{ providedIn: 'root' }]
|
|
9590
|
-
}], ctorParameters: () => [{ type: AppStateService }] });
|
|
9591
|
-
|
|
9592
9441
|
/**
|
|
9593
9442
|
* This service is handling the cookie banner and cookie preferences related logic.
|
|
9594
9443
|
*/
|
|
@@ -10219,199 +10068,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
10219
10068
|
args: ['click']
|
|
10220
10069
|
}] } });
|
|
10221
10070
|
|
|
10222
|
-
class AppIconComponent {
|
|
10223
|
-
constructor(options) {
|
|
10224
|
-
this.options = options;
|
|
10225
|
-
/** Application name. */
|
|
10226
|
-
this.name = '';
|
|
10227
|
-
this.model = this.emptyModel();
|
|
10228
|
-
this.c8yAppIconsList = {
|
|
10229
|
-
analyticsbuilder: 'analytics-builder',
|
|
10230
|
-
'analytics-builder': 'analytics-builder',
|
|
10231
|
-
cockpit: 'cockpit',
|
|
10232
|
-
devicemanagement: 'device-management',
|
|
10233
|
-
administration: 'administration',
|
|
10234
|
-
apamaepl: 'apama-epl'
|
|
10235
|
-
};
|
|
10236
|
-
this.white = false;
|
|
10237
|
-
this.defaultIconStyle = {
|
|
10238
|
-
'background-repeat': 'no-repeat',
|
|
10239
|
-
'background-size': 'contain',
|
|
10240
|
-
'background-position': 'center',
|
|
10241
|
-
'aspect-ratio': '1'
|
|
10242
|
-
};
|
|
10243
|
-
this.faIconMatch = /fa-/;
|
|
10244
|
-
this.c8yMatch = /^c8y-/;
|
|
10245
|
-
this.dltC8yMatch = /^dlt-c8y-/;
|
|
10246
|
-
}
|
|
10247
|
-
ngOnInit() {
|
|
10248
|
-
this.loadSetup();
|
|
10249
|
-
}
|
|
10250
|
-
ngOnChanges() {
|
|
10251
|
-
this.loadSetup();
|
|
10252
|
-
}
|
|
10253
|
-
emptyModel() {
|
|
10254
|
-
return {
|
|
10255
|
-
appIcon: '',
|
|
10256
|
-
configIcon: '',
|
|
10257
|
-
showIcon: true,
|
|
10258
|
-
iconClass: ['c8y-icon'],
|
|
10259
|
-
appNameAbbr: '',
|
|
10260
|
-
iconStyle: {}
|
|
10261
|
-
};
|
|
10262
|
-
}
|
|
10263
|
-
isC8y(icon) {
|
|
10264
|
-
return this.c8yMatch.test(icon);
|
|
10265
|
-
}
|
|
10266
|
-
isFaIcon(icon) {
|
|
10267
|
-
return this.faIconMatch.test(icon);
|
|
10268
|
-
}
|
|
10269
|
-
isDltC8y(icon) {
|
|
10270
|
-
return this.dltC8yMatch.test(icon);
|
|
10271
|
-
}
|
|
10272
|
-
loadSetup() {
|
|
10273
|
-
this.model = this.emptyModel();
|
|
10274
|
-
this.model.configIcon = this.getPropertyFromAppOrOptions(['config', 'icon']);
|
|
10275
|
-
if (!this.model.configIcon) {
|
|
10276
|
-
this.model.appIcon = this.iconFromAppDefinition();
|
|
10277
|
-
const iconUrl = this.iconUrlFromAppDefinition();
|
|
10278
|
-
if (iconUrl) {
|
|
10279
|
-
this.model.iconStyle = Object.assign({ 'background-image': iconUrl }, this.defaultIconStyle);
|
|
10280
|
-
}
|
|
10281
|
-
else if (!this.model.appIcon) {
|
|
10282
|
-
// only set static icon if no icon is set in the app definition
|
|
10283
|
-
this.model.appIcon = this.findStaticIcon();
|
|
10284
|
-
}
|
|
10285
|
-
}
|
|
10286
|
-
this.model.showIcon =
|
|
10287
|
-
!!this.model.appIcon || !isEmpty(this.model.iconStyle) || !!this.model.configIcon;
|
|
10288
|
-
this.model.iconClass = [
|
|
10289
|
-
'c8y-icon',
|
|
10290
|
-
this.mapFontAwesomeToDelightIcons(this.model.appIcon),
|
|
10291
|
-
this.white ? 'c8y-icon-white' : 'c8y-icon-duocolor',
|
|
10292
|
-
!isEmpty(this.model.iconStyle) ? 'app-img-icon' : ''
|
|
10293
|
-
].filter(c => !!c);
|
|
10294
|
-
const name = this.name || this.app?.name || '';
|
|
10295
|
-
this.model.appNameAbbr = name.substring(0, 2);
|
|
10296
|
-
}
|
|
10297
|
-
iconFromAppDefinition() {
|
|
10298
|
-
return (this.getPropertyFromAppOrOptions(['icon', 'class']) ||
|
|
10299
|
-
this.getPropertyFromAppOrOptions(['manifest', 'icon', 'class']));
|
|
10300
|
-
}
|
|
10301
|
-
iconUrlFromAppDefinition() {
|
|
10302
|
-
return this.getPropertyFromAppOrOptions(['icon', 'url']);
|
|
10303
|
-
}
|
|
10304
|
-
getPropertyFromAppOrOptions(path) {
|
|
10305
|
-
const app = this.app || this.options;
|
|
10306
|
-
return get(app, ['manifest', ...path]) || get(app, path);
|
|
10307
|
-
}
|
|
10308
|
-
findStaticIcon() {
|
|
10309
|
-
const contextPath = this.contextPath || this.name || this.app?.contextPath || this.app?.name;
|
|
10310
|
-
if (!contextPath) {
|
|
10311
|
-
return undefined;
|
|
10312
|
-
}
|
|
10313
|
-
const appContextPathNormalized = find(keys(this.c8yAppIconsList), cp => {
|
|
10314
|
-
return contextPath.indexOf(cp) > -1;
|
|
10315
|
-
});
|
|
10316
|
-
const appIcon = this.c8yAppIconsList[appContextPathNormalized];
|
|
10317
|
-
return appIcon ? `c8y-icon-${appIcon}` : undefined;
|
|
10318
|
-
}
|
|
10319
|
-
mapFontAwesomeToDelightIcons(iconClasses) {
|
|
10320
|
-
if (!iconClasses) {
|
|
10321
|
-
return;
|
|
10322
|
-
}
|
|
10323
|
-
if (this.isFaIcon(iconClasses)) {
|
|
10324
|
-
const regex = /fa-/gi;
|
|
10325
|
-
return iconClasses.replace(regex, 'dlt-c8y-icon-');
|
|
10326
|
-
}
|
|
10327
|
-
return this.isC8y(iconClasses) || this.isDltC8y(iconClasses)
|
|
10328
|
-
? iconClasses
|
|
10329
|
-
: `dlt-c8y-icon-${iconClasses}`;
|
|
10330
|
-
}
|
|
10331
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AppIconComponent, deps: [{ token: OptionsService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
10332
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: AppIconComponent, isStandalone: true, selector: "c8y-app-icon", inputs: { contextPath: "contextPath", name: "name", app: "app" }, host: { classAttribute: "c8y-app-icon" }, usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"model.showIcon; else noIcon\">\n <i\n [ngStyle]=\"model.iconStyle\"\n *ngIf=\"!model.configIcon\"\n [ngClass]=\"model.iconClass\"\n ></i>\n <i\n [c8yIcon]=\"model.configIcon\"\n *ngIf=\"model.configIcon\"\n ></i>\n</ng-container>\n\n<ng-template #noIcon>\n <span class=\"app-noicon\">{{ model.appNameAbbr }}</span>\n</ng-template>\n", dependencies: [{ kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
|
|
10333
|
-
}
|
|
10334
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AppIconComponent, decorators: [{
|
|
10335
|
-
type: Component,
|
|
10336
|
-
args: [{ selector: 'c8y-app-icon', host: { class: 'c8y-app-icon' }, standalone: true, imports: [IconDirective, NgStyle, NgIf, NgClass], template: "<ng-container *ngIf=\"model.showIcon; else noIcon\">\n <i\n [ngStyle]=\"model.iconStyle\"\n *ngIf=\"!model.configIcon\"\n [ngClass]=\"model.iconClass\"\n ></i>\n <i\n [c8yIcon]=\"model.configIcon\"\n *ngIf=\"model.configIcon\"\n ></i>\n</ng-container>\n\n<ng-template #noIcon>\n <span class=\"app-noicon\">{{ model.appNameAbbr }}</span>\n</ng-template>\n" }]
|
|
10337
|
-
}], ctorParameters: () => [{ type: OptionsService }], propDecorators: { contextPath: [{
|
|
10338
|
-
type: Input
|
|
10339
|
-
}], name: [{
|
|
10340
|
-
type: Input
|
|
10341
|
-
}], app: [{
|
|
10342
|
-
type: Input
|
|
10343
|
-
}] } });
|
|
10344
|
-
|
|
10345
|
-
class AppHrefPipe {
|
|
10346
|
-
constructor(applications) {
|
|
10347
|
-
this.applications = applications;
|
|
10348
|
-
this.dynamicOptionsUrlKey = 'dynamicOptionsUrl';
|
|
10349
|
-
}
|
|
10350
|
-
transform(app, addDynamicOptionsUrlIfSet = false) {
|
|
10351
|
-
let href = this.applications.getHref(app);
|
|
10352
|
-
if (!addDynamicOptionsUrlIfSet) {
|
|
10353
|
-
return href;
|
|
10354
|
-
}
|
|
10355
|
-
const searchParams = new URLSearchParams(window.location.search);
|
|
10356
|
-
const dynamicOptionsUrlValue = searchParams.get(this.dynamicOptionsUrlKey);
|
|
10357
|
-
if (!dynamicOptionsUrlValue) {
|
|
10358
|
-
return href;
|
|
10359
|
-
}
|
|
10360
|
-
if (!href.endsWith('/')) {
|
|
10361
|
-
href += '/';
|
|
10362
|
-
}
|
|
10363
|
-
href += `index.html?${searchParams.toString()}`;
|
|
10364
|
-
return href;
|
|
10365
|
-
}
|
|
10366
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AppHrefPipe, deps: [{ token: i1.ApplicationService }], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
10367
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.9", ngImport: i0, type: AppHrefPipe, name: "appHref" }); }
|
|
10368
|
-
}
|
|
10369
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AppHrefPipe, decorators: [{
|
|
10370
|
-
type: Pipe,
|
|
10371
|
-
args: [{
|
|
10372
|
-
name: 'appHref'
|
|
10373
|
-
}]
|
|
10374
|
-
}], ctorParameters: () => [{ type: i1.ApplicationService }] });
|
|
10375
|
-
|
|
10376
|
-
class IsActiveAppPipe {
|
|
10377
|
-
constructor(ui) {
|
|
10378
|
-
this.ui = ui;
|
|
10379
|
-
}
|
|
10380
|
-
transform(app) {
|
|
10381
|
-
const { contextPath } = app;
|
|
10382
|
-
return this.ui.state$.pipe(map(state => get(state, 'app.contextPath')), distinctUntilChanged(), map(currentContextPath => contextPath === currentContextPath));
|
|
10383
|
-
}
|
|
10384
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: IsActiveAppPipe, deps: [{ token: AppStateService }], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
10385
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.9", ngImport: i0, type: IsActiveAppPipe, name: "isActiveApp" }); }
|
|
10386
|
-
}
|
|
10387
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: IsActiveAppPipe, decorators: [{
|
|
10388
|
-
type: Pipe,
|
|
10389
|
-
args: [{
|
|
10390
|
-
name: 'isActiveApp'
|
|
10391
|
-
}]
|
|
10392
|
-
}], ctorParameters: () => [{ type: AppStateService }] });
|
|
10393
|
-
|
|
10394
|
-
class AppSwitcherInlineComponent {
|
|
10395
|
-
constructor(switcherService) {
|
|
10396
|
-
this.switcherService = switcherService;
|
|
10397
|
-
}
|
|
10398
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AppSwitcherInlineComponent, deps: [{ token: AppSwitcherService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
10399
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: AppSwitcherInlineComponent, selector: "c8y-app-switcher-inline", ngImport: i0, template: "<div\n class=\"d-flex a-i-center j-c-center p-4\"\n *ngIf=\"!(switcherService.finishedLoading$ | async)\"\n>\n <c8y-loading></c8y-loading>\n</div>\n<ng-container *ngIf=\"switcherService.oneCloudApps$ | async as oneCloudApps\">\n <div\n class=\"app-switcher-sagcloud\"\n *ngIf=\"oneCloudApps.length > 0\"\n >\n <a\n class=\"appLink\"\n title=\"{{ app.name | humanizeAppName | async }}\"\n *ngFor=\"let app of oneCloudApps\"\n [href]=\"app | appHref\"\n c8yProductExperience\n [actionName]=\"'appSwitched'\"\n [actionData]=\"{ applicationName: app && app.name }\"\n >\n <c8y-app-icon\n [app]=\"app\"\n [name]=\"app.name\"\n [contextPath]=\"app.contextPath\"\n ></c8y-app-icon>\n <span class=\"text-truncate-wrap\">{{ app | humanizeAppName | async }}</span>\n </a>\n </div>\n</ng-container>\n<div\n class=\"app-switcher\"\n *ngIf=\"switcherService.apps$ | async as apps\"\n>\n <a\n class=\"appLink\"\n title=\"{{ app.name | humanizeAppName | async }}\"\n [ngClass]=\"(app | isActiveApp | async) ? 'active' : ''\"\n *ngFor=\"let app of apps\"\n [href]=\"app | appHref : true\"\n [rel]=\"app.type === 'EXTERNAL' ? 'noopener noreferrer' : ''\"\n c8yProductExperience\n [actionName]=\"'appSwitched'\"\n [actionData]=\"{ applicationName: app && app.name }\"\n >\n <c8y-app-icon\n [app]=\"app\"\n [name]=\"app.name\"\n [contextPath]=\"app.contextPath\"\n ></c8y-app-icon>\n <span class=\"text-truncate-wrap\">{{ app | humanizeAppName | async }}</span>\n </a>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "directive", type: ProductExperienceDirective, selector: "[c8yProductExperience]", inputs: ["actionName", "actionData", "inherit", "suppressDataOverriding"] }, { kind: "component", type: AppIconComponent, selector: "c8y-app-icon", inputs: ["contextPath", "name", "app"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: HumanizeAppNamePipe, name: "humanizeAppName" }, { kind: "pipe", type: AppHrefPipe, name: "appHref" }, { kind: "pipe", type: IsActiveAppPipe, name: "isActiveApp" }] }); }
|
|
10400
|
-
}
|
|
10401
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AppSwitcherInlineComponent, decorators: [{
|
|
10402
|
-
type: Component,
|
|
10403
|
-
args: [{ selector: 'c8y-app-switcher-inline', template: "<div\n class=\"d-flex a-i-center j-c-center p-4\"\n *ngIf=\"!(switcherService.finishedLoading$ | async)\"\n>\n <c8y-loading></c8y-loading>\n</div>\n<ng-container *ngIf=\"switcherService.oneCloudApps$ | async as oneCloudApps\">\n <div\n class=\"app-switcher-sagcloud\"\n *ngIf=\"oneCloudApps.length > 0\"\n >\n <a\n class=\"appLink\"\n title=\"{{ app.name | humanizeAppName | async }}\"\n *ngFor=\"let app of oneCloudApps\"\n [href]=\"app | appHref\"\n c8yProductExperience\n [actionName]=\"'appSwitched'\"\n [actionData]=\"{ applicationName: app && app.name }\"\n >\n <c8y-app-icon\n [app]=\"app\"\n [name]=\"app.name\"\n [contextPath]=\"app.contextPath\"\n ></c8y-app-icon>\n <span class=\"text-truncate-wrap\">{{ app | humanizeAppName | async }}</span>\n </a>\n </div>\n</ng-container>\n<div\n class=\"app-switcher\"\n *ngIf=\"switcherService.apps$ | async as apps\"\n>\n <a\n class=\"appLink\"\n title=\"{{ app.name | humanizeAppName | async }}\"\n [ngClass]=\"(app | isActiveApp | async) ? 'active' : ''\"\n *ngFor=\"let app of apps\"\n [href]=\"app | appHref : true\"\n [rel]=\"app.type === 'EXTERNAL' ? 'noopener noreferrer' : ''\"\n c8yProductExperience\n [actionName]=\"'appSwitched'\"\n [actionData]=\"{ applicationName: app && app.name }\"\n >\n <c8y-app-icon\n [app]=\"app\"\n [name]=\"app.name\"\n [contextPath]=\"app.contextPath\"\n ></c8y-app-icon>\n <span class=\"text-truncate-wrap\">{{ app | humanizeAppName | async }}</span>\n </a>\n</div>\n" }]
|
|
10404
|
-
}], ctorParameters: () => [{ type: AppSwitcherService }] });
|
|
10405
|
-
|
|
10406
|
-
class AppSwitcherComponent {
|
|
10407
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AppSwitcherComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
10408
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: AppSwitcherComponent, selector: "c8y-app-switcher", ngImport: i0, template: "<div\n class=\"app-switcher-dropdown\"\n dropdown\n #appSwitcherDropdown=\"bs-dropdown\"\n [cdkTrapFocus]=\"appSwitcherDropdown.isOpen\"\n>\n <button\n class=\"main-header-button c8y-dropdown dropdown-toggle\"\n title=\"{{ 'Application switcher' | translate }}\"\n id=\"appSwitcherDropdown\"\n type=\"button\"\n dropdownToggle\n >\n <i\n class=\"icon-2x\"\n c8yIcon=\"th\"\n ></i>\n </button>\n <div\n class=\"app-switcher-dropdown-menu dropdown-menu\"\n aria-labelledby=\"appSwitcherDropdown\"\n role=\"group\"\n *dropdownMenu\n >\n <c8y-app-switcher-inline></c8y-app-switcher-inline>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2$2.BsDropdownMenuDirective, selector: "[bsDropdownMenu],[dropdownMenu]", exportAs: ["bs-dropdown-menu"] }, { kind: "directive", type: i2$2.BsDropdownToggleDirective, selector: "[bsDropdownToggle],[dropdownToggle]", exportAs: ["bs-dropdown-toggle"] }, { kind: "directive", type: i2$2.BsDropdownDirective, selector: "[bsDropdown], [dropdown]", inputs: ["placement", "triggers", "container", "dropup", "autoClose", "isAnimated", "insideClick", "isDisabled", "isOpen"], outputs: ["isOpenChange", "onShown", "onHidden"], exportAs: ["bs-dropdown"] }, { kind: "directive", type: i3$1.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "component", type: AppSwitcherInlineComponent, selector: "c8y-app-switcher-inline" }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
|
|
10409
|
-
}
|
|
10410
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AppSwitcherComponent, decorators: [{
|
|
10411
|
-
type: Component,
|
|
10412
|
-
args: [{ selector: 'c8y-app-switcher', template: "<div\n class=\"app-switcher-dropdown\"\n dropdown\n #appSwitcherDropdown=\"bs-dropdown\"\n [cdkTrapFocus]=\"appSwitcherDropdown.isOpen\"\n>\n <button\n class=\"main-header-button c8y-dropdown dropdown-toggle\"\n title=\"{{ 'Application switcher' | translate }}\"\n id=\"appSwitcherDropdown\"\n type=\"button\"\n dropdownToggle\n >\n <i\n class=\"icon-2x\"\n c8yIcon=\"th\"\n ></i>\n </button>\n <div\n class=\"app-switcher-dropdown-menu dropdown-menu\"\n aria-labelledby=\"appSwitcherDropdown\"\n role=\"group\"\n *dropdownMenu\n >\n <c8y-app-switcher-inline></c8y-app-switcher-inline>\n </div>\n</div>\n" }]
|
|
10413
|
-
}] });
|
|
10414
|
-
|
|
10415
10071
|
class UserEngagementsService {
|
|
10416
10072
|
constructor(document, userPreferencesService, gainsightService) {
|
|
10417
10073
|
this.document = document;
|
|
@@ -10643,6 +10299,396 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
10643
10299
|
}]
|
|
10644
10300
|
}], ctorParameters: () => [{ type: AppStateService }, { type: GainsightService }, { type: CookieBannerService }, { type: UserEngagementsService }] });
|
|
10645
10301
|
|
|
10302
|
+
const PRODUCT_EXPERIENCE_INTERVAL_BASED_RELOAD = {
|
|
10303
|
+
EVENTS: {
|
|
10304
|
+
INTERVAL_BASED_RELOAD: 'intervalBasedReload'
|
|
10305
|
+
},
|
|
10306
|
+
COMPONENTS: {
|
|
10307
|
+
ALARM_WIDGET_ALARM_RELOAD: 'alarm-widget-alarms-reload',
|
|
10308
|
+
DATAPOINTS_RELOAD: 'datapoints-reload'
|
|
10309
|
+
},
|
|
10310
|
+
ACTIONS: {
|
|
10311
|
+
MANUALLY_CHANGED_COUNTDOWN_STATE: 'manuallyChangedCountdownState'
|
|
10312
|
+
},
|
|
10313
|
+
RESULT: {
|
|
10314
|
+
MANUALLY_PAUSED_COUNTDOWN: 'manuallyPausedCountdown',
|
|
10315
|
+
MANUALLY_RESUMED_COUNTDOWN: 'manuallyResumedCountdown'
|
|
10316
|
+
}
|
|
10317
|
+
};
|
|
10318
|
+
const WIDGET_TYPE_VALUES = {
|
|
10319
|
+
ALARMS: 'alarms',
|
|
10320
|
+
DATA_POINTS_TABLE: 'dataPointsTable'
|
|
10321
|
+
};
|
|
10322
|
+
/**
|
|
10323
|
+
* Abstract class representing an interval reload functionality.
|
|
10324
|
+
* This class provides methods and properties for managing an interval-based reload mechanism.
|
|
10325
|
+
*/
|
|
10326
|
+
class IntervalBasedReload {
|
|
10327
|
+
constructor() {
|
|
10328
|
+
this.gainsightService = inject(GainsightService);
|
|
10329
|
+
}
|
|
10330
|
+
/**
|
|
10331
|
+
* Stops the countdown and triggers a refresh action.
|
|
10332
|
+
* This function is responsible for halting the countdown interval component's operation.
|
|
10333
|
+
* After stopping the countdown, it emits an `onCountdownEnded` event.
|
|
10334
|
+
* This event is used to inform external components that the countdown has ended,
|
|
10335
|
+
* typically prompting them to reload or refresh their data.
|
|
10336
|
+
*/
|
|
10337
|
+
autoRefreshList() {
|
|
10338
|
+
if (this.isIntervalRefreshToggleOn && this.isAutoRefreshEnabled) {
|
|
10339
|
+
this.countdownIntervalComponent.stop();
|
|
10340
|
+
}
|
|
10341
|
+
this.onCountdownEnded.emit();
|
|
10342
|
+
}
|
|
10343
|
+
/**
|
|
10344
|
+
* Manages the countdown timer's visibility and state in response to user scrolling.
|
|
10345
|
+
*
|
|
10346
|
+
* This method toggles the countdown timer based on the user's scrolling behavior. It uses
|
|
10347
|
+
* the `disableCountdown` and `enableCountdown` methods for handling the countdown state.
|
|
10348
|
+
*
|
|
10349
|
+
* - If the user is scrolling down while the countdown is visible (`isScrolling` is true and
|
|
10350
|
+
* `hideCountdown` is false), `disableCountdown` is called to stop and hide the countdown,
|
|
10351
|
+
* and `isIntervalRefreshToggleOn` is set to false.
|
|
10352
|
+
*
|
|
10353
|
+
* - If the user has stopped scrolling, the countdown subscription is closed, and the countdown
|
|
10354
|
+
* is hidden (`!isScrolling`, `countdownSubscription?.closed`, `hideCountdown`), `enableCountdown`
|
|
10355
|
+
* is called to show and restart the countdown, and `isIntervalRefreshToggleOn` is set to true.
|
|
10356
|
+
*/
|
|
10357
|
+
handleScrolling() {
|
|
10358
|
+
// Checks if the user has scrolled down while the countdown is visible
|
|
10359
|
+
const onUserScrollDownHide = this.isScrolling && !this.hideCountdown;
|
|
10360
|
+
if (onUserScrollDownHide) {
|
|
10361
|
+
this.disableCountdown();
|
|
10362
|
+
this.isIntervalRefreshToggleOn = false;
|
|
10363
|
+
return;
|
|
10364
|
+
}
|
|
10365
|
+
// Checks if the user has stopped scrolling and the countdown is currently hidden
|
|
10366
|
+
const onUserScrollTopShow = !this.isScrolling && this.countdownSubscription?.closed && this.hideCountdown;
|
|
10367
|
+
if (onUserScrollTopShow) {
|
|
10368
|
+
this.isIntervalRefreshToggleOn = true;
|
|
10369
|
+
this.enableCountdown();
|
|
10370
|
+
}
|
|
10371
|
+
}
|
|
10372
|
+
/**
|
|
10373
|
+
* Handles the toggle state of the countdown on button click.
|
|
10374
|
+
*
|
|
10375
|
+
* This method is triggered by a mouse event, typically a click on the countdown toggle button.
|
|
10376
|
+
* It toggles `isIntervalRefreshToggleOn` to reflect the current state of the countdown timer.
|
|
10377
|
+
*
|
|
10378
|
+
* - If `isIntervalRefreshToggleOn` is set to false, indicating that the countdown should be stopped,
|
|
10379
|
+
* `disableCountdown` is called, and `manuallyDisabledCountdown` is set to true.
|
|
10380
|
+
*
|
|
10381
|
+
* - If `isIntervalRefreshToggleOn` is true and the countdown subscription is closed, indicating that
|
|
10382
|
+
* the countdown can be started, `enableCountdown` is called, and `manuallyDisabledCountdown`
|
|
10383
|
+
* is set to false.
|
|
10384
|
+
*
|
|
10385
|
+
* @param $event - The MouseEvent that triggered this method.
|
|
10386
|
+
* @param widgetType - The type of the widget that triggered the event
|
|
10387
|
+
*/
|
|
10388
|
+
onToggleCountdownButtonState($event, widgetType) {
|
|
10389
|
+
$event.preventDefault();
|
|
10390
|
+
this.isIntervalRefreshToggleOn = !this.isRefreshDisabled && !this.isIntervalRefreshToggleOn;
|
|
10391
|
+
this.updateCountdownButtonTooltipText();
|
|
10392
|
+
if (!this.isIntervalRefreshToggleOn) {
|
|
10393
|
+
this.disableCountdown();
|
|
10394
|
+
this.manuallyDisabledCountdown = true;
|
|
10395
|
+
this.triggerGainsightEvent(widgetType, PRODUCT_EXPERIENCE_INTERVAL_BASED_RELOAD.ACTIONS.MANUALLY_CHANGED_COUNTDOWN_STATE, PRODUCT_EXPERIENCE_INTERVAL_BASED_RELOAD.RESULT.MANUALLY_PAUSED_COUNTDOWN);
|
|
10396
|
+
return;
|
|
10397
|
+
}
|
|
10398
|
+
const onRefreshToggleOn = this.isIntervalRefreshToggleOn && this.countdownSubscription.closed;
|
|
10399
|
+
if (onRefreshToggleOn) {
|
|
10400
|
+
this.enableCountdown();
|
|
10401
|
+
this.manuallyDisabledCountdown = false;
|
|
10402
|
+
this.triggerGainsightEvent(widgetType, PRODUCT_EXPERIENCE_INTERVAL_BASED_RELOAD.ACTIONS.MANUALLY_CHANGED_COUNTDOWN_STATE, PRODUCT_EXPERIENCE_INTERVAL_BASED_RELOAD.RESULT.MANUALLY_RESUMED_COUNTDOWN);
|
|
10403
|
+
}
|
|
10404
|
+
}
|
|
10405
|
+
/**
|
|
10406
|
+
* This function listens for changes in the `isLoading` observable, filtering out any truthy values.
|
|
10407
|
+
* Once a falsy value is detected (indicating that loading has finished), it attempts to start the countdown.
|
|
10408
|
+
*
|
|
10409
|
+
* IMPORTANT: If the widget's configuration (refreshInterval, check template) is not set prior to executing countdownIntervalComponent?.start,
|
|
10410
|
+
* the countdown interval will not start!
|
|
10411
|
+
*
|
|
10412
|
+
* @param injector - The injector used to provide necessary dependencies
|
|
10413
|
+
* within the `runInInjectionContext`.
|
|
10414
|
+
*/
|
|
10415
|
+
startCountdown() {
|
|
10416
|
+
this.countdownSubscription = this.isLoading
|
|
10417
|
+
.pipe(filter$1(isLoading => !Boolean(isLoading)), tap$1(() => {
|
|
10418
|
+
this.countdownIntervalComponent?.start();
|
|
10419
|
+
}))
|
|
10420
|
+
.subscribe();
|
|
10421
|
+
}
|
|
10422
|
+
/**
|
|
10423
|
+
* Disables and hides the countdown timer.
|
|
10424
|
+
*
|
|
10425
|
+
* This method stops the ongoing countdown process by
|
|
10426
|
+
* stopping the `countdownIntervalComponent` if it exists. It then hides the countdown timer
|
|
10427
|
+
* by setting `hideCountdown` to true. This method encapsulates the logic required to halt and
|
|
10428
|
+
* conceal the countdown timer.
|
|
10429
|
+
*/
|
|
10430
|
+
disableCountdown() {
|
|
10431
|
+
this.countdownSubscription.unsubscribe();
|
|
10432
|
+
this.countdownIntervalComponent?.stop();
|
|
10433
|
+
this.hideCountdown = true;
|
|
10434
|
+
}
|
|
10435
|
+
triggerGainsightEvent(widgetType, action, result) {
|
|
10436
|
+
if (widgetType) {
|
|
10437
|
+
this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE_INTERVAL_BASED_RELOAD.EVENTS.INTERVAL_BASED_RELOAD, {
|
|
10438
|
+
action,
|
|
10439
|
+
result,
|
|
10440
|
+
component: this.determineComponentName(widgetType),
|
|
10441
|
+
widget: widgetType
|
|
10442
|
+
});
|
|
10443
|
+
}
|
|
10444
|
+
}
|
|
10445
|
+
determineComponentName(widgetType) {
|
|
10446
|
+
switch (widgetType) {
|
|
10447
|
+
case WIDGET_TYPE_VALUES.ALARMS:
|
|
10448
|
+
return PRODUCT_EXPERIENCE_INTERVAL_BASED_RELOAD.COMPONENTS.ALARM_WIDGET_ALARM_RELOAD;
|
|
10449
|
+
case WIDGET_TYPE_VALUES.DATA_POINTS_TABLE:
|
|
10450
|
+
return PRODUCT_EXPERIENCE_INTERVAL_BASED_RELOAD.COMPONENTS.DATAPOINTS_RELOAD;
|
|
10451
|
+
default:
|
|
10452
|
+
return '';
|
|
10453
|
+
}
|
|
10454
|
+
}
|
|
10455
|
+
}
|
|
10456
|
+
|
|
10457
|
+
class AppSwitcherService {
|
|
10458
|
+
constructor(ui) {
|
|
10459
|
+
this.ui = ui;
|
|
10460
|
+
this.visibleApplicationTypes = ['HOSTED', 'EXTERNAL'];
|
|
10461
|
+
const { currentTenant } = this.ui;
|
|
10462
|
+
this.appsOfCurrentUser$ = this.ui.currentAppsOfUser.pipe(map(apps => this.filterVisible(apps)), shareReplay(1));
|
|
10463
|
+
this.oneCloudApps$ = this.appsOfCurrentUser$.pipe(map(apps => apps.filter(app => this.isCloudApp(app))), map(cloudApps => this.orderApps(cloudApps)), shareReplay(1));
|
|
10464
|
+
const nonCloudApps$ = this.appsOfCurrentUser$.pipe(map(apps => apps.filter(app => !this.isCloudApp(app))));
|
|
10465
|
+
this.apps$ = combineLatest([nonCloudApps$, currentTenant]).pipe(map(([apps, tenant]) => this.filterDuplicates(apps, tenant)), map(apps => this.orderApps(apps)), shareReplay(1));
|
|
10466
|
+
this.finishedLoading$ = combineLatest([this.apps$, this.oneCloudApps$]).pipe(map(() => true), take(1), shareReplay(1));
|
|
10467
|
+
}
|
|
10468
|
+
filterVisible(apps) {
|
|
10469
|
+
return apps.filter(app => this.visibleApplicationTypes.includes(app.type) &&
|
|
10470
|
+
!app.noAppSwitcher &&
|
|
10471
|
+
!this.isPackage(app) &&
|
|
10472
|
+
!get(app, 'manifest.noAppSwitcher'));
|
|
10473
|
+
}
|
|
10474
|
+
isPackage(app) {
|
|
10475
|
+
return !!app.manifest?.isPackage;
|
|
10476
|
+
}
|
|
10477
|
+
isCloudApp(app) {
|
|
10478
|
+
return !!app.cloud;
|
|
10479
|
+
}
|
|
10480
|
+
filterDuplicates(apps, tenant) {
|
|
10481
|
+
// Filter out apps that have duplicate contextpaths and are not own owned by the current tenant;
|
|
10482
|
+
const filterFn = app => !apps.some(otherApp => app !== otherApp &&
|
|
10483
|
+
app.contextPath &&
|
|
10484
|
+
app.contextPath === otherApp.contextPath &&
|
|
10485
|
+
app.owner.tenant.id !== tenant.name);
|
|
10486
|
+
return apps.filter(filterFn);
|
|
10487
|
+
}
|
|
10488
|
+
orderApps(apps) {
|
|
10489
|
+
return orderBy(apps, ({ name }) => name.toLowerCase());
|
|
10490
|
+
}
|
|
10491
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AppSwitcherService, deps: [{ token: AppStateService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
10492
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AppSwitcherService, providedIn: 'root' }); }
|
|
10493
|
+
}
|
|
10494
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AppSwitcherService, decorators: [{
|
|
10495
|
+
type: Injectable,
|
|
10496
|
+
args: [{ providedIn: 'root' }]
|
|
10497
|
+
}], ctorParameters: () => [{ type: AppStateService }] });
|
|
10498
|
+
|
|
10499
|
+
class AppIconComponent {
|
|
10500
|
+
constructor(options) {
|
|
10501
|
+
this.options = options;
|
|
10502
|
+
/** Application name. */
|
|
10503
|
+
this.name = '';
|
|
10504
|
+
this.model = this.emptyModel();
|
|
10505
|
+
this.c8yAppIconsList = {
|
|
10506
|
+
analyticsbuilder: 'analytics-builder',
|
|
10507
|
+
'analytics-builder': 'analytics-builder',
|
|
10508
|
+
cockpit: 'cockpit',
|
|
10509
|
+
devicemanagement: 'device-management',
|
|
10510
|
+
administration: 'administration',
|
|
10511
|
+
apamaepl: 'apama-epl'
|
|
10512
|
+
};
|
|
10513
|
+
this.white = false;
|
|
10514
|
+
this.defaultIconStyle = {
|
|
10515
|
+
'background-repeat': 'no-repeat',
|
|
10516
|
+
'background-size': 'contain',
|
|
10517
|
+
'background-position': 'center',
|
|
10518
|
+
'aspect-ratio': '1'
|
|
10519
|
+
};
|
|
10520
|
+
this.faIconMatch = /fa-/;
|
|
10521
|
+
this.c8yMatch = /^c8y-/;
|
|
10522
|
+
this.dltC8yMatch = /^dlt-c8y-/;
|
|
10523
|
+
}
|
|
10524
|
+
ngOnInit() {
|
|
10525
|
+
this.loadSetup();
|
|
10526
|
+
}
|
|
10527
|
+
ngOnChanges() {
|
|
10528
|
+
this.loadSetup();
|
|
10529
|
+
}
|
|
10530
|
+
emptyModel() {
|
|
10531
|
+
return {
|
|
10532
|
+
appIcon: '',
|
|
10533
|
+
configIcon: '',
|
|
10534
|
+
showIcon: true,
|
|
10535
|
+
iconClass: ['c8y-icon'],
|
|
10536
|
+
appNameAbbr: '',
|
|
10537
|
+
iconStyle: {}
|
|
10538
|
+
};
|
|
10539
|
+
}
|
|
10540
|
+
isC8y(icon) {
|
|
10541
|
+
return this.c8yMatch.test(icon);
|
|
10542
|
+
}
|
|
10543
|
+
isFaIcon(icon) {
|
|
10544
|
+
return this.faIconMatch.test(icon);
|
|
10545
|
+
}
|
|
10546
|
+
isDltC8y(icon) {
|
|
10547
|
+
return this.dltC8yMatch.test(icon);
|
|
10548
|
+
}
|
|
10549
|
+
loadSetup() {
|
|
10550
|
+
this.model = this.emptyModel();
|
|
10551
|
+
this.model.configIcon = this.getPropertyFromAppOrOptions(['config', 'icon']);
|
|
10552
|
+
if (!this.model.configIcon) {
|
|
10553
|
+
this.model.appIcon = this.iconFromAppDefinition();
|
|
10554
|
+
const iconUrl = this.iconUrlFromAppDefinition();
|
|
10555
|
+
if (iconUrl) {
|
|
10556
|
+
this.model.iconStyle = Object.assign({ 'background-image': iconUrl }, this.defaultIconStyle);
|
|
10557
|
+
}
|
|
10558
|
+
else if (!this.model.appIcon) {
|
|
10559
|
+
// only set static icon if no icon is set in the app definition
|
|
10560
|
+
this.model.appIcon = this.findStaticIcon();
|
|
10561
|
+
}
|
|
10562
|
+
}
|
|
10563
|
+
this.model.showIcon =
|
|
10564
|
+
!!this.model.appIcon || !isEmpty(this.model.iconStyle) || !!this.model.configIcon;
|
|
10565
|
+
this.model.iconClass = [
|
|
10566
|
+
'c8y-icon',
|
|
10567
|
+
this.mapFontAwesomeToDelightIcons(this.model.appIcon),
|
|
10568
|
+
this.white ? 'c8y-icon-white' : 'c8y-icon-duocolor',
|
|
10569
|
+
!isEmpty(this.model.iconStyle) ? 'app-img-icon' : ''
|
|
10570
|
+
].filter(c => !!c);
|
|
10571
|
+
const name = this.name || this.app?.name || '';
|
|
10572
|
+
this.model.appNameAbbr = name.substring(0, 2);
|
|
10573
|
+
}
|
|
10574
|
+
iconFromAppDefinition() {
|
|
10575
|
+
return (this.getPropertyFromAppOrOptions(['icon', 'class']) ||
|
|
10576
|
+
this.getPropertyFromAppOrOptions(['manifest', 'icon', 'class']));
|
|
10577
|
+
}
|
|
10578
|
+
iconUrlFromAppDefinition() {
|
|
10579
|
+
return this.getPropertyFromAppOrOptions(['icon', 'url']);
|
|
10580
|
+
}
|
|
10581
|
+
getPropertyFromAppOrOptions(path) {
|
|
10582
|
+
const app = this.app || this.options;
|
|
10583
|
+
return get(app, ['manifest', ...path]) || get(app, path);
|
|
10584
|
+
}
|
|
10585
|
+
findStaticIcon() {
|
|
10586
|
+
const contextPath = this.contextPath || this.name || this.app?.contextPath || this.app?.name;
|
|
10587
|
+
if (!contextPath) {
|
|
10588
|
+
return undefined;
|
|
10589
|
+
}
|
|
10590
|
+
const appContextPathNormalized = find(keys(this.c8yAppIconsList), cp => {
|
|
10591
|
+
return contextPath.indexOf(cp) > -1;
|
|
10592
|
+
});
|
|
10593
|
+
const appIcon = this.c8yAppIconsList[appContextPathNormalized];
|
|
10594
|
+
return appIcon ? `c8y-icon-${appIcon}` : undefined;
|
|
10595
|
+
}
|
|
10596
|
+
mapFontAwesomeToDelightIcons(iconClasses) {
|
|
10597
|
+
if (!iconClasses) {
|
|
10598
|
+
return;
|
|
10599
|
+
}
|
|
10600
|
+
if (this.isFaIcon(iconClasses)) {
|
|
10601
|
+
const regex = /fa-/gi;
|
|
10602
|
+
return iconClasses.replace(regex, 'dlt-c8y-icon-');
|
|
10603
|
+
}
|
|
10604
|
+
return this.isC8y(iconClasses) || this.isDltC8y(iconClasses)
|
|
10605
|
+
? iconClasses
|
|
10606
|
+
: `dlt-c8y-icon-${iconClasses}`;
|
|
10607
|
+
}
|
|
10608
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AppIconComponent, deps: [{ token: OptionsService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
10609
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: AppIconComponent, isStandalone: true, selector: "c8y-app-icon", inputs: { contextPath: "contextPath", name: "name", app: "app" }, host: { classAttribute: "c8y-app-icon" }, usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"model.showIcon; else noIcon\">\n <i\n [ngStyle]=\"model.iconStyle\"\n *ngIf=\"!model.configIcon\"\n [ngClass]=\"model.iconClass\"\n ></i>\n <i\n [c8yIcon]=\"model.configIcon\"\n *ngIf=\"model.configIcon\"\n ></i>\n</ng-container>\n\n<ng-template #noIcon>\n <span class=\"app-noicon\">{{ model.appNameAbbr }}</span>\n</ng-template>\n", dependencies: [{ kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
|
|
10610
|
+
}
|
|
10611
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AppIconComponent, decorators: [{
|
|
10612
|
+
type: Component,
|
|
10613
|
+
args: [{ selector: 'c8y-app-icon', host: { class: 'c8y-app-icon' }, standalone: true, imports: [IconDirective, NgStyle, NgIf, NgClass], template: "<ng-container *ngIf=\"model.showIcon; else noIcon\">\n <i\n [ngStyle]=\"model.iconStyle\"\n *ngIf=\"!model.configIcon\"\n [ngClass]=\"model.iconClass\"\n ></i>\n <i\n [c8yIcon]=\"model.configIcon\"\n *ngIf=\"model.configIcon\"\n ></i>\n</ng-container>\n\n<ng-template #noIcon>\n <span class=\"app-noicon\">{{ model.appNameAbbr }}</span>\n</ng-template>\n" }]
|
|
10614
|
+
}], ctorParameters: () => [{ type: OptionsService }], propDecorators: { contextPath: [{
|
|
10615
|
+
type: Input
|
|
10616
|
+
}], name: [{
|
|
10617
|
+
type: Input
|
|
10618
|
+
}], app: [{
|
|
10619
|
+
type: Input
|
|
10620
|
+
}] } });
|
|
10621
|
+
|
|
10622
|
+
class AppHrefPipe {
|
|
10623
|
+
constructor(applications) {
|
|
10624
|
+
this.applications = applications;
|
|
10625
|
+
this.dynamicOptionsUrlKey = 'dynamicOptionsUrl';
|
|
10626
|
+
}
|
|
10627
|
+
transform(app, addDynamicOptionsUrlIfSet = false) {
|
|
10628
|
+
let href = this.applications.getHref(app);
|
|
10629
|
+
if (!addDynamicOptionsUrlIfSet) {
|
|
10630
|
+
return href;
|
|
10631
|
+
}
|
|
10632
|
+
const searchParams = new URLSearchParams(window.location.search);
|
|
10633
|
+
const dynamicOptionsUrlValue = searchParams.get(this.dynamicOptionsUrlKey);
|
|
10634
|
+
if (!dynamicOptionsUrlValue) {
|
|
10635
|
+
return href;
|
|
10636
|
+
}
|
|
10637
|
+
if (!href.endsWith('/')) {
|
|
10638
|
+
href += '/';
|
|
10639
|
+
}
|
|
10640
|
+
href += `index.html?${searchParams.toString()}`;
|
|
10641
|
+
return href;
|
|
10642
|
+
}
|
|
10643
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AppHrefPipe, deps: [{ token: i1.ApplicationService }], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
10644
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.9", ngImport: i0, type: AppHrefPipe, name: "appHref" }); }
|
|
10645
|
+
}
|
|
10646
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AppHrefPipe, decorators: [{
|
|
10647
|
+
type: Pipe,
|
|
10648
|
+
args: [{
|
|
10649
|
+
name: 'appHref'
|
|
10650
|
+
}]
|
|
10651
|
+
}], ctorParameters: () => [{ type: i1.ApplicationService }] });
|
|
10652
|
+
|
|
10653
|
+
class IsActiveAppPipe {
|
|
10654
|
+
constructor(ui) {
|
|
10655
|
+
this.ui = ui;
|
|
10656
|
+
}
|
|
10657
|
+
transform(app) {
|
|
10658
|
+
const { contextPath } = app;
|
|
10659
|
+
return this.ui.state$.pipe(map(state => get(state, 'app.contextPath')), distinctUntilChanged(), map(currentContextPath => contextPath === currentContextPath));
|
|
10660
|
+
}
|
|
10661
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: IsActiveAppPipe, deps: [{ token: AppStateService }], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
10662
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.9", ngImport: i0, type: IsActiveAppPipe, name: "isActiveApp" }); }
|
|
10663
|
+
}
|
|
10664
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: IsActiveAppPipe, decorators: [{
|
|
10665
|
+
type: Pipe,
|
|
10666
|
+
args: [{
|
|
10667
|
+
name: 'isActiveApp'
|
|
10668
|
+
}]
|
|
10669
|
+
}], ctorParameters: () => [{ type: AppStateService }] });
|
|
10670
|
+
|
|
10671
|
+
class AppSwitcherInlineComponent {
|
|
10672
|
+
constructor(switcherService) {
|
|
10673
|
+
this.switcherService = switcherService;
|
|
10674
|
+
}
|
|
10675
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AppSwitcherInlineComponent, deps: [{ token: AppSwitcherService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
10676
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: AppSwitcherInlineComponent, selector: "c8y-app-switcher-inline", ngImport: i0, template: "<div\n class=\"d-flex a-i-center j-c-center p-4\"\n *ngIf=\"!(switcherService.finishedLoading$ | async)\"\n>\n <c8y-loading></c8y-loading>\n</div>\n<ng-container *ngIf=\"switcherService.oneCloudApps$ | async as oneCloudApps\">\n <div\n class=\"app-switcher-sagcloud\"\n *ngIf=\"oneCloudApps.length > 0\"\n >\n <a\n class=\"appLink\"\n title=\"{{ app.name | humanizeAppName | async }}\"\n *ngFor=\"let app of oneCloudApps\"\n [href]=\"app | appHref\"\n c8yProductExperience\n [actionName]=\"'appSwitched'\"\n [actionData]=\"{ applicationName: app && app.name }\"\n >\n <c8y-app-icon\n [app]=\"app\"\n [name]=\"app.name\"\n [contextPath]=\"app.contextPath\"\n ></c8y-app-icon>\n <span class=\"text-truncate-wrap\">{{ app | humanizeAppName | async }}</span>\n </a>\n </div>\n</ng-container>\n<div\n class=\"app-switcher\"\n *ngIf=\"switcherService.apps$ | async as apps\"\n>\n <a\n class=\"appLink\"\n title=\"{{ app.name | humanizeAppName | async }}\"\n [ngClass]=\"(app | isActiveApp | async) ? 'active' : ''\"\n *ngFor=\"let app of apps\"\n [href]=\"app | appHref : true\"\n [rel]=\"app.type === 'EXTERNAL' ? 'noopener noreferrer' : ''\"\n c8yProductExperience\n [actionName]=\"'appSwitched'\"\n [actionData]=\"{ applicationName: app && app.name }\"\n >\n <c8y-app-icon\n [app]=\"app\"\n [name]=\"app.name\"\n [contextPath]=\"app.contextPath\"\n ></c8y-app-icon>\n <span class=\"text-truncate-wrap\">{{ app | humanizeAppName | async }}</span>\n </a>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "directive", type: ProductExperienceDirective, selector: "[c8yProductExperience]", inputs: ["actionName", "actionData", "inherit", "suppressDataOverriding"] }, { kind: "component", type: AppIconComponent, selector: "c8y-app-icon", inputs: ["contextPath", "name", "app"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: HumanizeAppNamePipe, name: "humanizeAppName" }, { kind: "pipe", type: AppHrefPipe, name: "appHref" }, { kind: "pipe", type: IsActiveAppPipe, name: "isActiveApp" }] }); }
|
|
10677
|
+
}
|
|
10678
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AppSwitcherInlineComponent, decorators: [{
|
|
10679
|
+
type: Component,
|
|
10680
|
+
args: [{ selector: 'c8y-app-switcher-inline', template: "<div\n class=\"d-flex a-i-center j-c-center p-4\"\n *ngIf=\"!(switcherService.finishedLoading$ | async)\"\n>\n <c8y-loading></c8y-loading>\n</div>\n<ng-container *ngIf=\"switcherService.oneCloudApps$ | async as oneCloudApps\">\n <div\n class=\"app-switcher-sagcloud\"\n *ngIf=\"oneCloudApps.length > 0\"\n >\n <a\n class=\"appLink\"\n title=\"{{ app.name | humanizeAppName | async }}\"\n *ngFor=\"let app of oneCloudApps\"\n [href]=\"app | appHref\"\n c8yProductExperience\n [actionName]=\"'appSwitched'\"\n [actionData]=\"{ applicationName: app && app.name }\"\n >\n <c8y-app-icon\n [app]=\"app\"\n [name]=\"app.name\"\n [contextPath]=\"app.contextPath\"\n ></c8y-app-icon>\n <span class=\"text-truncate-wrap\">{{ app | humanizeAppName | async }}</span>\n </a>\n </div>\n</ng-container>\n<div\n class=\"app-switcher\"\n *ngIf=\"switcherService.apps$ | async as apps\"\n>\n <a\n class=\"appLink\"\n title=\"{{ app.name | humanizeAppName | async }}\"\n [ngClass]=\"(app | isActiveApp | async) ? 'active' : ''\"\n *ngFor=\"let app of apps\"\n [href]=\"app | appHref : true\"\n [rel]=\"app.type === 'EXTERNAL' ? 'noopener noreferrer' : ''\"\n c8yProductExperience\n [actionName]=\"'appSwitched'\"\n [actionData]=\"{ applicationName: app && app.name }\"\n >\n <c8y-app-icon\n [app]=\"app\"\n [name]=\"app.name\"\n [contextPath]=\"app.contextPath\"\n ></c8y-app-icon>\n <span class=\"text-truncate-wrap\">{{ app | humanizeAppName | async }}</span>\n </a>\n</div>\n" }]
|
|
10681
|
+
}], ctorParameters: () => [{ type: AppSwitcherService }] });
|
|
10682
|
+
|
|
10683
|
+
class AppSwitcherComponent {
|
|
10684
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AppSwitcherComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
10685
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: AppSwitcherComponent, selector: "c8y-app-switcher", ngImport: i0, template: "<div\n class=\"app-switcher-dropdown\"\n dropdown\n #appSwitcherDropdown=\"bs-dropdown\"\n [cdkTrapFocus]=\"appSwitcherDropdown.isOpen\"\n>\n <button\n class=\"main-header-button c8y-dropdown dropdown-toggle\"\n title=\"{{ 'Application switcher' | translate }}\"\n id=\"appSwitcherDropdown\"\n type=\"button\"\n dropdownToggle\n >\n <i\n class=\"icon-2x\"\n c8yIcon=\"th\"\n ></i>\n </button>\n <div\n class=\"app-switcher-dropdown-menu dropdown-menu\"\n aria-labelledby=\"appSwitcherDropdown\"\n role=\"group\"\n *dropdownMenu\n >\n <c8y-app-switcher-inline></c8y-app-switcher-inline>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2$2.BsDropdownMenuDirective, selector: "[bsDropdownMenu],[dropdownMenu]", exportAs: ["bs-dropdown-menu"] }, { kind: "directive", type: i2$2.BsDropdownToggleDirective, selector: "[bsDropdownToggle],[dropdownToggle]", exportAs: ["bs-dropdown-toggle"] }, { kind: "directive", type: i2$2.BsDropdownDirective, selector: "[bsDropdown], [dropdown]", inputs: ["placement", "triggers", "container", "dropup", "autoClose", "isAnimated", "insideClick", "isDisabled", "isOpen"], outputs: ["isOpenChange", "onShown", "onHidden"], exportAs: ["bs-dropdown"] }, { kind: "directive", type: i3$1.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "component", type: AppSwitcherInlineComponent, selector: "c8y-app-switcher-inline" }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
|
|
10686
|
+
}
|
|
10687
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AppSwitcherComponent, decorators: [{
|
|
10688
|
+
type: Component,
|
|
10689
|
+
args: [{ selector: 'c8y-app-switcher', template: "<div\n class=\"app-switcher-dropdown\"\n dropdown\n #appSwitcherDropdown=\"bs-dropdown\"\n [cdkTrapFocus]=\"appSwitcherDropdown.isOpen\"\n>\n <button\n class=\"main-header-button c8y-dropdown dropdown-toggle\"\n title=\"{{ 'Application switcher' | translate }}\"\n id=\"appSwitcherDropdown\"\n type=\"button\"\n dropdownToggle\n >\n <i\n class=\"icon-2x\"\n c8yIcon=\"th\"\n ></i>\n </button>\n <div\n class=\"app-switcher-dropdown-menu dropdown-menu\"\n aria-labelledby=\"appSwitcherDropdown\"\n role=\"group\"\n *dropdownMenu\n >\n <c8y-app-switcher-inline></c8y-app-switcher-inline>\n </div>\n</div>\n" }]
|
|
10690
|
+
}] });
|
|
10691
|
+
|
|
10646
10692
|
class ApplicationModule {
|
|
10647
10693
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ApplicationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
10648
10694
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.9", ngImport: i0, type: ApplicationModule, declarations: [AppSwitcherComponent, AppSwitcherInlineComponent, AppHrefPipe, IsActiveAppPipe], imports: [CommonModule, BsDropdownModule, A11yModule, ProductExperienceModule, AppIconComponent], exports: [AppIconComponent, AppSwitcherComponent, AppSwitcherInlineComponent] }); }
|
|
@@ -35397,5 +35443,5 @@ function colorValidator(allowedModes) {
|
|
|
35397
35443
|
* Generated bundle index. Do not edit.
|
|
35398
35444
|
*/
|
|
35399
35445
|
|
|
35400
|
-
export { ACTIONS_STEPPER, AGGREGATIONS, AGGREGATION_ICONS, AGGREGATION_LABELS, AGGREGATION_LIMITS, AGGREGATION_TEXTS, AGGREGATION_VALUES, AGGREGATION_VALUES_ARR, ARRAY_VALIDATION_PREFIX, ASSET_PATH, AbstractConfigurationStrategy, ActionBarComponent, ActionBarItemComponent, ActionBarModule, ActionBarService, ActionComponent, ActionControlsExtensionService, ActionModule, ActionOutletComponent, ActionService, AggregationService, AlarmRealtimeService, AlarmWithChildrenRealtimeService, AlertComponent, AlertDetailsComponent, AlertModule, AlertOutletBase, AlertOutletComponent, AlertService, AlertTextComponent, AppIconComponent, AppStateService, AppSwitcherComponent, AppSwitcherInlineComponent, AppSwitcherService, ApplicationModule, ApplicationPluginStatus, AssetLinkPipe, AssetTypesRealtimeService, AssetTypesService, AuditLogComponent, AuditLogModule, AuthenticationModule, BackendVersionFactory, BaseColumn, BaseFilteringFormRendererComponent, BooleanFilterMapper, BootstrapComponent, BootstrapModule, BottomDrawerComponent, BottomDrawerRef, BottomDrawerService, BreadcrumbComponent, BreadcrumbItemComponent, BreadcrumbModule, BreadcrumbOutletComponent, BreadcrumbService, BuiltInActionType, BytesPipe, C8yComponentOutlet, C8yJSONSchema, C8yStepper, C8yStepperButtons, C8yStepperIcon, C8yStepperProgress, C8yTranslateDirective, C8yTranslateModule, C8yTranslatePipe, C8yValidators, CUSTOM, CachedLocaleDictionaryService, CellRendererComponent, CellRendererContext, CellRendererDefDirective, ChangePasswordComponent, ClipboardModule, ClipboardService, ColorInputComponent, ColorService, ColumnDirective, CommonModule, ConditionalTabsOutletComponent, ConfigureCustomColumnComponent, ConfirmModalComponent, ContextRouteComponent, ContextRouteGuard, ContextRouteService, CookieBannerComponent, CopyDashboardDisabledReason, CoreModule, CoreSearchModule, CountdownIntervalComponent, CountdownIntervalModule, CredentialsComponent, CurrentPasswordModalComponent, CustomColumn, DATA_GRID_CONFIGURATION_CONTEXT, DATA_GRID_CONFIGURATION_CONTEXT_PROVIDER, DATA_GRID_CONFIGURATION_STRATEGY, DEFAULT_INTERVAL_STATE, DEFAULT_INTERVAL_VALUE, DEFAULT_INTERVAL_VALUES, DRAWER_ANIMATION_TIME, DashboardChildActionComponent, DashboardChildChange, DashboardChildComponent, DashboardChildTitleComponent, DashboardComponent, DashboardModule, DataGridComponent, DataGridModule, DataGridService, DatapointLibraryValidationErrors, DateContextQueryParamNames, DateFilterMapper, DatePickerComponent, DatePickerModule, DatePipe, DateTimePickerComponent, DateTimePickerModule, DefaultValidationDirective, DeviceBootstrapRealtimeService, DeviceService, DeviceStatusComponent, DeviceStatusModule, DismissAlertStrategy, DocsModule, DocsService, DrawerModule, DrawerOutletComponent, DrawerService, DropAreaComponent, DropAreaModule, DropdownDirectionDirective, DynamicBulkDetailsResolver, DynamicBulkIIdentifiedResolver, DynamicComponentAlert, DynamicComponentAlertAggregator, DynamicComponentAlertsComponent, DynamicComponentComponent, DynamicComponentErrorStrategy, DynamicComponentModule, DynamicComponentService, DynamicDatapointsResolver, DynamicFormsModule, DynamicManagedObjectResolver, DynamicResolverService, ES_MAX_TIME_MILLISECONDS, EmailsValidatorDirective, EmptyComponent, EmptyStateComponent, EmptyStateContextDirective, EventRealtimeService, ExpandableRowDirective, ExtensionPointForPlugins, ExtensionPointWithoutStateForPlugins, ExtractArrayValidationErrorsPipe, FilePickerComponent, FilePickerFormControlComponent, FilePickerFormControlModule, FilePickerModule, FilesService, FilterInputComponent, FilterMapperFactory, FilterMapperModule, FilterMapperPipe, FilterMapperService, FilterNonArrayValidationErrorsPipe, FilteringActionType, FilteringFormRendererComponent, FilteringFormRendererContext, FilteringFormRendererDefDirective, ForOfDirective, FormGroupComponent, FormsModule, GENERIC_FILE_TYPE, GLOBAL_CONTEXT_AUTO_REFRESH, GainsightService, GenericFileIconPipe, GeoService, GetGroupIconPipe, GlobalConfigService, GridDataSource, GroupFragment, GroupService, GroupedFilterChips, GuideDocsComponent, GuideHrefDirective, HOOK_ACTION, HOOK_ACTION_BAR, HOOK_BREADCRUMB, HOOK_COMPONENTS, HOOK_DOCS, HOOK_DYNAMIC_PROVIDER_CONFIG, HOOK_NAVIGATOR_NODES, HOOK_OPTIONS, HOOK_PATTERN_MESSAGES, HOOK_ROUTE, HOOK_SEARCH, HOOK_STEPPER, HOOK_TABS, HOOK_VERSION, HOOK_WIZARD, HeaderBarComponent, HeaderCellRendererDefDirective, HeaderModule, HeaderService, HelpComponent, HelpModule, HighlightComponent, HookProviderTypes, HumanizeAppNamePipe, HumanizePipe, HumanizeValidationMessagePipe, I18nModule, INTERVAL_OPTIONS, IconDirective, IfAllowedDirective, InjectionType, InputGroupListComponent, InputGroupListContainerDirective, InterAppService, IntervalBasedReload, InventorySearchService, IpRangeInputListComponent, JsonValidationPrettifierDirective, LANGUAGES, LAST_DAY, LAST_HOUR, LAST_MINUTE, LAST_MONTH, LAST_WEEK, LOCALE_PATH, LegacyGridConfigMapperService, LegendFieldWrapper, ListDisplaySwitchComponent, ListDisplaySwitchModule, ListGroupComponent, ListGroupModule, ListItemActionComponent, ListItemBodyComponent, ListItemCheckboxComponent, ListItemCollapseComponent, ListItemComponent, ListItemDragHandleComponent, ListItemFooterComponent, ListItemIconComponent, ListItemRadioComponent, ListItemTimelineComponent, LoadMoreComponent, LoadingComponent, LoginComponent, LoginModule, LoginService, LoginViews, MAX_PAGE_SIZE, MESSAGES_CORE_I18N, ManagedObjectRealtimeService, ManagedObjectType, MapFunctionPipe, MarkdownToHtmlPipe, MaxValidationDirective, MeasurementRealtimeService, MessageBannerService, MessageDirective, MessagesComponent, MinValidationDirective, MissingTranslationCustomHandler, MoNamePipe, ModalComponent, ModalModule, ModalSelectionMode, ModalService, NEEDED_ROLE_FOR_SETUP, NEW_DASHBOARD_ROUTER_STATE_PROP, NULL_VALUE_PLACEHOLDER, NUMBER_FORMAT_REGEXP, NameTransformPipe, NavigatorBottomModule, NavigatorIconComponent, NavigatorModule, NavigatorNode, NavigatorNodeComponent, NavigatorNodeRoot, NavigatorOutletComponent, NavigatorService, NavigatorTopModule, NewPasswordComponent, NumberPipe, OperationBulkRealtimeService, OperationRealtimeService, OperationResultComponent, OptionsService, OutletDirective, PRODUCT_EXPERIENCE_EVENT_SOURCE, PX_ACTIONS, PX_EVENT_NAME, PackageType, PasswordCheckListComponent, PasswordConfirm, PasswordConfirmModalComponent, PasswordInputComponent, PasswordService, PasswordStrengthCheckerService, PasswordStrengthComponent, PasswordStrengthValidatorDirective, PatternMessagesService, Permissions, PhoneValidationDirective, PlatformDetailsService, PluginLoadedPipe, PluginsExportScopes, PluginsModule, PluginsResolveService, PluginsService, PopoverConfirmComponent, ProductExperienceDirective, ProductExperienceModule, ProgressBarComponent, PropertiesListComponent, PropertiesListModule, PropertyValueTransformService, ProvidePhoneNumberComponent, ProviderConfigurationComponent, ProviderConfigurationModule, ProviderConfigurationNodeFactory, ProviderConfigurationRouteFactory, ProviderConfigurationService, ProviderDefinitionsService, PushStatus, PushStatusLabels, QuickLinkComponent, QuickLinkModule, RESOLVING_COMPONENT_WAIT_TIME, RadioFilterMapper, RangeComponent, RangeDirective, RangeDisplayComponent, RangeDisplayModule, RealtimeButtonComponent, RealtimeMessage, RealtimeModule, RealtimeService, RealtimeSubjectService, RecoverPasswordComponent, RelativeTimePipe, RequiredInputPlaceholderDirective, RouterModule, RouterService, RouterTabsResolver, SETUP_FINISHED_STEP_ID, SearchComponent, SearchFilters, SearchInputComponent, SearchOutletComponent, SearchResultEmptyComponent, SearchService, SelectComponent, SelectFilterMapper, SelectItemDirective, SelectKeyboardService, SelectLegacyComponent, SelectModalComponent, SelectModalFilterPipe, SelectModalModule, SelectModule, SelectedItemsComponent, SelectedItemsDirective, SendStatus, SendStatusLabels, ServiceRegistry, SetupCompletedComponent, SetupComponent, SetupModule, SetupService, SetupState, SetupStepperFactory, ShortenUserNamePipe, ShouldShowMoPipe, ShowIfFilterPipe, SimpleJsonPathValidatorDirective, SkipLinkDirective, SmsChallengeComponent, StandalonePluginInjector, StateService, Status, StepperModule, StepperOutletComponent, StepperService, Steppers, StrengthValidatorService, StringFilterMapper, StringifyObjectPipe, SupportedApps, TabComponent, TabsModule, TabsOutletComponent, TabsService, TabsetAriaDirective, TenantUiService, TextAreaRowHeightDirective, TextareaAutoresizeDirective, ThemeSwitcherService, TimeIntervalComponent, TimePickerComponent, TimePickerModule, TitleComponent, TitleOutletComponent, TotpAuthComponent, TotpChallengeComponent, TotpSetupComponent, TranslateParserCustom, TranslateService, TranslationLoaderService, TypeaheadComponent, TypeaheadFilterMapper, UiSettingsComponent, UiSettingsModule, UniqueInCollectionByPathValidationDirective, UserEditComponent, UserEditModalComponent, UserEngagementsService, UserMenuItemComponent, UserMenuOutletComponent, UserMenuService, UserModule, UserNameInitialsPipe, UserPreferencesConfigurationStrategy, UserPreferencesService, UserPreferencesStorageInventory, UserPreferencesStorageLocal, UserTotpRevokeComponent, UserTotpSetupComponent, VERSION_MODULE_CONFIG, ValidationPattern, VersionListComponent, VersionModule, VersionService, ViewContext, ViewContextServices, VirtualScrollWindowDirective, VirtualScrollWindowStrategy, VirtualScrollerWrapperComponent, VisibleControlsPipe, WebSDKVersionFactory, WidgetGlobalAutoRefreshService, WidgetTimeContextActionBarPriority, WidgetTimeContextComponent, WidgetsDashboardComponent, WizardBodyComponent, WizardComponent, WizardFooterComponent, WizardHeaderComponent, WizardModalService, WizardModule, WizardOutletComponent, WizardService, ZipService, _virtualScrollWindowStrategyFactory, alertOnError, allEntriesAreEqual, asyncValidateArrayElements, colorValidator, deviceAvailabilityIconMap, extraRoutes, fromFactories, fromTrigger, fromTriggerOnce, getActivatedRoute, getAngularLocalesLanguageString, getBasicInputArrayFormFieldConfig, getDictionaryWithTrimmedKeys, getInjectedHooks, globalAutoRefreshLoading, hookAction, hookActionBar, hookBreadcrumb, hookComponent, hookDataGridActionControls, hookDocs, hookDrawer, hookDynamicProviderConfig, hookFilterMapper, hookGeneric, hookNavigator, hookOptions, hookPatternMessages, hookRoute, hookSearch, hookService, hookStepper, hookTab, hookVersion, hookWidget, hookWizard, initializeServices, internalApps, isEagerDynamicComponents, isExtensionFactory, isLazyDynamicComponents, isPromise, languagesFactory, loadLocale, localeId, localePathFactory, memoize, minColumnGridTrackSize, operationStatusClasses, operationStatusIcons, ratiosByColumnTypes, removeDuplicatesIds, resolveInjectedFactories, retryWithDelay, simpleJsonPathValidator, sortByPriority, stateToFactory, statusAlert, statusClasses, statusIcons, throttle, toObservable, toObservableOfArrays, tooltips, trimTranslationKey, uniqueInCollectionByPathValidator, validateArrayElements, viewContextRoutes, wrapperLegendFieldConfig };
|
|
35446
|
+
export { ACTIONS_STEPPER, AGGREGATIONS, AGGREGATION_ICONS, AGGREGATION_LABELS, AGGREGATION_LIMITS, AGGREGATION_TEXTS, AGGREGATION_VALUES, AGGREGATION_VALUES_ARR, ARRAY_VALIDATION_PREFIX, ASSET_PATH, AbstractConfigurationStrategy, ActionBarComponent, ActionBarItemComponent, ActionBarModule, ActionBarService, ActionComponent, ActionControlsExtensionService, ActionModule, ActionOutletComponent, ActionService, AggregationService, AlarmRealtimeService, AlarmWithChildrenRealtimeService, AlertComponent, AlertDetailsComponent, AlertModule, AlertOutletBase, AlertOutletComponent, AlertService, AlertTextComponent, AppIconComponent, AppStateService, AppSwitcherComponent, AppSwitcherInlineComponent, AppSwitcherService, ApplicationModule, ApplicationPluginStatus, AssetLinkPipe, AssetTypesRealtimeService, AssetTypesService, AuditLogComponent, AuditLogModule, AuthenticationModule, BackendVersionFactory, BaseColumn, BaseFilteringFormRendererComponent, BooleanFilterMapper, BootstrapComponent, BootstrapModule, BottomDrawerComponent, BottomDrawerRef, BottomDrawerService, BreadcrumbComponent, BreadcrumbItemComponent, BreadcrumbModule, BreadcrumbOutletComponent, BreadcrumbService, BuiltInActionType, BytesPipe, C8yComponentOutlet, C8yJSONSchema, C8yStepper, C8yStepperButtons, C8yStepperIcon, C8yStepperProgress, C8yTranslateDirective, C8yTranslateModule, C8yTranslatePipe, C8yValidators, CUSTOM, CachedLocaleDictionaryService, CellRendererComponent, CellRendererContext, CellRendererDefDirective, ChangePasswordComponent, ClipboardModule, ClipboardService, ColorInputComponent, ColorService, ColumnDirective, CommonModule, ConditionalTabsOutletComponent, ConfigureCustomColumnComponent, ConfirmModalComponent, ContextRouteComponent, ContextRouteGuard, ContextRouteService, CookieBannerComponent, CopyDashboardDisabledReason, CoreModule, CoreSearchModule, CountdownIntervalComponent, CountdownIntervalModule, CredentialsComponent, CurrentPasswordModalComponent, CustomColumn, DATA_GRID_CONFIGURATION_CONTEXT, DATA_GRID_CONFIGURATION_CONTEXT_PROVIDER, DATA_GRID_CONFIGURATION_STRATEGY, DEFAULT_INTERVAL_STATE, DEFAULT_INTERVAL_VALUE, DEFAULT_INTERVAL_VALUES, DRAWER_ANIMATION_TIME, DashboardChildActionComponent, DashboardChildChange, DashboardChildComponent, DashboardChildTitleComponent, DashboardComponent, DashboardModule, DataGridComponent, DataGridModule, DataGridService, DatapointLibraryValidationErrors, DateContextQueryParamNames, DateFilterMapper, DatePickerComponent, DatePickerModule, DatePipe, DateTimePickerComponent, DateTimePickerModule, DefaultValidationDirective, DeviceBootstrapRealtimeService, DeviceService, DeviceStatusComponent, DeviceStatusModule, DismissAlertStrategy, DocsModule, DocsService, DrawerModule, DrawerOutletComponent, DrawerService, DropAreaComponent, DropAreaModule, DropdownDirectionDirective, DynamicBulkDetailsResolver, DynamicBulkIIdentifiedResolver, DynamicComponentAlert, DynamicComponentAlertAggregator, DynamicComponentAlertsComponent, DynamicComponentComponent, DynamicComponentErrorStrategy, DynamicComponentModule, DynamicComponentService, DynamicDatapointsResolver, DynamicFormsModule, DynamicManagedObjectResolver, DynamicResolverService, ES_MAX_TIME_MILLISECONDS, EmailsValidatorDirective, EmptyComponent, EmptyStateComponent, EmptyStateContextDirective, EventRealtimeService, ExpandableRowDirective, ExtensionPointForPlugins, ExtensionPointWithoutStateForPlugins, ExtractArrayValidationErrorsPipe, FilePickerComponent, FilePickerFormControlComponent, FilePickerFormControlModule, FilePickerModule, FilesService, FilterInputComponent, FilterMapperFactory, FilterMapperModule, FilterMapperPipe, FilterMapperService, FilterNonArrayValidationErrorsPipe, FilteringActionType, FilteringFormRendererComponent, FilteringFormRendererContext, FilteringFormRendererDefDirective, ForOfDirective, FormGroupComponent, FormsModule, GENERIC_FILE_TYPE, GLOBAL_CONTEXT_AUTO_REFRESH, GainsightService, GenericFileIconPipe, GeoService, GetGroupIconPipe, GlobalConfigService, GridDataSource, GroupFragment, GroupService, GroupedFilterChips, GuideDocsComponent, GuideHrefDirective, HOOK_ACTION, HOOK_ACTION_BAR, HOOK_BREADCRUMB, HOOK_COMPONENTS, HOOK_DOCS, HOOK_DYNAMIC_PROVIDER_CONFIG, HOOK_NAVIGATOR_NODES, HOOK_OPTIONS, HOOK_PATTERN_MESSAGES, HOOK_ROUTE, HOOK_SEARCH, HOOK_STEPPER, HOOK_TABS, HOOK_VERSION, HOOK_WIZARD, HeaderBarComponent, HeaderCellRendererDefDirective, HeaderModule, HeaderService, HelpComponent, HelpModule, HighlightComponent, HookProviderTypes, HumanizeAppNamePipe, HumanizePipe, HumanizeValidationMessagePipe, I18nModule, INTERVAL_OPTIONS, IconDirective, IfAllowedDirective, InjectionType, InputGroupListComponent, InputGroupListContainerDirective, InterAppService, IntervalBasedReload, InventorySearchService, IpRangeInputListComponent, JsonValidationPrettifierDirective, LANGUAGES, LAST_DAY, LAST_HOUR, LAST_MINUTE, LAST_MONTH, LAST_WEEK, LOCALE_PATH, LegacyGridConfigMapperService, LegendFieldWrapper, ListDisplaySwitchComponent, ListDisplaySwitchModule, ListGroupComponent, ListGroupModule, ListItemActionComponent, ListItemBodyComponent, ListItemCheckboxComponent, ListItemCollapseComponent, ListItemComponent, ListItemDragHandleComponent, ListItemFooterComponent, ListItemIconComponent, ListItemRadioComponent, ListItemTimelineComponent, LoadMoreComponent, LoadingComponent, LoginComponent, LoginModule, LoginService, LoginViews, MAX_PAGE_SIZE, MESSAGES_CORE_I18N, ManagedObjectRealtimeService, ManagedObjectType, MapFunctionPipe, MarkdownToHtmlPipe, MaxValidationDirective, MeasurementRealtimeService, MessageBannerService, MessageDirective, MessagesComponent, MinValidationDirective, MissingTranslationCustomHandler, MoNamePipe, ModalComponent, ModalModule, ModalSelectionMode, ModalService, NEEDED_ROLE_FOR_SETUP, NEW_DASHBOARD_ROUTER_STATE_PROP, NULL_VALUE_PLACEHOLDER, NUMBER_FORMAT_REGEXP, NameTransformPipe, NavigatorBottomModule, NavigatorIconComponent, NavigatorModule, NavigatorNode, NavigatorNodeComponent, NavigatorNodeRoot, NavigatorOutletComponent, NavigatorService, NavigatorTopModule, NewPasswordComponent, NumberPipe, OperationBulkRealtimeService, OperationRealtimeService, OperationResultComponent, OptionsService, OutletDirective, PRODUCT_EXPERIENCE_EVENT_SOURCE, PX_ACTIONS, PX_EVENT_NAME, PackageType, PasswordCheckListComponent, PasswordConfirm, PasswordConfirmModalComponent, PasswordInputComponent, PasswordService, PasswordStrengthCheckerService, PasswordStrengthComponent, PasswordStrengthValidatorDirective, PatternMessagesService, Permissions, PhoneValidationDirective, PlatformDetailsService, PluginLoadedPipe, PluginsExportScopes, PluginsModule, PluginsResolveService, PluginsService, PopoverConfirmComponent, ProductExperienceDirective, ProductExperienceModule, ProgressBarComponent, PropertiesListComponent, PropertiesListModule, PropertyValueTransformService, ProvidePhoneNumberComponent, ProviderConfigurationComponent, ProviderConfigurationModule, ProviderConfigurationNodeFactory, ProviderConfigurationRouteFactory, ProviderConfigurationService, ProviderDefinitionsService, PushStatus, PushStatusLabels, QuickLinkComponent, QuickLinkModule, RESOLVING_COMPONENT_WAIT_TIME, RadioFilterMapper, RangeComponent, RangeDirective, RangeDisplayComponent, RangeDisplayModule, RealtimeButtonComponent, RealtimeMessage, RealtimeModule, RealtimeService, RealtimeSubjectService, RecoverPasswordComponent, RelativeTimePipe, RequiredInputPlaceholderDirective, RouterModule, RouterService, RouterTabsResolver, SETUP_FINISHED_STEP_ID, SearchComponent, SearchFilters, SearchInputComponent, SearchOutletComponent, SearchResultEmptyComponent, SearchService, SelectComponent, SelectFilterMapper, SelectItemDirective, SelectKeyboardService, SelectLegacyComponent, SelectModalComponent, SelectModalFilterPipe, SelectModalModule, SelectModule, SelectedItemsComponent, SelectedItemsDirective, SendStatus, SendStatusLabels, ServiceRegistry, SetupCompletedComponent, SetupComponent, SetupModule, SetupService, SetupState, SetupStepperFactory, ShortenUserNamePipe, ShouldShowMoPipe, ShowIfFilterPipe, SimpleJsonPathValidatorDirective, SkipLinkDirective, SmsChallengeComponent, StandalonePluginInjector, StateService, Status, StepperModule, StepperOutletComponent, StepperService, Steppers, StrengthValidatorService, StringFilterMapper, StringifyObjectPipe, SupportedApps, TabComponent, TabsModule, TabsOutletComponent, TabsService, TabsetAriaDirective, TenantUiService, TextAreaRowHeightDirective, TextareaAutoresizeDirective, ThemeSwitcherService, TimeIntervalComponent, TimePickerComponent, TimePickerModule, TitleComponent, TitleOutletComponent, TotpAuthComponent, TotpChallengeComponent, TotpSetupComponent, TranslateParserCustom, TranslateService, TranslationLoaderService, TypeaheadComponent, TypeaheadFilterMapper, UiSettingsComponent, UiSettingsModule, UniqueInCollectionByPathValidationDirective, UserEditComponent, UserEditModalComponent, UserEngagementsService, UserMenuItemComponent, UserMenuOutletComponent, UserMenuService, UserModule, UserNameInitialsPipe, UserPreferencesConfigurationStrategy, UserPreferencesService, UserPreferencesStorageInventory, UserPreferencesStorageLocal, UserTotpRevokeComponent, UserTotpSetupComponent, VERSION_MODULE_CONFIG, ValidationPattern, VersionListComponent, VersionModule, VersionService, ViewContext, ViewContextServices, VirtualScrollWindowDirective, VirtualScrollWindowStrategy, VirtualScrollerWrapperComponent, VisibleControlsPipe, WIDGET_TYPE_VALUES, WebSDKVersionFactory, WidgetGlobalAutoRefreshService, WidgetTimeContextActionBarPriority, WidgetTimeContextComponent, WidgetsDashboardComponent, WizardBodyComponent, WizardComponent, WizardFooterComponent, WizardHeaderComponent, WizardModalService, WizardModule, WizardOutletComponent, WizardService, ZipService, _virtualScrollWindowStrategyFactory, alertOnError, allEntriesAreEqual, asyncValidateArrayElements, colorValidator, deviceAvailabilityIconMap, extraRoutes, fromFactories, fromTrigger, fromTriggerOnce, getActivatedRoute, getAngularLocalesLanguageString, getBasicInputArrayFormFieldConfig, getDictionaryWithTrimmedKeys, getInjectedHooks, globalAutoRefreshLoading, hookAction, hookActionBar, hookBreadcrumb, hookComponent, hookDataGridActionControls, hookDocs, hookDrawer, hookDynamicProviderConfig, hookFilterMapper, hookGeneric, hookNavigator, hookOptions, hookPatternMessages, hookRoute, hookSearch, hookService, hookStepper, hookTab, hookVersion, hookWidget, hookWizard, initializeServices, internalApps, isEagerDynamicComponents, isExtensionFactory, isLazyDynamicComponents, isPromise, languagesFactory, loadLocale, localeId, localePathFactory, memoize, minColumnGridTrackSize, operationStatusClasses, operationStatusIcons, ratiosByColumnTypes, removeDuplicatesIds, resolveInjectedFactories, retryWithDelay, simpleJsonPathValidator, sortByPriority, stateToFactory, statusAlert, statusClasses, statusIcons, throttle, toObservable, toObservableOfArrays, tooltips, trimTranslationKey, uniqueInCollectionByPathValidator, validateArrayElements, viewContextRoutes, wrapperLegendFieldConfig };
|
|
35401
35447
|
//# sourceMappingURL=c8y-ngx-components.mjs.map
|