@c8y/ngx-components 1023.14.2 → 1023.15.0
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/assets-navigator/index.d.ts +7 -3
- package/assets-navigator/index.d.ts.map +1 -1
- package/fesm2022/c8y-ngx-components-assets-navigator.mjs +25 -6
- package/fesm2022/c8y-ngx-components-assets-navigator.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-group-breadcrumbs.mjs +192 -0
- package/fesm2022/c8y-ngx-components-group-breadcrumbs.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-module-federation-exports-assets-navigator.mjs +13 -0
- package/fesm2022/c8y-ngx-components-module-federation-exports-assets-navigator.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-widgets-implementations-info-gauge.mjs +6 -2
- package/fesm2022/c8y-ngx-components-widgets-implementations-info-gauge.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +153 -17
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/group-breadcrumbs/index.d.ts +6 -0
- package/group-breadcrumbs/index.d.ts.map +1 -0
- package/index.d.ts +67 -5
- package/index.d.ts.map +1 -1
- package/locales/locales.pot +1 -7
- package/module-federation-exports/assets-navigator/index.d.ts +2 -0
- package/module-federation-exports/assets-navigator/index.d.ts.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import { AssetHierarchyService, C8yTranslatePipe, ViewContext, BreadcrumbService, RouterService, GroupService, ContextRouteService, hookBreadcrumb } from '@c8y/ngx-components';
|
|
2
|
+
import * as i0 from '@angular/core';
|
|
3
|
+
import { InjectionToken, inject, Component, Injector, Injectable } from '@angular/core';
|
|
4
|
+
import { firstValueFrom } from 'rxjs';
|
|
5
|
+
import { NgStyle } from '@angular/common';
|
|
6
|
+
import { TranslateService } from '@ngx-translate/core';
|
|
7
|
+
import { gettext } from '@c8y/ngx-components/gettext';
|
|
8
|
+
import { cloneDeep } from 'lodash-es';
|
|
9
|
+
import { AssetNodeService } from '@c8y/ngx-components/module-federation-exports/assets-navigator';
|
|
10
|
+
|
|
11
|
+
const GROUP_BREADCRUMB_CONTEXT_DATA = new InjectionToken('GROUP_BREADCRUMB_CONTEXT_DATA');
|
|
12
|
+
const GROUP_BREADCRUMB_FACTORY = new InjectionToken('GROUP_BREADCRUMB_FACTORY');
|
|
13
|
+
|
|
14
|
+
class GroupBreadcrumbEllipsisComponent {
|
|
15
|
+
constructor() {
|
|
16
|
+
this.isLoading = false;
|
|
17
|
+
this.assetHierarchyService = inject(AssetHierarchyService);
|
|
18
|
+
this.contextData = inject(GROUP_BREADCRUMB_CONTEXT_DATA);
|
|
19
|
+
this.factory = inject(GROUP_BREADCRUMB_FACTORY);
|
|
20
|
+
}
|
|
21
|
+
async onClick() {
|
|
22
|
+
this.isLoading = true;
|
|
23
|
+
const ancestorPaths = await this.assetHierarchyService.getAncestorPaths(this.contextData.id);
|
|
24
|
+
this.factory.setAncestorPaths(ancestorPaths);
|
|
25
|
+
this.isLoading = false;
|
|
26
|
+
}
|
|
27
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: GroupBreadcrumbEllipsisComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
28
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: GroupBreadcrumbEllipsisComponent, isStandalone: true, selector: "c8y-group-breadcrumb-ellipsis", ngImport: i0, template: "<button\n class=\"btn-clean btn btn-xs\"\n [ngStyle]=\"{ cursor: isLoading ? 'wait' : 'pointer' }\"\n title=\"{{ 'Show all paths' | translate }}\"\n type=\"button\"\n (click)=\"!isLoading && onClick()\"\n>\n ...\n</button>\n", dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
|
|
29
|
+
}
|
|
30
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: GroupBreadcrumbEllipsisComponent, decorators: [{
|
|
31
|
+
type: Component,
|
|
32
|
+
args: [{ selector: 'c8y-group-breadcrumb-ellipsis', standalone: true, imports: [NgStyle, C8yTranslatePipe], template: "<button\n class=\"btn-clean btn btn-xs\"\n [ngStyle]=\"{ cursor: isLoading ? 'wait' : 'pointer' }\"\n title=\"{{ 'Show all paths' | translate }}\"\n type=\"button\"\n (click)=\"!isLoading && onClick()\"\n>\n ...\n</button>\n" }]
|
|
33
|
+
}] });
|
|
34
|
+
|
|
35
|
+
class GroupBreadcrumbFactory {
|
|
36
|
+
constructor() {
|
|
37
|
+
this.SUPPORTED_CONTEXTS = [ViewContext.Device, ViewContext.Group];
|
|
38
|
+
this.GROUP_ICON = 'c8y-group';
|
|
39
|
+
this.DEVICE_ICON = 'data-transfer';
|
|
40
|
+
this.deviceDefaultLabel = gettext('Device {{id}}');
|
|
41
|
+
this.currentBreadcrumbData = null;
|
|
42
|
+
this.breadcrumbService = inject(BreadcrumbService);
|
|
43
|
+
this.routerService = inject(RouterService);
|
|
44
|
+
this.groupService = inject(GroupService);
|
|
45
|
+
this.translateService = inject(TranslateService);
|
|
46
|
+
this.injector = inject(Injector);
|
|
47
|
+
this.contextRouteService = inject(ContextRouteService);
|
|
48
|
+
this.assetNodeService = inject(AssetNodeService);
|
|
49
|
+
}
|
|
50
|
+
async get(activatedRoute) {
|
|
51
|
+
const routeData = this.contextRouteService.getContextData(activatedRoute);
|
|
52
|
+
const context = routeData?.context;
|
|
53
|
+
const contextData = routeData?.contextData;
|
|
54
|
+
// Only show breadcrumbs for Device/Group contexts with contextData
|
|
55
|
+
if (!this.SUPPORTED_CONTEXTS.includes(context) || !contextData) {
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
// Check if same context as before
|
|
59
|
+
const isSameContext = this.currentBreadcrumbData?.contextData?.id === contextData.id;
|
|
60
|
+
// If same context and has ancestor paths loaded, return full breadcrumb
|
|
61
|
+
if (isSameContext && this.currentBreadcrumbData?.ancestorPaths) {
|
|
62
|
+
return this.buildFullBreadcrumb(this.currentBreadcrumbData.ancestorPaths);
|
|
63
|
+
}
|
|
64
|
+
// If same context but no ancestor paths, return existing ellipsis breadcrumb
|
|
65
|
+
if (isSameContext && this.currentBreadcrumbData?.breadcrumbs) {
|
|
66
|
+
return this.currentBreadcrumbData.breadcrumbs;
|
|
67
|
+
}
|
|
68
|
+
// New context - determine if root or nested
|
|
69
|
+
const rootNodesResult = await firstValueFrom(this.assetNodeService.rootGroups$);
|
|
70
|
+
const rootNodes = rootNodesResult.data || [];
|
|
71
|
+
const isRootNode = rootNodes.some(node => node.id === contextData.id);
|
|
72
|
+
const icon = await this.getIcon(contextData);
|
|
73
|
+
// Root node: simple breadcrumb
|
|
74
|
+
if (isRootNode) {
|
|
75
|
+
const breadcrumbs = [
|
|
76
|
+
{
|
|
77
|
+
items: [
|
|
78
|
+
{
|
|
79
|
+
label: gettext('Groups'),
|
|
80
|
+
path: 'group',
|
|
81
|
+
icon: this.GROUP_ICON
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
label: contextData.name,
|
|
85
|
+
icon,
|
|
86
|
+
path: ''
|
|
87
|
+
}
|
|
88
|
+
]
|
|
89
|
+
}
|
|
90
|
+
];
|
|
91
|
+
this.currentBreadcrumbData = {
|
|
92
|
+
contextData: cloneDeep(contextData),
|
|
93
|
+
breadcrumbs
|
|
94
|
+
};
|
|
95
|
+
return breadcrumbs;
|
|
96
|
+
}
|
|
97
|
+
// Nested node: breadcrumb with ellipsis component
|
|
98
|
+
const ellipsisInjector = Injector.create({
|
|
99
|
+
parent: this.injector,
|
|
100
|
+
providers: [
|
|
101
|
+
{ provide: GROUP_BREADCRUMB_CONTEXT_DATA, useValue: contextData },
|
|
102
|
+
{ provide: GROUP_BREADCRUMB_FACTORY, useValue: this }
|
|
103
|
+
]
|
|
104
|
+
});
|
|
105
|
+
const breadcrumbs = [
|
|
106
|
+
{
|
|
107
|
+
injector: ellipsisInjector,
|
|
108
|
+
items: [
|
|
109
|
+
{
|
|
110
|
+
label: gettext('Groups'),
|
|
111
|
+
path: 'group',
|
|
112
|
+
icon: this.GROUP_ICON
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
component: GroupBreadcrumbEllipsisComponent
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
label: contextData.name ||
|
|
119
|
+
this.translateService.instant(this.deviceDefaultLabel, { id: contextData.id }),
|
|
120
|
+
icon,
|
|
121
|
+
path: ''
|
|
122
|
+
}
|
|
123
|
+
]
|
|
124
|
+
}
|
|
125
|
+
];
|
|
126
|
+
this.currentBreadcrumbData = {
|
|
127
|
+
contextData: cloneDeep(contextData),
|
|
128
|
+
breadcrumbs
|
|
129
|
+
};
|
|
130
|
+
return breadcrumbs;
|
|
131
|
+
}
|
|
132
|
+
setAncestorPaths(ancestorPaths) {
|
|
133
|
+
if (!this.currentBreadcrumbData) {
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
this.currentBreadcrumbData.ancestorPaths = ancestorPaths;
|
|
137
|
+
this.breadcrumbService.refresh(); // will trigger factory `get` once again
|
|
138
|
+
}
|
|
139
|
+
async buildFullBreadcrumb(ancestorPaths) {
|
|
140
|
+
const converted = await this.convertToBreadcrumbItems(ancestorPaths);
|
|
141
|
+
const sorted = this.sortBreadcrumbItems(converted);
|
|
142
|
+
const breadcrumbs = sorted.map(bc => ({
|
|
143
|
+
items: [
|
|
144
|
+
{
|
|
145
|
+
label: gettext('Groups'),
|
|
146
|
+
path: 'group',
|
|
147
|
+
icon: this.GROUP_ICON
|
|
148
|
+
},
|
|
149
|
+
...bc.map((item, index) => ({
|
|
150
|
+
...item,
|
|
151
|
+
path: index === bc.length - 1 ? undefined : item.path
|
|
152
|
+
}))
|
|
153
|
+
],
|
|
154
|
+
forceDropdownOpen: sorted.length > 1
|
|
155
|
+
}));
|
|
156
|
+
this.currentBreadcrumbData.breadcrumbs = breadcrumbs;
|
|
157
|
+
return breadcrumbs;
|
|
158
|
+
}
|
|
159
|
+
async convertToBreadcrumbItems(ancestorPaths) {
|
|
160
|
+
return Promise.all(ancestorPaths.map(async (path) => Promise.all(path.map(async (managedObject) => ({
|
|
161
|
+
label: managedObject.name ||
|
|
162
|
+
this.translateService.instant(this.deviceDefaultLabel, { id: managedObject.id }),
|
|
163
|
+
path: '/' + this.routerService.getHref(managedObject, ''),
|
|
164
|
+
icon: await this.getIcon(managedObject)
|
|
165
|
+
})))));
|
|
166
|
+
}
|
|
167
|
+
sortBreadcrumbItems(breadcrumbItems) {
|
|
168
|
+
const breadcrumbs = breadcrumbItems.map(items => ({ items }));
|
|
169
|
+
const sorted = this.breadcrumbService.sortByPreferredPath(breadcrumbs);
|
|
170
|
+
return sorted.map(breadcrumb => breadcrumb.items);
|
|
171
|
+
}
|
|
172
|
+
async getIcon(managedObject) {
|
|
173
|
+
if (this.groupService.isDevice(managedObject)) {
|
|
174
|
+
return this.DEVICE_ICON;
|
|
175
|
+
}
|
|
176
|
+
return this.groupService.getIcon(managedObject);
|
|
177
|
+
}
|
|
178
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: GroupBreadcrumbFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
179
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: GroupBreadcrumbFactory }); }
|
|
180
|
+
}
|
|
181
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: GroupBreadcrumbFactory, decorators: [{
|
|
182
|
+
type: Injectable
|
|
183
|
+
}] });
|
|
184
|
+
|
|
185
|
+
const groupBreadcrumbsProviders = [hookBreadcrumb(GroupBreadcrumbFactory)];
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* Generated bundle index. Do not edit.
|
|
189
|
+
*/
|
|
190
|
+
|
|
191
|
+
export { groupBreadcrumbsProviders };
|
|
192
|
+
//# sourceMappingURL=c8y-ngx-components-group-breadcrumbs.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"c8y-ngx-components-group-breadcrumbs.mjs","sources":["../../group-breadcrumbs/group-breadcrumb.tokens.ts","../../group-breadcrumbs/group-breadcrumb-ellipsis.component.ts","../../group-breadcrumbs/group-breadcrumb-ellipsis.component.html","../../group-breadcrumbs/group-breadcrumb.factory.ts","../../group-breadcrumbs/index.ts","../../group-breadcrumbs/c8y-ngx-components-group-breadcrumbs.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { IManagedObject } from '@c8y/client';\nimport { GroupBreadcrumbFactory } from './group-breadcrumb.factory';\n\nexport const GROUP_BREADCRUMB_CONTEXT_DATA = new InjectionToken<IManagedObject>(\n 'GROUP_BREADCRUMB_CONTEXT_DATA'\n);\n\nexport const GROUP_BREADCRUMB_FACTORY = new InjectionToken<GroupBreadcrumbFactory>(\n 'GROUP_BREADCRUMB_FACTORY'\n);\n","import { Component, inject } from '@angular/core';\nimport { NgStyle } from '@angular/common';\nimport { GROUP_BREADCRUMB_CONTEXT_DATA, GROUP_BREADCRUMB_FACTORY } from './group-breadcrumb.tokens';\nimport { AssetHierarchyService, C8yTranslatePipe } from '@c8y/ngx-components';\n\n@Component({\n selector: 'c8y-group-breadcrumb-ellipsis',\n templateUrl: './group-breadcrumb-ellipsis.component.html',\n standalone: true,\n imports: [NgStyle, C8yTranslatePipe]\n})\nexport class GroupBreadcrumbEllipsisComponent {\n isLoading = false;\n\n private assetHierarchyService = inject(AssetHierarchyService);\n private contextData = inject(GROUP_BREADCRUMB_CONTEXT_DATA);\n private factory = inject(GROUP_BREADCRUMB_FACTORY);\n\n async onClick() {\n this.isLoading = true;\n const ancestorPaths = await this.assetHierarchyService.getAncestorPaths(this.contextData.id);\n this.factory.setAncestorPaths(ancestorPaths);\n this.isLoading = false;\n }\n}\n","<button\n class=\"btn-clean btn btn-xs\"\n [ngStyle]=\"{ cursor: isLoading ? 'wait' : 'pointer' }\"\n title=\"{{ 'Show all paths' | translate }}\"\n type=\"button\"\n (click)=\"!isLoading && onClick()\"\n>\n ...\n</button>\n","import { Injectable, Injector, inject } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { IManagedObject } from '@c8y/client';\nimport { firstValueFrom } from 'rxjs';\nimport { GroupBreadcrumbEllipsisComponent } from './group-breadcrumb-ellipsis.component';\nimport { GROUP_BREADCRUMB_CONTEXT_DATA, GROUP_BREADCRUMB_FACTORY } from './group-breadcrumb.tokens';\nimport { TranslateService } from '@ngx-translate/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { cloneDeep } from 'lodash-es';\nimport {\n Breadcrumb,\n BreadcrumbItemWithLabel,\n BreadcrumbService,\n ContextRouteService,\n ExtensionFactory,\n GroupService,\n RouterService,\n ViewContext\n} from '@c8y/ngx-components';\nimport { AssetNodeService } from '@c8y/ngx-components/module-federation-exports/assets-navigator';\n\n@Injectable()\nexport class GroupBreadcrumbFactory implements ExtensionFactory<Breadcrumb> {\n private readonly SUPPORTED_CONTEXTS = [ViewContext.Device, ViewContext.Group];\n private readonly GROUP_ICON = 'c8y-group';\n private readonly DEVICE_ICON = 'data-transfer';\n private deviceDefaultLabel = gettext('Device {{id}}');\n\n private currentBreadcrumbData: {\n contextData: IManagedObject;\n breadcrumbs: Breadcrumb[];\n ancestorPaths?: IManagedObject[][];\n } | null = null;\n\n private breadcrumbService = inject(BreadcrumbService);\n private routerService = inject(RouterService);\n private groupService = inject(GroupService);\n private translateService = inject(TranslateService);\n private injector = inject(Injector);\n private contextRouteService = inject(ContextRouteService);\n private assetNodeService = inject(AssetNodeService);\n\n async get(activatedRoute?: ActivatedRoute): Promise<Breadcrumb[] | null> {\n const routeData = this.contextRouteService.getContextData(activatedRoute);\n const context = routeData?.context;\n const contextData = routeData?.contextData as IManagedObject;\n\n // Only show breadcrumbs for Device/Group contexts with contextData\n if (!this.SUPPORTED_CONTEXTS.includes(context) || !contextData) {\n return null;\n }\n\n // Check if same context as before\n const isSameContext = this.currentBreadcrumbData?.contextData?.id === contextData.id;\n\n // If same context and has ancestor paths loaded, return full breadcrumb\n if (isSameContext && this.currentBreadcrumbData?.ancestorPaths) {\n return this.buildFullBreadcrumb(this.currentBreadcrumbData.ancestorPaths);\n }\n\n // If same context but no ancestor paths, return existing ellipsis breadcrumb\n if (isSameContext && this.currentBreadcrumbData?.breadcrumbs) {\n return this.currentBreadcrumbData.breadcrumbs;\n }\n\n // New context - determine if root or nested\n const rootNodesResult = await firstValueFrom(this.assetNodeService.rootGroups$);\n const rootNodes = rootNodesResult.data || [];\n\n const isRootNode = rootNodes.some(node => node.id === contextData.id);\n const icon = await this.getIcon(contextData);\n\n // Root node: simple breadcrumb\n if (isRootNode) {\n const breadcrumbs: Breadcrumb[] = [\n {\n items: [\n {\n label: gettext('Groups'),\n path: 'group',\n icon: this.GROUP_ICON\n },\n {\n label: contextData.name,\n icon,\n path: ''\n }\n ]\n }\n ];\n\n this.currentBreadcrumbData = {\n contextData: cloneDeep(contextData),\n breadcrumbs\n };\n\n return breadcrumbs;\n }\n\n // Nested node: breadcrumb with ellipsis component\n const ellipsisInjector = Injector.create({\n parent: this.injector,\n providers: [\n { provide: GROUP_BREADCRUMB_CONTEXT_DATA, useValue: contextData },\n { provide: GROUP_BREADCRUMB_FACTORY, useValue: this }\n ]\n });\n\n const breadcrumbs: Breadcrumb[] = [\n {\n injector: ellipsisInjector,\n items: [\n {\n label: gettext('Groups'),\n path: 'group',\n icon: this.GROUP_ICON\n },\n {\n component: GroupBreadcrumbEllipsisComponent\n },\n {\n label:\n contextData.name ||\n this.translateService.instant(this.deviceDefaultLabel, { id: contextData.id }),\n icon,\n path: ''\n }\n ]\n }\n ];\n\n this.currentBreadcrumbData = {\n contextData: cloneDeep(contextData),\n breadcrumbs\n };\n\n return breadcrumbs;\n }\n\n setAncestorPaths(ancestorPaths: IManagedObject[][]) {\n if (!this.currentBreadcrumbData) {\n return;\n }\n\n this.currentBreadcrumbData.ancestorPaths = ancestorPaths;\n this.breadcrumbService.refresh(); // will trigger factory `get` once again\n }\n\n private async buildFullBreadcrumb(ancestorPaths: IManagedObject[][]): Promise<Breadcrumb[]> {\n const converted = await this.convertToBreadcrumbItems(ancestorPaths);\n const sorted = this.sortBreadcrumbItems(converted);\n\n const breadcrumbs: Breadcrumb[] = sorted.map(\n bc =>\n ({\n items: [\n {\n label: gettext('Groups'),\n path: 'group',\n icon: this.GROUP_ICON\n },\n ...bc.map((item, index) => ({\n ...item,\n path: index === bc.length - 1 ? undefined : item.path\n }))\n ],\n forceDropdownOpen: sorted.length > 1\n }) as Breadcrumb\n );\n\n this.currentBreadcrumbData.breadcrumbs = breadcrumbs;\n\n return breadcrumbs;\n }\n\n private async convertToBreadcrumbItems(\n ancestorPaths: IManagedObject[][]\n ): Promise<BreadcrumbItemWithLabel[][]> {\n return Promise.all(\n ancestorPaths.map(async path =>\n Promise.all(\n path.map(async managedObject => ({\n label:\n managedObject.name ||\n this.translateService.instant(this.deviceDefaultLabel, { id: managedObject.id }),\n path: '/' + this.routerService.getHref(managedObject, ''),\n icon: await this.getIcon(managedObject)\n }))\n )\n )\n );\n }\n\n private sortBreadcrumbItems(\n breadcrumbItems: BreadcrumbItemWithLabel[][]\n ): BreadcrumbItemWithLabel[][] {\n const breadcrumbs: Breadcrumb[] = breadcrumbItems.map(items => ({ items }));\n const sorted = this.breadcrumbService.sortByPreferredPath(breadcrumbs);\n return sorted.map(breadcrumb => breadcrumb.items as BreadcrumbItemWithLabel[]);\n }\n\n private async getIcon(managedObject: IManagedObject): Promise<string> {\n if (this.groupService.isDevice(managedObject)) {\n return this.DEVICE_ICON;\n }\n return this.groupService.getIcon(managedObject);\n }\n}\n","import { hookBreadcrumb } from '@c8y/ngx-components';\nimport { GroupBreadcrumbFactory } from './group-breadcrumb.factory';\n\nexport const groupBreadcrumbsProviders = [hookBreadcrumb(GroupBreadcrumbFactory)];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export * from '@c8y/ngx-components/assets-navigator';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* This entry point re-exports all public APIs from the assets-navigator package.
|
|
5
|
+
* It was necessary for GroupBreadcrumbFactory to get root groups from AssetNodeService.
|
|
6
|
+
* Without new entry point, it would create separate intstance of AssetNodeService, but we need the same instance
|
|
7
|
+
* to avoid additional HTTP request.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Generated bundle index. Do not edit.
|
|
12
|
+
*/
|
|
13
|
+
//# sourceMappingURL=c8y-ngx-components-module-federation-exports-assets-navigator.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"c8y-ngx-components-module-federation-exports-assets-navigator.mjs","sources":["../../module-federation-exports/assets-navigator/index.ts","../../module-federation-exports/assets-navigator/c8y-ngx-components-module-federation-exports-assets-navigator.ts"],"sourcesContent":["/**\n * This entry point re-exports all public APIs from the assets-navigator package.\n * It was necessary for GroupBreadcrumbFactory to get root groups from AssetNodeService.\n * Without new entry point, it would create separate intstance of AssetNodeService, but we need the same instance\n * to avoid additional HTTP request.\n */\nexport * from '@c8y/ngx-components/assets-navigator';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;AAAA;;;;;AAKG;;ACLH;;AAEG"}
|
|
@@ -586,8 +586,12 @@ class RadialGaugeService {
|
|
|
586
586
|
formatter: () => {
|
|
587
587
|
const value = measurement?.value.toFixed(fractionSize) || 0;
|
|
588
588
|
const unit = activeDatapointGauge?.unit || measurement?.unit || '';
|
|
589
|
-
|
|
590
|
-
|
|
589
|
+
// use -- as fallback in case date is not set (e.g. no measurement yet available for datapoint)
|
|
590
|
+
let formattedDate = '--';
|
|
591
|
+
if (measurement?.date) {
|
|
592
|
+
const date = new Date(measurement.date);
|
|
593
|
+
formattedDate = this.c8yDatePipe.transform(date);
|
|
594
|
+
}
|
|
591
595
|
return `{value|${value}}{unit|${unit}} \n {date|${formattedDate}} `;
|
|
592
596
|
},
|
|
593
597
|
color: '#fff',
|