@c8y/ngx-components 1011.0.19 → 1011.0.20
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/asset-node.service.d.ts +7 -3
- package/assets-navigator/c8y-ngx-components-assets-navigator.metadata.json +1 -1
- package/bundles/c8y-ngx-components-assets-navigator.umd.js +7 -2
- package/bundles/c8y-ngx-components-assets-navigator.umd.js.map +1 -1
- package/bundles/c8y-ngx-components-assets-navigator.umd.min.js +1 -1
- package/bundles/c8y-ngx-components-assets-navigator.umd.min.js.map +1 -1
- package/bundles/c8y-ngx-components-child-devices.umd.js +416 -0
- package/bundles/c8y-ngx-components-child-devices.umd.js.map +1 -0
- package/bundles/c8y-ngx-components-child-devices.umd.min.js +16 -0
- package/bundles/c8y-ngx-components-child-devices.umd.min.js.map +1 -0
- package/bundles/c8y-ngx-components-device-grid.umd.js +169 -36
- package/bundles/c8y-ngx-components-device-grid.umd.js.map +1 -1
- package/bundles/c8y-ngx-components-device-grid.umd.min.js +2 -2
- package/bundles/c8y-ngx-components-device-grid.umd.min.js.map +1 -1
- package/bundles/c8y-ngx-components-sub-assets.umd.js +5 -3
- package/bundles/c8y-ngx-components-sub-assets.umd.js.map +1 -1
- package/bundles/c8y-ngx-components-sub-assets.umd.min.js +1 -1
- package/bundles/c8y-ngx-components-sub-assets.umd.min.js.map +1 -1
- package/child-devices/c8y-ngx-components-child-devices.d.ts +5 -0
- package/child-devices/c8y-ngx-components-child-devices.metadata.json +1 -0
- package/child-devices/child-devices.component.d.ts +9 -0
- package/child-devices/child-devices.guard.d.ts +7 -0
- package/child-devices/child-devices.module.d.ts +2 -0
- package/child-devices/index.d.ts +2 -0
- package/child-devices/package.json +11 -0
- package/device-grid/c8y-ngx-components-device-grid.metadata.json +1 -1
- package/device-grid/device-grid.component.d.ts +18 -4
- package/device-grid/device-grid.service.d.ts +8 -3
- package/esm2015/assets-navigator/asset-node.service.js +8 -3
- package/esm2015/child-devices/c8y-ngx-components-child-devices.js +6 -0
- package/esm2015/child-devices/child-devices.component.js +30 -0
- package/esm2015/child-devices/child-devices.guard.js +30 -0
- package/esm2015/child-devices/child-devices.module.js +36 -0
- package/esm2015/child-devices/index.js +3 -0
- package/esm2015/device-grid/device-grid.component.js +62 -15
- package/esm2015/device-grid/device-grid.service.js +59 -22
- package/esm2015/sub-assets/sub-assets.service.js +7 -5
- package/fesm2015/c8y-ngx-components-assets-navigator.js +7 -2
- package/fesm2015/c8y-ngx-components-assets-navigator.js.map +1 -1
- package/fesm2015/c8y-ngx-components-child-devices.js +96 -0
- package/fesm2015/c8y-ngx-components-child-devices.js.map +1 -0
- package/fesm2015/c8y-ngx-components-device-grid.js +118 -35
- package/fesm2015/c8y-ngx-components-device-grid.js.map +1 -1
- package/fesm2015/c8y-ngx-components-sub-assets.js +6 -4
- package/fesm2015/c8y-ngx-components-sub-assets.js.map +1 -1
- package/locales/locales.pot +6 -0
- package/package.json +2 -2
- package/sub-assets/c8y-ngx-components-sub-assets.metadata.json +1 -1
- package/sub-assets/sub-assets.service.d.ts +3 -2
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { __awaiter } from "tslib";
|
|
2
2
|
import { Injectable } from '@angular/core';
|
|
3
3
|
import { InventoryService, SmartGroupsService, SmartRulesService, UserService } from '@c8y/client';
|
|
4
|
-
import { AlertService, AppStateService, gettext, Permissions } from '@c8y/ngx-components';
|
|
4
|
+
import { AlertService, AppStateService, gettext, ModalService, Permissions } from '@c8y/ngx-components';
|
|
5
5
|
import { AssetNodeService, DeviceGroupService } from '@c8y/ngx-components/assets-navigator';
|
|
6
6
|
import { AlarmsDeviceGridColumn, DeviceGridService, ImeiDeviceGridColumn, ModelDeviceGridColumn, NameDeviceGridColumn, RegistrationDateDeviceGridColumn, SerialNumberDeviceGridColumn, SystemIdDeviceGridColumn } from '@c8y/ngx-components/device-grid';
|
|
7
7
|
import { TranslateService } from '@ngx-translate/core';
|
|
8
8
|
import { BehaviorSubject } from 'rxjs';
|
|
9
9
|
import { AssetTypeGridColumn } from './columns/asset-type-grid-column';
|
|
10
10
|
export class SubAssetsService extends DeviceGridService {
|
|
11
|
-
constructor(translateService, inventoryService, appState, user, assetNodeService, deviceGroupService, smartGroupsService, smartRulesService, alertService, permissionsService) {
|
|
12
|
-
super(inventoryService, translateService);
|
|
11
|
+
constructor(translateService, inventoryService, appState, user, assetNodeService, deviceGroupService, smartGroupsService, smartRulesService, alertService, permissionsService, modal) {
|
|
12
|
+
super(inventoryService, translateService, alertService, modal);
|
|
13
13
|
this.translateService = translateService;
|
|
14
14
|
this.inventoryService = inventoryService;
|
|
15
15
|
this.appState = appState;
|
|
@@ -20,6 +20,7 @@ export class SubAssetsService extends DeviceGridService {
|
|
|
20
20
|
this.smartRulesService = smartRulesService;
|
|
21
21
|
this.alertService = alertService;
|
|
22
22
|
this.permissionsService = permissionsService;
|
|
23
|
+
this.modal = modal;
|
|
23
24
|
this.uiOnlyCountersUpdate = new BehaviorSubject(null);
|
|
24
25
|
this.GRID_CONFIG_DEFAULT_STORAGE_KEY = 'sub-assets-grid-config';
|
|
25
26
|
this.IS_DEVICE_GROUP_FRAGMENT = 'c8y_IsDeviceGroup';
|
|
@@ -288,6 +289,7 @@ SubAssetsService.ctorParameters = () => [
|
|
|
288
289
|
{ type: SmartGroupsService },
|
|
289
290
|
{ type: SmartRulesService },
|
|
290
291
|
{ type: AlertService },
|
|
291
|
-
{ type: Permissions }
|
|
292
|
+
{ type: Permissions },
|
|
293
|
+
{ type: ModalService }
|
|
292
294
|
];
|
|
293
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ViLWFzc2V0cy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3ViLWFzc2V0cy9zdWItYXNzZXRzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUVMLGdCQUFnQixFQUdoQixrQkFBa0IsRUFDbEIsaUJBQWlCLEVBQ2pCLFdBQVcsRUFDWixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBRUwsWUFBWSxFQUNaLGVBQWUsRUFFZixPQUFPLEVBRVAsV0FBVyxFQUNaLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDNUYsT0FBTyxFQUNMLHNCQUFzQixFQUV0QixpQkFBaUIsRUFDakIsb0JBQW9CLEVBQ3BCLHFCQUFxQixFQUNyQixvQkFBb0IsRUFDcEIsZ0NBQWdDLEVBQ2hDLDRCQUE0QixFQUM1Qix3QkFBd0IsRUFDekIsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBR3ZFLE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxpQkFBaUI7SUFPckQsWUFDWSxnQkFBa0MsRUFDbEMsZ0JBQWtDLEVBQ2xDLFFBQXlCLEVBQ3pCLElBQWlCLEVBQ2pCLGdCQUFrQyxFQUNsQyxrQkFBc0MsRUFDdEMsa0JBQXNDLEVBQ3RDLGlCQUFvQyxFQUNwQyxZQUEwQixFQUMxQixrQkFBK0I7UUFFekMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFYaEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFr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QkFBZ0IsQ0FBQyxPQUEyQixFQUFFLFVBQXNCLEVBQUUsU0FBUztRQUNyRixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ2xGLE9BQU87WUFDTCxLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO1lBQ3pDLFFBQVEsRUFBRSxVQUFVLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxpQkFBaUI7WUFDdkQsV0FBVyxFQUFFLFVBQVUsQ0FBQyxXQUFXO1lBQ25DLGNBQWMsRUFBRSxJQUFJO1NBQ3JCLENBQUM7SUFDSixDQUFDOzs7WUEvVEYsVUFBVTs7O1lBSkYsZ0JBQWdCO1lBNUJ2QixnQkFBZ0I7WUFVaEIsZUFBZTtZQUxmLFdBQVc7WUFXSixnQkFBZ0I7WUFBRSxrQkFBa0I7WUFiM0Msa0JBQWtCO1lBQ2xCLGlCQUFpQjtZQUtqQixZQUFZO1lBS1osV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIElNYW5hZ2VkT2JqZWN0LFxuICBJbnZlbnRvcnlTZXJ2aWNlLFxuICBJUnVsZSxcbiAgUXVlcmllc1V0aWwsXG4gIFNtYXJ0R3JvdXBzU2VydmljZSxcbiAgU21hcnRSdWxlc1NlcnZpY2UsXG4gIFVzZXJTZXJ2aWNlXG59IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7XG4gIEFjdGlvbkNvbnRyb2wsXG4gIEFsZXJ0U2VydmljZSxcbiAgQXBwU3RhdGVTZXJ2aWNlLFxuICBCdWxrQWN0aW9uQ29udHJvbCxcbiAgZ2V0dGV4dCxcbiAgUGFnaW5hdGlvbixcbiAgUGVybWlzc2lvbnNcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBBc3NldE5vZGVTZXJ2aWNlLCBEZXZpY2VHcm91cFNlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2Fzc2V0cy1uYXZpZ2F0b3InO1xuaW1wb3J0IHtcbiAgQWxhcm1zRGV2aWNlR3JpZENvbHVtbixcbiAgRGV2aWNlR3JpZENvbHVtbixcbiAgRGV2aWNlR3JpZFNlcnZpY2UsXG4gIEltZWlEZXZpY2VHcmlkQ29sdW1uLFxuICBNb2RlbERldmljZUdyaWRDb2x1bW4sXG4gIE5hbWVEZXZpY2VHcmlkQ29sdW1uLFxuICBSZWdpc3RyYXRpb25EYXRlRGV2aWNlR3JpZENvbHVtbixcbiAgU2VyaWFsTnVtYmVyRGV2aWNlR3JpZENvbHVtbixcbiAgU3lzdGVtSWREZXZpY2VHcmlkQ29sdW1uXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvZGV2aWNlLWdyaWQnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBc3NldFR5cGVHcmlkQ29sdW1uIH0gZnJvbSAnLi9jb2x1bW5zL2Fzc2V0LXR5cGUtZ3JpZC1jb2x1bW4nO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU3ViQXNzZXRzU2VydmljZSBleHRlbmRzIERldmljZUdyaWRTZXJ2aWNlIHtcbiAgcXVlcmllc1V0aWw6IFF1ZXJpZXNVdGlsO1xuICB1aU9ubHlDb3VudGVyc1VwZGF0ZSA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XG4gIHByb3RlY3RlZCBHUklEX0NPTkZJR19ERUZBVUxUX1NUT1JBR0VfS0VZID0gJ3N1Yi1hc3NldHMtZ3JpZC1jb25maWcnO1xuICBwcml2YXRlIElTX0RFVklDRV9HUk9VUF9GUkFHTUVOVCA9ICdjOHlfSXNEZXZpY2VHcm91cCc7XG4gIHByaXZhdGUgSVNfRFlOQU1JQ19HUk9VUF9GUkFHTUVOVCA9ICdjOHlfSXNEeW5hbWljR3JvdXAnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBpbnZlbnRvcnlTZXJ2aWNlOiBJbnZlbnRvcnlTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBhcHBTdGF0ZTogQXBwU3RhdGVTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCB1c2VyOiBVc2VyU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgYXNzZXROb2RlU2VydmljZTogQXNzZXROb2RlU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgZGV2aWNlR3JvdXBTZXJ2aWNlOiBEZXZpY2VHcm91cFNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHNtYXJ0R3JvdXBzU2VydmljZTogU21hcnRHcm91cHNTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBzbWFydFJ1bGVzU2VydmljZTogU21hcnRSdWxlc1NlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBwZXJtaXNzaW9uc1NlcnZpY2U6IFBlcm1pc3Npb25zXG4gICkge1xuICAgIHN1cGVyKGludmVudG9yeVNlcnZpY2UsIHRyYW5zbGF0ZVNlcnZpY2UpO1xuICB9XG5cbiAgZ2V0RGVmYXVsdENvbHVtbnMoZmlsdGVyYWJsZTogYm9vbGVhbiA9IHRydWUsIHNvcnRhYmxlOiBib29sZWFuID0gdHJ1ZSk6IERldmljZUdyaWRDb2x1bW5bXSB7XG4gICAgY29uc3QgZGVmYXVsdENvbHVtbnMgPSBbXG4gICAgICBuZXcgQXNzZXRUeXBlR3JpZENvbHVtbih7IHNvcnRPcmRlcjogJ2Rlc2MnIH0pLFxuICAgICAgbmV3IE5hbWVEZXZpY2VHcmlkQ29sdW1uKHsgc29ydE9yZGVyOiAnYXNjJyB9KSxcbiAgICAgIG5ldyBNb2RlbERldmljZUdyaWRDb2x1bW4oKSxcbiAgICAgIG5ldyBTZXJpYWxOdW1iZXJEZXZpY2VHcmlkQ29sdW1uKHsgdmlzaWJsZTogZmFsc2UgfSksXG4gICAgICBuZXcgUmVnaXN0cmF0aW9uRGF0ZURldmljZUdyaWRDb2x1bW4oeyB2aXNpYmxlOiBmYWxzZSB9KSxcbiAgICAgIG5ldyBTeXN0ZW1JZERldmljZUdyaWRDb2x1bW4oeyB2aXNpYmxlOiBmYWxzZSB9KSxcbiAgICAgIG5ldyBJbWVpRGV2aWNlR3JpZENvbHVtbih7IHZpc2libGU6IGZhbHNlIH0pLFxuICAgICAgbmV3IEFsYXJtc0RldmljZUdyaWRDb2x1bW4oKVxuICAgIF07XG4gICAgcmV0dXJuIGRlZmF1bHRDb2x1bW5zO1xuICB9XG5cbiAgZ2V0RGVmYXVsdFBhZ2luYXRpb24oKTogUGFnaW5hdGlvbiB7XG4gICAgY29uc3QgeyBwYWdpbmF0aW9uIH0gPSB0aGlzLmdldENvbmZpZygpO1xuICAgIHJldHVybiB7XG4gICAgICBwYWdlU2l6ZTogcGFnaW5hdGlvbi5wYWdlU2l6ZSxcbiAgICAgIGN1cnJlbnRQYWdlOiAxXG4gICAgfTtcbiAgfVxuXG4gIGdldERlZmF1bHRBY3Rpb25Db250cm9scygpOiBBY3Rpb25Db250cm9sW10ge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGFzeW5jIHVuYXNzaWduQXNzZXQoYXNzZXQ6IElNYW5hZ2VkT2JqZWN0LCBwYXJlbnRSZWY6IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgY29uc3QgeyBpZDogYXNzZXRJZCB9ID0gYXNzZXQ7XG4gICAgY29uc3QgeyBpZDogcGFyZW50SWQgfSA9IHBhcmVudFJlZjtcblxuICAgIGlmICh0aGlzLmlzRGV2aWNlKGFzc2V0KSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5pbnZlbnRvcnlTZXJ2aWNlLmNoaWxkQXNzZXRzUmVtb3ZlKGFzc2V0SWQsIHBhcmVudElkKTtcbiAgICAgICAgY29uc3QgYWxlcnRNZXNzYWdlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoZ2V0dGV4dCgnQXNzZXQgdW5hc3NpZ25lZC4nKSk7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoYWxlcnRNZXNzYWdlKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGFsZXJ0TWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGdldHRleHQoJ0NvdWxkIG5vdCB1bmFzc2lnbiBhc3NldC4nKSk7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmRhbmdlcihhbGVydE1lc3NhZ2UpO1xuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5kZWFjdGl2YXRlU21hcnRydWxlc0ZvckFzc2V0KGFzc2V0LCBwYXJlbnRSZWYpO1xuICAgIH1cbiAgfVxuXG4gIGlzRGV2aWNlKGFzc2V0OiBJTWFuYWdlZE9iamVjdCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAhYXNzZXQuaGFzT3duUHJvcGVydHkodGhpcy5JU19ERVZJQ0VfR1JPVVBfRlJBR01FTlQpICYmXG4gICAgICAhYXNzZXQuaGFzT3duUHJvcGVydHkodGhpcy5JU19EWU5BTUlDX0dST1VQX0ZSQUdNRU5UKVxuICAgICk7XG4gIH1cblxuICBhc3luYyBkZWxldGVBc3NldChhc3NldDogSU1hbmFnZWRPYmplY3QsIHBhcmVudFJlZjogSU1hbmFnZWRPYmplY3QsIHBhcmFtcyA9IHt9KSB7XG4gICAgY29uc3QgaXNHcm91cCA9XG4gICAgICBhc3NldC5oYXNPd25Qcm9wZXJ0eSh0aGlzLklTX0RFVklDRV9HUk9VUF9GUkFHTUVOVCkgfHxcbiAgICAgIHRoaXMuc21hcnRHcm91cHNTZXJ2aWNlLmlzU21hcnRHcm91cChhc3NldCk7XG5cbiAgICBpZiAoaXNHcm91cCkge1xuICAgICAgYXdhaXQgdGhpcy5kZWxldGVHcm91cChhc3NldCwgcGFyYW1zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy5kZWxldGVEZXZpY2UoYXNzZXQsIHBhcmFtcyk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgcGFyZW50UmVmICYmXG4gICAgICAhdGhpcy5zbWFydEdyb3Vwc1NlcnZpY2UuaXNTbWFydEdyb3VwKGFzc2V0KSAmJlxuICAgICAgIXRoaXMuc21hcnRHcm91cHNTZXJ2aWNlLmlzU21hcnRHcm91cFYyKGFzc2V0KVxuICAgICkge1xuICAgICAgYXdhaXQgdGhpcy5kZWFjdGl2YXRlU21hcnRydWxlc0ZvckFzc2V0KGFzc2V0LCBwYXJlbnRSZWYpO1xuICAgIH1cbiAgfVxuXG4gIHNob3VsZFNob3dXaXRoRGV2aWNlVXNlckNoZWNrYm94KGFzc2V0OiBJTWFuYWdlZE9iamVjdCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHsgb3duZXIsIGM4eV9Jc0RldmljZTogaXNSb290RGV2aWNlIH0gPSBhc3NldDtcbiAgICBjb25zdCBoYXNEZXZpY2VVc2VyQXNPd25lciA9IGFzc2V0Lm93bmVyICYmIHRoaXMuaXNEZXZpY2VVc2VyKG93bmVyKTtcblxuICAgIHJldHVybiBCb29sZWFuKGlzUm9vdERldmljZSAmJiBoYXNEZXZpY2VVc2VyQXNPd25lcik7XG4gIH1cblxuICBnZXREZWZhdWx0QnVsa0FjdGlvbkNvbnRyb2xzKCk6IEJ1bGtBY3Rpb25Db250cm9sW10ge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGFzeW5jIGdldERhdGEoXG4gICAgY29sdW1uczogRGV2aWNlR3JpZENvbHVtbltdLFxuICAgIHBhZ2luYXRpb246IFBhZ2luYXRpb24sXG4gICAgcGFyZW50UmVmZXJlbmNlOiBJTWFuYWdlZE9iamVjdCxcbiAgICBiYXNlUXVlcnk6IGFueSA9IHt9XG4gICkge1xuICAgIGNvbnN0IGlzUm9vdCA9ICFwYXJlbnRSZWZlcmVuY2U7XG4gICAgaWYgKGlzUm9vdCkge1xuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLmJ1aWxkQ29tYmluZWRSb290UXVlcnlGaWx0ZXIoY29sdW1ucywgcGFnaW5hdGlvbik7XG4gICAgICByZXR1cm4gdGhpcy5hc3NldE5vZGVTZXJ2aWNlLmdldFJvb3ROb2Rlcyh7IC4uLnBhZ2luYXRpb24sIHF1ZXJ5IH0pO1xuICAgIH1cbiAgICBjb25zdCBmaWx0ZXJzID0ge1xuICAgICAgLi4udGhpcy5nZXRBc3NldHNGaWx0ZXJzKGNvbHVtbnMsIHBhZ2luYXRpb24sIGJhc2VRdWVyeSksXG4gICAgICB3aXRoUGFyZW50czogZmFsc2VcbiAgICB9O1xuICAgIGlmICh0aGlzLmRldmljZUdyb3VwU2VydmljZS5pc0dyb3VwKHBhcmVudFJlZmVyZW5jZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmFzc2V0Tm9kZVNlcnZpY2UuZ2V0R3JvdXBJdGVtcyhwYXJlbnRSZWZlcmVuY2UuaWQsIGZpbHRlcnMpO1xuICAgIH1cbiAgICBpZiAodGhpcy5kZXZpY2VHcm91cFNlcnZpY2UuaXNEeW5hbWljR3JvdXAocGFyZW50UmVmZXJlbmNlKSkge1xuICAgICAgcmV0dXJuIHRoaXMuYXNzZXROb2RlU2VydmljZS5nZXREeW5hbWljR3JvdXBJdGVtcyhcbiAgICAgICAgcGFyZW50UmVmZXJlbmNlLmM4eV9EZXZpY2VRdWVyeVN0cmluZyxcbiAgICAgICAgZmlsdGVyc1xuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGV2aWNlR3JvdXBTZXJ2aWNlLmlzRGV2aWNlKHBhcmVudFJlZmVyZW5jZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmFzc2V0Tm9kZVNlcnZpY2UuZ2V0RGV2aWNlQ2hpbGRyZW4ocGFyZW50UmVmZXJlbmNlLmlkLCBmaWx0ZXJzKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRDb3VudChcbiAgICBjb2x1bW5zOiBEZXZpY2VHcmlkQ29sdW1uW10sXG4gICAgcGFnaW5hdGlvbjogUGFnaW5hdGlvbixcbiAgICBwYXJlbnRSZWZlcmVuY2U6IElNYW5hZ2VkT2JqZWN0LFxuICAgIGJhc2VRdWVyeTogYW55ID0ge31cbiAgKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCBkZWZhdWx0RmlsdGVycyA9IHtcbiAgICAgIHBhZ2VTaXplOiAxLFxuICAgICAgd2l0aENoaWxkcmVuOiBmYWxzZVxuICAgIH07XG4gICAgY29uc3QgZmlsdGVycyA9ICFwYXJlbnRSZWZlcmVuY2VcbiAgICAgID8ge1xuICAgICAgICAgIHF1ZXJ5OiB0aGlzLmJ1aWxkQ29tYmluZWRSb290UXVlcnlGaWx0ZXIoY29sdW1ucywgcGFnaW5hdGlvbiksXG4gICAgICAgICAgLi4uZGVmYXVsdEZpbHRlcnNcbiAgICAgICAgfVxuICAgICAgOiB7XG4gICAgICAgICAgLi4udGhpcy5nZXRBc3NldHNGaWx0ZXJzKGNvbHVtbnMsIHBhZ2luYXRpb24sIGJhc2VRdWVyeSksXG4gICAgICAgICAgLi4uZGVmYXVsdEZpbHRlcnNcbiAgICAgICAgfTtcbiAgICByZXR1cm4gdGhpcy5nZXRBc3NldHNTdGF0aXN0aWNzKHBhcmVudFJlZmVyZW5jZSwgZmlsdGVycyk7XG4gIH1cblxuICBnZXRUb3RhbChwYXJlbnRSZWZlcmVuY2U6IElNYW5hZ2VkT2JqZWN0LCBiYXNlUXVlcnk6IGFueSA9IHt9KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCBxdWVyeUZpbHRlciA9IHRoaXMuYXNzZXROb2RlU2VydmljZS5yb290UXVlcnlGaWx0ZXIoKTtcbiAgICBjb25zdCBxdWVyeSA9ICFwYXJlbnRSZWZlcmVuY2VcbiAgICAgID8gdGhpcy5xdWVyaWVzVXRpbC5hZGRBbmRGaWx0ZXIocXVlcnlGaWx0ZXIsIGJhc2VRdWVyeSlcbiAgICAgIDogYmFzZVF1ZXJ5O1xuICAgIGNvbnN0IGZpbHRlcnMgPSB7XG4gICAgICBxdWVyeTogdGhpcy5xdWVyaWVzVXRpbC5idWlsZFF1ZXJ5KHF1ZXJ5KSxcbiAgICAgIHdpdGhDaGlsZHJlbjogZmFsc2UsXG4gICAgICB3aXRoVG90YWxQYWdlczogdHJ1ZSxcbiAgICAgIHBhZ2VTaXplOiAxXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5nZXRBc3NldHNTdGF0aXN0aWNzKHBhcmVudFJlZmVyZW5jZSwgZmlsdGVycyk7XG4gIH1cblxuICBhc3luYyBjYW5FZGl0R3JvdXAoZ3JvdXA6IElNYW5hZ2VkT2JqZWN0KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucGVybWlzc2lvbnNTZXJ2aWNlLmNhbkVkaXQoWydST0xFX0lOVkVOVE9SWV9BRE1JTiddLCBncm91cCk7XG4gIH1cblxuICBjYW5DcmVhdGVHcm91cCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBjdXJyZW50VXNlciA9IHRoaXMuYXBwU3RhdGUuY3VycmVudFVzZXIudmFsdWU7XG4gICAgY29uc3QgaGFzQWRtaW5Sb2xlID0gdGhpcy51c2VyLmhhc0FueVJvbGUoY3VycmVudFVzZXIsIFtcbiAgICAgICdST0xFX0lOVkVOVE9SWV9BRE1JTicsXG4gICAgICAnUk9MRV9JTlZFTlRPUllfQ1JFQVRFJ1xuICAgIF0pO1xuICAgIHJldHVybiBoYXNBZG1pblJvbGU7XG4gIH1cblxuICBhc3luYyBjYW5Bc3NpZ25EZXZpY2UoZ3JvdXA6IElNYW5hZ2VkT2JqZWN0KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucGVybWlzc2lvbnNTZXJ2aWNlLmNhbkVkaXQoWydST0xFX0lOVkVOVE9SWV9BRE1JTiddLCBncm91cCk7XG4gIH1cblxuICBjYW5FZGl0U21hcnRHcm91cCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBTTUFSVF9HUk9VUFNfUk9MRVNfRURJVCA9IFsnUk9MRV9TTUFSVEdST1VQX1VQREFURScsICdST0xFX1NNQVJUR1JPVVBfQURNSU4nXTtcbiAgICByZXR1cm4gdGhpcy5wZXJtaXNzaW9uc1NlcnZpY2UuaGFzQW55Um9sZShTTUFSVF9HUk9VUFNfUk9MRVNfRURJVCk7XG4gIH1cblxuICBjYW5EZWxldGVTbWFydEdyb3VwKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IFNNQVJUX0dST1VQU19ST0xFU19ERUxFVEUgPSBbJ1JPTEVfU01BUlRHUk9VUF9BRE1JTicsICdST0xFX0lOVkVOVE9SWV9BRE1JTiddO1xuICAgIHJldHVybiB0aGlzLnBlcm1pc3Npb25zU2VydmljZS5oYXNBbnlSb2xlKFNNQVJUX0dST1VQU19ST0xFU19ERUxFVEUpO1xuICB9XG5cbiAgaXNTbWFydEdyb3VwKGdyb3VwOiBJTWFuYWdlZE9iamVjdCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnNtYXJ0R3JvdXBzU2VydmljZS5pc1NtYXJ0R3JvdXAoZ3JvdXApIHx8IHRoaXMuc21hcnRHcm91cHNTZXJ2aWNlLmlzU21hcnRHcm91cFYyKGdyb3VwKVxuICAgICk7XG4gIH1cblxuICBpc1VzaW5nSW52ZW50b3J5Um9sZXMoKSB7XG4gICAgY29uc3QgY3VycmVudFVzZXIgPSB0aGlzLmFwcFN0YXRlLmN1cnJlbnRVc2VyLnZhbHVlO1xuICAgIGNvbnN0IGhhc0FueUludmVudG9yeVJvbGUgPSB0aGlzLnVzZXIuaGFzQW55Um9sZShjdXJyZW50VXNlciwgW1xuICAgICAgJ1JPTEVfSU5WRU5UT1JZX0FETUlOJyxcbiAgICAgICdST0xFX0lOVkVOVE9SWV9SRUFEJyxcbiAgICAgICdST0xFX0lOVkVOVE9SWV9DUkVBVEUnXG4gICAgXSk7XG4gICAgcmV0dXJuICFoYXNBbnlJbnZlbnRvcnlSb2xlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGdldEFzc2V0c1N0YXRpc3RpY3MoXG4gICAgcGFyZW50UmVmZXJlbmNlOiBJTWFuYWdlZE9iamVjdCxcbiAgICBmaWx0ZXJzOiBvYmplY3RcbiAgKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCBpc1Jvb3QgPSAhcGFyZW50UmVmZXJlbmNlO1xuICAgIGlmIChpc1Jvb3QpIHtcbiAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5hc3NldE5vZGVTZXJ2aWNlLmdldFJvb3ROb2RlcyhmaWx0ZXJzKSkucGFnaW5nLnRvdGFsUGFnZXM7XG4gICAgfVxuICAgIGlmICh0aGlzLmRldmljZUdyb3VwU2VydmljZS5pc0dyb3VwKHBhcmVudFJlZmVyZW5jZSkpIHtcbiAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5hc3NldE5vZGVTZXJ2aWNlLmdldEdyb3VwSXRlbXMocGFyZW50UmVmZXJlbmNlLmlkLCBmaWx0ZXJzKSkucGFnaW5nXG4gICAgICAgIC50b3RhbFBhZ2VzO1xuICAgIH1cbiAgICBpZiAodGhpcy5kZXZpY2VHcm91cFNlcnZpY2UuaXNEeW5hbWljR3JvdXAocGFyZW50UmVmZXJlbmNlKSkge1xuICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLmFzc2V0Tm9kZVNlcnZpY2UuZ2V0RHluYW1pY0dyb3VwSXRlbXMoXG4gICAgICAgIHBhcmVudFJlZmVyZW5jZS5jOHlfRGV2aWNlUXVlcnlTdHJpbmcsXG4gICAgICAgIGZpbHRlcnNcbiAgICAgICkpLnBhZ2luZy50b3RhbFBhZ2VzO1xuICAgIH1cbiAgICBpZiAodGhpcy5kZXZpY2VHcm91cFNlcnZpY2UuaXNEZXZpY2UocGFyZW50UmVmZXJlbmNlKSkge1xuICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLmFzc2V0Tm9kZVNlcnZpY2UuZ2V0RGV2aWNlQ2hpbGRyZW4ocGFyZW50UmVmZXJlbmNlLmlkLCBmaWx0ZXJzKSkucGFnaW5nXG4gICAgICAgIC50b3RhbFBhZ2VzO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBidWlsZENvbWJpbmVkUm9vdFF1ZXJ5RmlsdGVyKGNvbHVtbnMsIHBhZ2luYXRpb24pIHtcbiAgICBjb25zdCBxdWVyeUZpbHRlciA9IHRoaXMuYXNzZXROb2RlU2VydmljZS5yb290UXVlcnlGaWx0ZXIoKTtcbiAgICBjb25zdCB1c2VyUXVlcnkgPSB0aGlzLmdldFF1ZXJ5T2JqKGNvbHVtbnMsIHBhZ2luYXRpb24pO1xuXG4gICAgY29uc3QgcXVlcnlQYXJ0ID0gdGhpcy5xdWVyaWVzVXRpbC5hZGRPcmRlcmJ5cyhxdWVyeUZpbHRlciwgdXNlclF1ZXJ5Ll9fb3JkZXJieSwgJ2FwcGVuZCcpO1xuICAgIGNvbnN0IGZ1bGxRdWVyeSA9IHRoaXMucXVlcmllc1V0aWwuYWRkQW5kRmlsdGVyKHF1ZXJ5UGFydCwgdXNlclF1ZXJ5Ll9fZmlsdGVyKTtcbiAgICByZXR1cm4gdGhpcy5xdWVyaWVzVXRpbC5idWlsZFF1ZXJ5KGZ1bGxRdWVyeSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRlbGV0ZUdyb3VwKGdyb3VwOiBJTWFuYWdlZE9iamVjdCwgcGFyYW1zOiBhbnkgPSB7fSkge1xuICAgIGNvbnN0IHsgY2FzY2FkZSB9ID0gcGFyYW1zO1xuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuc21hcnRHcm91cHNTZXJ2aWNlLmlzU21hcnRHcm91cChncm91cCkgfHwgdGhpcy5zbWFydEdyb3Vwc1NlcnZpY2UuaXNTbWFydEdyb3VwVjIoZ3JvdXApXG4gICAgICAgID8gYXdhaXQgdGhpcy5zbWFydEdyb3Vwc1NlcnZpY2UuZGVsZXRlKGdyb3VwLCB7IGNhc2NhZGUgfSlcbiAgICAgICAgOiBhd2FpdCB0aGlzLmludmVudG9yeVNlcnZpY2UuZGVsZXRlKGdyb3VwLCB7IGNhc2NhZGUgfSk7XG5cbiAgICAgIGNvbnN0IGFsZXJ0TWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGdldHRleHQoJ0Fzc2V0IGRlbGV0ZWQuJykpO1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhhbGVydE1lc3NhZ2UpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBhbGVydE1lc3NhZ2UgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChnZXR0ZXh0KCdDb3VsZCBub3QgZGVsZXRlIGFzc2V0LicpKTtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmRhbmdlcihhbGVydE1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZGVsZXRlRGV2aWNlKGRldmljZTogSU1hbmFnZWRPYmplY3QsIHBhcmFtczogYW55ID0ge30pIHtcbiAgICBjb25zdCB7IGNhc2NhZGUsIHdpdGhEZXZpY2VVc2VyIH0gPSBwYXJhbXM7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgb3duZXIgfSA9IGRldmljZTtcbiAgICAgIGNvbnN0IHNob3VsZFJlbW92ZU93bmVyID0gd2l0aERldmljZVVzZXIgJiYgb3duZXIgJiYgdGhpcy5pc0RldmljZVVzZXIob3duZXIpO1xuXG4gICAgICBzaG91bGRSZW1vdmVPd25lclxuICAgICAgICA/IGF3YWl0IHRoaXMuZGVsZXRlRGV2aWNlV2l0aFVzZXIoZGV2aWNlLCBjYXNjYWRlKVxuICAgICAgICA6IGF3YWl0IHRoaXMuaW52ZW50b3J5U2VydmljZS5kZWxldGUoZGV2aWNlLCB7IGNhc2NhZGUgfSk7XG5cbiAgICAgIGNvbnN0IGFsZXJ0TWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGdldHRleHQoJ0Fzc2V0IGRlbGV0ZWQuJykpO1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhhbGVydE1lc3NhZ2UpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBhbGVydE1lc3NhZ2UgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChnZXR0ZXh0KCdDb3VsZCBub3QgZGVsZXRlIGFzc2V0LicpKTtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmRhbmdlcihhbGVydE1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZGVhY3RpdmF0ZVNtYXJ0cnVsZXNGb3JBc3NldChhc3NldDogSU1hbmFnZWRPYmplY3QsIHBhcmVudFJlZjogSU1hbmFnZWRPYmplY3QpIHtcbiAgICBjb25zdCB7IGlkOiBhc3NldElkIH0gPSBhc3NldDtcbiAgICBjb25zdCB7IGlkOiBwYXJlbnRJZCB9ID0gcGFyZW50UmVmO1xuICAgIGNvbnN0IHJ1bGVzOiBJUnVsZVtdID0gKGF3YWl0IHRoaXMuc21hcnRSdWxlc1NlcnZpY2UubGlzdEJ5Q29udGV4dChwYXJlbnRJZCkpLmRhdGE7XG5cbiAgICBjb25zdCB1cGF0ZVNtYXJ0cnVsZXNQcm9taXNlcyA9IHJ1bGVzLm1hcChydWxlID0+XG4gICAgICB0aGlzLnNtYXJ0UnVsZXNTZXJ2aWNlLmJ1bGtEZWFjdGl2YXRlRW5hYmxlZFNvdXJjZXMocnVsZSwgW2Fzc2V0SWRdKVxuICAgICk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwodXBhdGVTbWFydHJ1bGVzUHJvbWlzZXMpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBhbGVydE1lc3NhZ2UgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgZ2V0dGV4dCgnQ291bGQgbm90IGRlYWN0aXZhdGUgc21hcnQgcnVsZXMuJylcbiAgICAgICk7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5kYW5nZXIoYWxlcnRNZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzRGV2aWNlVXNlcih1c2VySWQ6IHN0cmluZykge1xuICAgIHJldHVybiB1c2VySWQubWF0Y2goL15kZXZpY2VfLyk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRlbGV0ZURldmljZVdpdGhVc2VyKGRldmljZTogSU1hbmFnZWRPYmplY3QsIGNhc2NhZGU6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBwYXJhbXMgPSB7IGNhc2NhZGUsIHdpdGhEZXZpY2VVc2VyOiB0cnVlIH07XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmludmVudG9yeVNlcnZpY2UuZGVsZXRlKGRldmljZSwgcGFyYW1zKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaW52ZW50b3J5U2VydmljZS5kZWxldGUoZGV2aWNlLCB7IGNhc2NhZGUgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRBc3NldHNGaWx0ZXJzKGNvbHVtbnM6IERldmljZUdyaWRDb2x1bW5bXSwgcGFnaW5hdGlvbjogUGFnaW5hdGlvbiwgYmFzZVF1ZXJ5KSB7XG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLnF1ZXJpZXNVdGlsLmFkZEFuZEZpbHRlcih0aGlzLmdldFF1ZXJ5T2JqKGNvbHVtbnMpLCBiYXNlUXVlcnkpO1xuICAgIHJldHVybiB7XG4gICAgICBxdWVyeTogdGhpcy5xdWVyaWVzVXRpbC5idWlsZFF1ZXJ5KHF1ZXJ5KSxcbiAgICAgIHBhZ2VTaXplOiBwYWdpbmF0aW9uLnBhZ2VTaXplIHx8IHRoaXMuREVGQVVMVF9QQUdFX1NJWkUsXG4gICAgICBjdXJyZW50UGFnZTogcGFnaW5hdGlvbi5jdXJyZW50UGFnZSxcbiAgICAgIHdpdGhUb3RhbFBhZ2VzOiB0cnVlXG4gICAgfTtcbiAgfVxufVxuIl19
|
|
295
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ViLWFzc2V0cy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3ViLWFzc2V0cy9zdWItYXNzZXRzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUVMLGdCQUFnQixFQUdoQixrQkFBa0IsRUFDbEIsaUJBQWlCLEVBQ2pCLFdBQVcsRUFDWixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBRUwsWUFBWSxFQUNaLGVBQWUsRUFFZixPQUFPLEVBQ1AsWUFBWSxFQUVaLFdBQVcsRUFDWixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzVGLE9BQU8sRUFDTCxzQkFBc0IsRUFFdEIsaUJBQWlCLEVBQ2pCLG9CQUFvQixFQUNwQixxQkFBcUIsRUFDckIsb0JBQW9CLEVBQ3BCLGdDQUFnQyxFQUNoQyw0QkFBNEIsRUFDNUIsd0JBQXdCLEVBQ3pCLE1BQU0saUNBQWlDLENBQUM7QUFDekMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUd2RSxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsaUJBQWlCO0lBT3JELFlBQ1ksZ0JBQWtDLEVBQ2xDLGdCQUFrQyxFQUNsQyxRQUF5QixFQUN6QixJQUFpQixFQUNqQixnQkFBa0MsRUFDbEMsa0JBQXNDLEVBQ3RDLGtCQUFzQyxFQUN0QyxpQkFBb0MsRUFDcEMsWUFBMEIsRUFDMUIsa0JBQStCLEVBQy9CLEtBQW1CO1FBRTdCLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsS0FB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QU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO2FBQ2hFO1FBQ0gsQ0FBQztLQUFBO0lBRU8sZ0JBQWdCLENBQUMsT0FBMkIsRUFBRSxVQUFzQixFQUFFLFNBQVM7UUFDckYsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNsRixPQUFPO1lBQ0wsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQztZQUN6QyxRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsaUJBQWlCO1lBQ3ZELFdBQVcsRUFBRSxVQUFVLENBQUMsV0FBVztZQUNuQyxjQUFjLEVBQUUsSUFBSTtTQUNyQixDQUFDO0lBQ0osQ0FBQzs7O1lBaFVGLFVBQVU7OztZQUpGLGdCQUFnQjtZQTdCdkIsZ0JBQWdCO1lBVWhCLGVBQWU7WUFMZixXQUFXO1lBWUosZ0JBQWdCO1lBQUUsa0JBQWtCO1lBZDNDLGtCQUFrQjtZQUNsQixpQkFBaUI7WUFLakIsWUFBWTtZQU1aLFdBQVc7WUFGWCxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgSU1hbmFnZWRPYmplY3QsXG4gIEludmVudG9yeVNlcnZpY2UsXG4gIElSdWxlLFxuICBRdWVyaWVzVXRpbCxcbiAgU21hcnRHcm91cHNTZXJ2aWNlLFxuICBTbWFydFJ1bGVzU2VydmljZSxcbiAgVXNlclNlcnZpY2Vcbn0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHtcbiAgQWN0aW9uQ29udHJvbCxcbiAgQWxlcnRTZXJ2aWNlLFxuICBBcHBTdGF0ZVNlcnZpY2UsXG4gIEJ1bGtBY3Rpb25Db250cm9sLFxuICBnZXR0ZXh0LFxuICBNb2RhbFNlcnZpY2UsXG4gIFBhZ2luYXRpb24sXG4gIFBlcm1pc3Npb25zXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgQXNzZXROb2RlU2VydmljZSwgRGV2aWNlR3JvdXBTZXJ2aWNlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9hc3NldHMtbmF2aWdhdG9yJztcbmltcG9ydCB7XG4gIEFsYXJtc0RldmljZUdyaWRDb2x1bW4sXG4gIERldmljZUdyaWRDb2x1bW4sXG4gIERldmljZUdyaWRTZXJ2aWNlLFxuICBJbWVpRGV2aWNlR3JpZENvbHVtbixcbiAgTW9kZWxEZXZpY2VHcmlkQ29sdW1uLFxuICBOYW1lRGV2aWNlR3JpZENvbHVtbixcbiAgUmVnaXN0cmF0aW9uRGF0ZURldmljZUdyaWRDb2x1bW4sXG4gIFNlcmlhbE51bWJlckRldmljZUdyaWRDb2x1bW4sXG4gIFN5c3RlbUlkRGV2aWNlR3JpZENvbHVtblxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2RldmljZS1ncmlkJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQXNzZXRUeXBlR3JpZENvbHVtbiB9IGZyb20gJy4vY29sdW1ucy9hc3NldC10eXBlLWdyaWQtY29sdW1uJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFN1YkFzc2V0c1NlcnZpY2UgZXh0ZW5kcyBEZXZpY2VHcmlkU2VydmljZSB7XG4gIHF1ZXJpZXNVdGlsOiBRdWVyaWVzVXRpbDtcbiAgdWlPbmx5Q291bnRlcnNVcGRhdGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xuICBwcm90ZWN0ZWQgR1JJRF9DT05GSUdfREVGQVVMVF9TVE9SQUdFX0tFWSA9ICdzdWItYXNzZXRzLWdyaWQtY29uZmlnJztcbiAgcHJpdmF0ZSBJU19ERVZJQ0VfR1JPVVBfRlJBR01FTlQgPSAnYzh5X0lzRGV2aWNlR3JvdXAnO1xuICBwcml2YXRlIElTX0RZTkFNSUNfR1JPVVBfRlJBR01FTlQgPSAnYzh5X0lzRHluYW1pY0dyb3VwJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgaW52ZW50b3J5U2VydmljZTogSW52ZW50b3J5U2VydmljZSxcbiAgICBwcm90ZWN0ZWQgYXBwU3RhdGU6IEFwcFN0YXRlU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgdXNlcjogVXNlclNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGFzc2V0Tm9kZVNlcnZpY2U6IEFzc2V0Tm9kZVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGRldmljZUdyb3VwU2VydmljZTogRGV2aWNlR3JvdXBTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBzbWFydEdyb3Vwc1NlcnZpY2U6IFNtYXJ0R3JvdXBzU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgc21hcnRSdWxlc1NlcnZpY2U6IFNtYXJ0UnVsZXNTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcbiAgICBwcm90ZWN0ZWQgcGVybWlzc2lvbnNTZXJ2aWNlOiBQZXJtaXNzaW9ucyxcbiAgICBwcm90ZWN0ZWQgbW9kYWw6IE1vZGFsU2VydmljZVxuICApIHtcbiAgICBzdXBlcihpbnZlbnRvcnlTZXJ2aWNlLCB0cmFuc2xhdGVTZXJ2aWNlLCBhbGVydFNlcnZpY2UsIG1vZGFsKTtcbiAgfVxuXG4gIGdldERlZmF1bHRDb2x1bW5zKGZpbHRlcmFibGU6IGJvb2xlYW4gPSB0cnVlLCBzb3J0YWJsZTogYm9vbGVhbiA9IHRydWUpOiBEZXZpY2VHcmlkQ29sdW1uW10ge1xuICAgIGNvbnN0IGRlZmF1bHRDb2x1bW5zID0gW1xuICAgICAgbmV3IEFzc2V0VHlwZUdyaWRDb2x1bW4oeyBzb3J0T3JkZXI6ICdkZXNjJyB9KSxcbiAgICAgIG5ldyBOYW1lRGV2aWNlR3JpZENvbHVtbih7IHNvcnRPcmRlcjogJ2FzYycgfSksXG4gICAgICBuZXcgTW9kZWxEZXZpY2VHcmlkQ29sdW1uKCksXG4gICAgICBuZXcgU2VyaWFsTnVtYmVyRGV2aWNlR3JpZENvbHVtbih7IHZpc2libGU6IGZhbHNlIH0pLFxuICAgICAgbmV3IFJlZ2lzdHJhdGlvbkRhdGVEZXZpY2VHcmlkQ29sdW1uKHsgdmlzaWJsZTogZmFsc2UgfSksXG4gICAgICBuZXcgU3lzdGVtSWREZXZpY2VHcmlkQ29sdW1uKHsgdmlzaWJsZTogZmFsc2UgfSksXG4gICAgICBuZXcgSW1laURldmljZUdyaWRDb2x1bW4oeyB2aXNpYmxlOiBmYWxzZSB9KSxcbiAgICAgIG5ldyBBbGFybXNEZXZpY2VHcmlkQ29sdW1uKClcbiAgICBdO1xuICAgIHJldHVybiBkZWZhdWx0Q29sdW1ucztcbiAgfVxuXG4gIGdldERlZmF1bHRQYWdpbmF0aW9uKCk6IFBhZ2luYXRpb24ge1xuICAgIGNvbnN0IHsgcGFnaW5hdGlvbiB9ID0gdGhpcy5nZXRDb25maWcoKTtcbiAgICByZXR1cm4ge1xuICAgICAgcGFnZVNpemU6IHBhZ2luYXRpb24ucGFnZVNpemUsXG4gICAgICBjdXJyZW50UGFnZTogMVxuICAgIH07XG4gIH1cblxuICBnZXREZWZhdWx0QWN0aW9uQ29udHJvbHMoKTogQWN0aW9uQ29udHJvbFtdIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBhc3luYyB1bmFzc2lnbkFzc2V0KGFzc2V0OiBJTWFuYWdlZE9iamVjdCwgcGFyZW50UmVmOiBJTWFuYWdlZE9iamVjdCkge1xuICAgIGNvbnN0IHsgaWQ6IGFzc2V0SWQgfSA9IGFzc2V0O1xuICAgIGNvbnN0IHsgaWQ6IHBhcmVudElkIH0gPSBwYXJlbnRSZWY7XG5cbiAgICBpZiAodGhpcy5pc0RldmljZShhc3NldCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuaW52ZW50b3J5U2VydmljZS5jaGlsZEFzc2V0c1JlbW92ZShhc3NldElkLCBwYXJlbnRJZCk7XG4gICAgICAgIGNvbnN0IGFsZXJ0TWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGdldHRleHQoJ0Fzc2V0IHVuYXNzaWduZWQuJykpO1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5zdWNjZXNzKGFsZXJ0TWVzc2FnZSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBhbGVydE1lc3NhZ2UgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChnZXR0ZXh0KCdDb3VsZCBub3QgdW5hc3NpZ24gYXNzZXQuJykpO1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5kYW5nZXIoYWxlcnRNZXNzYWdlKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuZGVhY3RpdmF0ZVNtYXJ0cnVsZXNGb3JBc3NldChhc3NldCwgcGFyZW50UmVmKTtcbiAgICB9XG4gIH1cblxuICBpc0RldmljZShhc3NldDogSU1hbmFnZWRPYmplY3QpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgIWFzc2V0Lmhhc093blByb3BlcnR5KHRoaXMuSVNfREVWSUNFX0dST1VQX0ZSQUdNRU5UKSAmJlxuICAgICAgIWFzc2V0Lmhhc093blByb3BlcnR5KHRoaXMuSVNfRFlOQU1JQ19HUk9VUF9GUkFHTUVOVClcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlQXNzZXQoYXNzZXQ6IElNYW5hZ2VkT2JqZWN0LCBwYXJlbnRSZWY6IElNYW5hZ2VkT2JqZWN0LCBwYXJhbXMgPSB7fSkge1xuICAgIGNvbnN0IGlzR3JvdXAgPVxuICAgICAgYXNzZXQuaGFzT3duUHJvcGVydHkodGhpcy5JU19ERVZJQ0VfR1JPVVBfRlJBR01FTlQpIHx8XG4gICAgICB0aGlzLnNtYXJ0R3JvdXBzU2VydmljZS5pc1NtYXJ0R3JvdXAoYXNzZXQpO1xuXG4gICAgaWYgKGlzR3JvdXApIHtcbiAgICAgIGF3YWl0IHRoaXMuZGVsZXRlR3JvdXAoYXNzZXQsIHBhcmFtcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMuZGVsZXRlRGV2aWNlKGFzc2V0LCBwYXJhbXMpO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHBhcmVudFJlZiAmJlxuICAgICAgIXRoaXMuc21hcnRHcm91cHNTZXJ2aWNlLmlzU21hcnRHcm91cChhc3NldCkgJiZcbiAgICAgICF0aGlzLnNtYXJ0R3JvdXBzU2VydmljZS5pc1NtYXJ0R3JvdXBWMihhc3NldClcbiAgICApIHtcbiAgICAgIGF3YWl0IHRoaXMuZGVhY3RpdmF0ZVNtYXJ0cnVsZXNGb3JBc3NldChhc3NldCwgcGFyZW50UmVmKTtcbiAgICB9XG4gIH1cblxuICBzaG91bGRTaG93V2l0aERldmljZVVzZXJDaGVja2JveChhc3NldDogSU1hbmFnZWRPYmplY3QpOiBib29sZWFuIHtcbiAgICBjb25zdCB7IG93bmVyLCBjOHlfSXNEZXZpY2U6IGlzUm9vdERldmljZSB9ID0gYXNzZXQ7XG4gICAgY29uc3QgaGFzRGV2aWNlVXNlckFzT3duZXIgPSBhc3NldC5vd25lciAmJiB0aGlzLmlzRGV2aWNlVXNlcihvd25lcik7XG5cbiAgICByZXR1cm4gQm9vbGVhbihpc1Jvb3REZXZpY2UgJiYgaGFzRGV2aWNlVXNlckFzT3duZXIpO1xuICB9XG5cbiAgZ2V0RGVmYXVsdEJ1bGtBY3Rpb25Db250cm9scygpOiBCdWxrQWN0aW9uQ29udHJvbFtdIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBhc3luYyBnZXREYXRhKFxuICAgIGNvbHVtbnM6IERldmljZUdyaWRDb2x1bW5bXSxcbiAgICBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uLFxuICAgIHBhcmVudFJlZmVyZW5jZTogSU1hbmFnZWRPYmplY3QsXG4gICAgYmFzZVF1ZXJ5OiBhbnkgPSB7fVxuICApIHtcbiAgICBjb25zdCBpc1Jvb3QgPSAhcGFyZW50UmVmZXJlbmNlO1xuICAgIGlmIChpc1Jvb3QpIHtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5idWlsZENvbWJpbmVkUm9vdFF1ZXJ5RmlsdGVyKGNvbHVtbnMsIHBhZ2luYXRpb24pO1xuICAgICAgcmV0dXJuIHRoaXMuYXNzZXROb2RlU2VydmljZS5nZXRSb290Tm9kZXMoeyAuLi5wYWdpbmF0aW9uLCBxdWVyeSB9KTtcbiAgICB9XG4gICAgY29uc3QgZmlsdGVycyA9IHtcbiAgICAgIC4uLnRoaXMuZ2V0QXNzZXRzRmlsdGVycyhjb2x1bW5zLCBwYWdpbmF0aW9uLCBiYXNlUXVlcnkpLFxuICAgICAgd2l0aFBhcmVudHM6IGZhbHNlXG4gICAgfTtcbiAgICBpZiAodGhpcy5kZXZpY2VHcm91cFNlcnZpY2UuaXNHcm91cChwYXJlbnRSZWZlcmVuY2UpKSB7XG4gICAgICByZXR1cm4gdGhpcy5hc3NldE5vZGVTZXJ2aWNlLmdldEdyb3VwSXRlbXMocGFyZW50UmVmZXJlbmNlLmlkLCBmaWx0ZXJzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGV2aWNlR3JvdXBTZXJ2aWNlLmlzRHluYW1pY0dyb3VwKHBhcmVudFJlZmVyZW5jZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmFzc2V0Tm9kZVNlcnZpY2UuZ2V0RHluYW1pY0dyb3VwSXRlbXMoXG4gICAgICAgIHBhcmVudFJlZmVyZW5jZS5jOHlfRGV2aWNlUXVlcnlTdHJpbmcsXG4gICAgICAgIGZpbHRlcnNcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRldmljZUdyb3VwU2VydmljZS5pc0RldmljZShwYXJlbnRSZWZlcmVuY2UpKSB7XG4gICAgICByZXR1cm4gdGhpcy5hc3NldE5vZGVTZXJ2aWNlLmdldERldmljZUNoaWxkcmVuKHBhcmVudFJlZmVyZW5jZS5pZCwgZmlsdGVycyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0Q291bnQoXG4gICAgY29sdW1uczogRGV2aWNlR3JpZENvbHVtbltdLFxuICAgIHBhZ2luYXRpb246IFBhZ2luYXRpb24sXG4gICAgcGFyZW50UmVmZXJlbmNlOiBJTWFuYWdlZE9iamVjdCxcbiAgICBiYXNlUXVlcnk6IGFueSA9IHt9XG4gICk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgZGVmYXVsdEZpbHRlcnMgPSB7XG4gICAgICBwYWdlU2l6ZTogMSxcbiAgICAgIHdpdGhDaGlsZHJlbjogZmFsc2VcbiAgICB9O1xuICAgIGNvbnN0IGZpbHRlcnMgPSAhcGFyZW50UmVmZXJlbmNlXG4gICAgICA/IHtcbiAgICAgICAgICBxdWVyeTogdGhpcy5idWlsZENvbWJpbmVkUm9vdFF1ZXJ5RmlsdGVyKGNvbHVtbnMsIHBhZ2luYXRpb24pLFxuICAgICAgICAgIC4uLmRlZmF1bHRGaWx0ZXJzXG4gICAgICAgIH1cbiAgICAgIDoge1xuICAgICAgICAgIC4uLnRoaXMuZ2V0QXNzZXRzRmlsdGVycyhjb2x1bW5zLCBwYWdpbmF0aW9uLCBiYXNlUXVlcnkpLFxuICAgICAgICAgIC4uLmRlZmF1bHRGaWx0ZXJzXG4gICAgICAgIH07XG4gICAgcmV0dXJuIHRoaXMuZ2V0QXNzZXRzU3RhdGlzdGljcyhwYXJlbnRSZWZlcmVuY2UsIGZpbHRlcnMpO1xuICB9XG5cbiAgZ2V0VG90YWwocGFyZW50UmVmZXJlbmNlOiBJTWFuYWdlZE9iamVjdCwgYmFzZVF1ZXJ5OiBhbnkgPSB7fSk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgcXVlcnlGaWx0ZXIgPSB0aGlzLmFzc2V0Tm9kZVNlcnZpY2Uucm9vdFF1ZXJ5RmlsdGVyKCk7XG4gICAgY29uc3QgcXVlcnkgPSAhcGFyZW50UmVmZXJlbmNlXG4gICAgICA/IHRoaXMucXVlcmllc1V0aWwuYWRkQW5kRmlsdGVyKHF1ZXJ5RmlsdGVyLCBiYXNlUXVlcnkpXG4gICAgICA6IGJhc2VRdWVyeTtcbiAgICBjb25zdCBmaWx0ZXJzID0ge1xuICAgICAgcXVlcnk6IHRoaXMucXVlcmllc1V0aWwuYnVpbGRRdWVyeShxdWVyeSksXG4gICAgICB3aXRoQ2hpbGRyZW46IGZhbHNlLFxuICAgICAgd2l0aFRvdGFsUGFnZXM6IHRydWUsXG4gICAgICBwYWdlU2l6ZTogMVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuZ2V0QXNzZXRzU3RhdGlzdGljcyhwYXJlbnRSZWZlcmVuY2UsIGZpbHRlcnMpO1xuICB9XG5cbiAgYXN5bmMgY2FuRWRpdEdyb3VwKGdyb3VwOiBJTWFuYWdlZE9iamVjdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnBlcm1pc3Npb25zU2VydmljZS5jYW5FZGl0KFsnUk9MRV9JTlZFTlRPUllfQURNSU4nXSwgZ3JvdXApO1xuICB9XG5cbiAgY2FuQ3JlYXRlR3JvdXAoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY3VycmVudFVzZXIgPSB0aGlzLmFwcFN0YXRlLmN1cnJlbnRVc2VyLnZhbHVlO1xuICAgIGNvbnN0IGhhc0FkbWluUm9sZSA9IHRoaXMudXNlci5oYXNBbnlSb2xlKGN1cnJlbnRVc2VyLCBbXG4gICAgICAnUk9MRV9JTlZFTlRPUllfQURNSU4nLFxuICAgICAgJ1JPTEVfSU5WRU5UT1JZX0NSRUFURSdcbiAgICBdKTtcbiAgICByZXR1cm4gaGFzQWRtaW5Sb2xlO1xuICB9XG5cbiAgYXN5bmMgY2FuQXNzaWduRGV2aWNlKGdyb3VwOiBJTWFuYWdlZE9iamVjdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnBlcm1pc3Npb25zU2VydmljZS5jYW5FZGl0KFsnUk9MRV9JTlZFTlRPUllfQURNSU4nXSwgZ3JvdXApO1xuICB9XG5cbiAgY2FuRWRpdFNtYXJ0R3JvdXAoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgU01BUlRfR1JPVVBTX1JPTEVTX0VESVQgPSBbJ1JPTEVfU01BUlRHUk9VUF9VUERBVEUnLCAnUk9MRV9TTUFSVEdST1VQX0FETUlOJ107XG4gICAgcmV0dXJuIHRoaXMucGVybWlzc2lvbnNTZXJ2aWNlLmhhc0FueVJvbGUoU01BUlRfR1JPVVBTX1JPTEVTX0VESVQpO1xuICB9XG5cbiAgY2FuRGVsZXRlU21hcnRHcm91cCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBTTUFSVF9HUk9VUFNfUk9MRVNfREVMRVRFID0gWydST0xFX1NNQVJUR1JPVVBfQURNSU4nLCAnUk9MRV9JTlZFTlRPUllfQURNSU4nXTtcbiAgICByZXR1cm4gdGhpcy5wZXJtaXNzaW9uc1NlcnZpY2UuaGFzQW55Um9sZShTTUFSVF9HUk9VUFNfUk9MRVNfREVMRVRFKTtcbiAgfVxuXG4gIGlzU21hcnRHcm91cChncm91cDogSU1hbmFnZWRPYmplY3QpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5zbWFydEdyb3Vwc1NlcnZpY2UuaXNTbWFydEdyb3VwKGdyb3VwKSB8fCB0aGlzLnNtYXJ0R3JvdXBzU2VydmljZS5pc1NtYXJ0R3JvdXBWMihncm91cClcbiAgICApO1xuICB9XG5cbiAgaXNVc2luZ0ludmVudG9yeVJvbGVzKCkge1xuICAgIGNvbnN0IGN1cnJlbnRVc2VyID0gdGhpcy5hcHBTdGF0ZS5jdXJyZW50VXNlci52YWx1ZTtcbiAgICBjb25zdCBoYXNBbnlJbnZlbnRvcnlSb2xlID0gdGhpcy51c2VyLmhhc0FueVJvbGUoY3VycmVudFVzZXIsIFtcbiAgICAgICdST0xFX0lOVkVOVE9SWV9BRE1JTicsXG4gICAgICAnUk9MRV9JTlZFTlRPUllfUkVBRCcsXG4gICAgICAnUk9MRV9JTlZFTlRPUllfQ1JFQVRFJ1xuICAgIF0pO1xuICAgIHJldHVybiAhaGFzQW55SW52ZW50b3J5Um9sZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBnZXRBc3NldHNTdGF0aXN0aWNzKFxuICAgIHBhcmVudFJlZmVyZW5jZTogSU1hbmFnZWRPYmplY3QsXG4gICAgZmlsdGVyczogb2JqZWN0XG4gICk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgaXNSb290ID0gIXBhcmVudFJlZmVyZW5jZTtcbiAgICBpZiAoaXNSb290KSB7XG4gICAgICByZXR1cm4gKGF3YWl0IHRoaXMuYXNzZXROb2RlU2VydmljZS5nZXRSb290Tm9kZXMoZmlsdGVycykpLnBhZ2luZy50b3RhbFBhZ2VzO1xuICAgIH1cbiAgICBpZiAodGhpcy5kZXZpY2VHcm91cFNlcnZpY2UuaXNHcm91cChwYXJlbnRSZWZlcmVuY2UpKSB7XG4gICAgICByZXR1cm4gKGF3YWl0IHRoaXMuYXNzZXROb2RlU2VydmljZS5nZXRHcm91cEl0ZW1zKHBhcmVudFJlZmVyZW5jZS5pZCwgZmlsdGVycykpLnBhZ2luZ1xuICAgICAgICAudG90YWxQYWdlcztcbiAgICB9XG4gICAgaWYgKHRoaXMuZGV2aWNlR3JvdXBTZXJ2aWNlLmlzRHluYW1pY0dyb3VwKHBhcmVudFJlZmVyZW5jZSkpIHtcbiAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5hc3NldE5vZGVTZXJ2aWNlLmdldER5bmFtaWNHcm91cEl0ZW1zKFxuICAgICAgICBwYXJlbnRSZWZlcmVuY2UuYzh5X0RldmljZVF1ZXJ5U3RyaW5nLFxuICAgICAgICBmaWx0ZXJzXG4gICAgICApKS5wYWdpbmcudG90YWxQYWdlcztcbiAgICB9XG4gICAgaWYgKHRoaXMuZGV2aWNlR3JvdXBTZXJ2aWNlLmlzRGV2aWNlKHBhcmVudFJlZmVyZW5jZSkpIHtcbiAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5hc3NldE5vZGVTZXJ2aWNlLmdldERldmljZUNoaWxkcmVuKHBhcmVudFJlZmVyZW5jZS5pZCwgZmlsdGVycykpLnBhZ2luZ1xuICAgICAgICAudG90YWxQYWdlcztcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYnVpbGRDb21iaW5lZFJvb3RRdWVyeUZpbHRlcihjb2x1bW5zLCBwYWdpbmF0aW9uKSB7XG4gICAgY29uc3QgcXVlcnlGaWx0ZXIgPSB0aGlzLmFzc2V0Tm9kZVNlcnZpY2Uucm9vdFF1ZXJ5RmlsdGVyKCk7XG4gICAgY29uc3QgdXNlclF1ZXJ5ID0gdGhpcy5nZXRRdWVyeU9iaihjb2x1bW5zLCBwYWdpbmF0aW9uKTtcblxuICAgIGNvbnN0IHF1ZXJ5UGFydCA9IHRoaXMucXVlcmllc1V0aWwuYWRkT3JkZXJieXMocXVlcnlGaWx0ZXIsIHVzZXJRdWVyeS5fX29yZGVyYnksICdhcHBlbmQnKTtcbiAgICBjb25zdCBmdWxsUXVlcnkgPSB0aGlzLnF1ZXJpZXNVdGlsLmFkZEFuZEZpbHRlcihxdWVyeVBhcnQsIHVzZXJRdWVyeS5fX2ZpbHRlcik7XG4gICAgcmV0dXJuIHRoaXMucXVlcmllc1V0aWwuYnVpbGRRdWVyeShmdWxsUXVlcnkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkZWxldGVHcm91cChncm91cDogSU1hbmFnZWRPYmplY3QsIHBhcmFtczogYW55ID0ge30pIHtcbiAgICBjb25zdCB7IGNhc2NhZGUgfSA9IHBhcmFtcztcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLnNtYXJ0R3JvdXBzU2VydmljZS5pc1NtYXJ0R3JvdXAoZ3JvdXApIHx8IHRoaXMuc21hcnRHcm91cHNTZXJ2aWNlLmlzU21hcnRHcm91cFYyKGdyb3VwKVxuICAgICAgICA/IGF3YWl0IHRoaXMuc21hcnRHcm91cHNTZXJ2aWNlLmRlbGV0ZShncm91cCwgeyBjYXNjYWRlIH0pXG4gICAgICAgIDogYXdhaXQgdGhpcy5pbnZlbnRvcnlTZXJ2aWNlLmRlbGV0ZShncm91cCwgeyBjYXNjYWRlIH0pO1xuXG4gICAgICBjb25zdCBhbGVydE1lc3NhZ2UgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChnZXR0ZXh0KCdBc3NldCBkZWxldGVkLicpKTtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoYWxlcnRNZXNzYWdlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgYWxlcnRNZXNzYWdlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoZ2V0dGV4dCgnQ291bGQgbm90IGRlbGV0ZSBhc3NldC4nKSk7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5kYW5nZXIoYWxlcnRNZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRlbGV0ZURldmljZShkZXZpY2U6IElNYW5hZ2VkT2JqZWN0LCBwYXJhbXM6IGFueSA9IHt9KSB7XG4gICAgY29uc3QgeyBjYXNjYWRlLCB3aXRoRGV2aWNlVXNlciB9ID0gcGFyYW1zO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IG93bmVyIH0gPSBkZXZpY2U7XG4gICAgICBjb25zdCBzaG91bGRSZW1vdmVPd25lciA9IHdpdGhEZXZpY2VVc2VyICYmIG93bmVyICYmIHRoaXMuaXNEZXZpY2VVc2VyKG93bmVyKTtcblxuICAgICAgc2hvdWxkUmVtb3ZlT3duZXJcbiAgICAgICAgPyBhd2FpdCB0aGlzLmRlbGV0ZURldmljZVdpdGhVc2VyKGRldmljZSwgY2FzY2FkZSlcbiAgICAgICAgOiBhd2FpdCB0aGlzLmludmVudG9yeVNlcnZpY2UuZGVsZXRlKGRldmljZSwgeyBjYXNjYWRlIH0pO1xuXG4gICAgICBjb25zdCBhbGVydE1lc3NhZ2UgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChnZXR0ZXh0KCdBc3NldCBkZWxldGVkLicpKTtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoYWxlcnRNZXNzYWdlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgYWxlcnRNZXNzYWdlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoZ2V0dGV4dCgnQ291bGQgbm90IGRlbGV0ZSBhc3NldC4nKSk7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5kYW5nZXIoYWxlcnRNZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRlYWN0aXZhdGVTbWFydHJ1bGVzRm9yQXNzZXQoYXNzZXQ6IElNYW5hZ2VkT2JqZWN0LCBwYXJlbnRSZWY6IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgY29uc3QgeyBpZDogYXNzZXRJZCB9ID0gYXNzZXQ7XG4gICAgY29uc3QgeyBpZDogcGFyZW50SWQgfSA9IHBhcmVudFJlZjtcbiAgICBjb25zdCBydWxlczogSVJ1bGVbXSA9IChhd2FpdCB0aGlzLnNtYXJ0UnVsZXNTZXJ2aWNlLmxpc3RCeUNvbnRleHQocGFyZW50SWQpKS5kYXRhO1xuXG4gICAgY29uc3QgdXBhdGVTbWFydHJ1bGVzUHJvbWlzZXMgPSBydWxlcy5tYXAocnVsZSA9PlxuICAgICAgdGhpcy5zbWFydFJ1bGVzU2VydmljZS5idWxrRGVhY3RpdmF0ZUVuYWJsZWRTb3VyY2VzKHJ1bGUsIFthc3NldElkXSlcbiAgICApO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKHVwYXRlU21hcnRydWxlc1Byb21pc2VzKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgYWxlcnRNZXNzYWdlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgIGdldHRleHQoJ0NvdWxkIG5vdCBkZWFjdGl2YXRlIHNtYXJ0IHJ1bGVzLicpXG4gICAgICApO1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZGFuZ2VyKGFsZXJ0TWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpc0RldmljZVVzZXIodXNlcklkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdXNlcklkLm1hdGNoKC9eZGV2aWNlXy8pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkZWxldGVEZXZpY2VXaXRoVXNlcihkZXZpY2U6IElNYW5hZ2VkT2JqZWN0LCBjYXNjYWRlOiBib29sZWFuKSB7XG4gICAgY29uc3QgcGFyYW1zID0geyBjYXNjYWRlLCB3aXRoRGV2aWNlVXNlcjogdHJ1ZSB9O1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5pbnZlbnRvcnlTZXJ2aWNlLmRlbGV0ZShkZXZpY2UsIHBhcmFtcyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmludmVudG9yeVNlcnZpY2UuZGVsZXRlKGRldmljZSwgeyBjYXNjYWRlIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0QXNzZXRzRmlsdGVycyhjb2x1bW5zOiBEZXZpY2VHcmlkQ29sdW1uW10sIHBhZ2luYXRpb246IFBhZ2luYXRpb24sIGJhc2VRdWVyeSkge1xuICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5xdWVyaWVzVXRpbC5hZGRBbmRGaWx0ZXIodGhpcy5nZXRRdWVyeU9iaihjb2x1bW5zKSwgYmFzZVF1ZXJ5KTtcbiAgICByZXR1cm4ge1xuICAgICAgcXVlcnk6IHRoaXMucXVlcmllc1V0aWwuYnVpbGRRdWVyeShxdWVyeSksXG4gICAgICBwYWdlU2l6ZTogcGFnaW5hdGlvbi5wYWdlU2l6ZSB8fCB0aGlzLkRFRkFVTFRfUEFHRV9TSVpFLFxuICAgICAgY3VycmVudFBhZ2U6IHBhZ2luYXRpb24uY3VycmVudFBhZ2UsXG4gICAgICB3aXRoVG90YWxQYWdlczogdHJ1ZVxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|
|
@@ -464,7 +464,7 @@ class AssetNodeService {
|
|
|
464
464
|
const defaultFilter = {
|
|
465
465
|
pageSize: this.PAGE_SIZE,
|
|
466
466
|
withChildren: false,
|
|
467
|
-
query: this.queriesUtil.buildQuery(this.
|
|
467
|
+
query: this.queriesUtil.buildQuery(this.navRootQueryFilter())
|
|
468
468
|
};
|
|
469
469
|
const groupFilter = customFilter ? customFilter : defaultFilter;
|
|
470
470
|
// due to BE performance limitations we do not allow filtering and sorting for a user without inventory roles
|
|
@@ -502,13 +502,18 @@ class AssetNodeService {
|
|
|
502
502
|
groupQueryFilter(moId) {
|
|
503
503
|
return `$filter=(bygroupid(${moId}))$orderby=name`;
|
|
504
504
|
}
|
|
505
|
+
navRootQueryFilter() {
|
|
506
|
+
const navRootFilter = this.rootQueryFilter();
|
|
507
|
+
navRootFilter.__orderby = [{ name: 1 }];
|
|
508
|
+
return navRootFilter;
|
|
509
|
+
}
|
|
505
510
|
rootQueryFilter() {
|
|
506
511
|
const { moduleConfig } = this;
|
|
507
512
|
const rootFilter = {
|
|
508
513
|
__filter: {
|
|
509
514
|
type: `${GroupFragment.groupType}`
|
|
510
515
|
},
|
|
511
|
-
__orderby: [
|
|
516
|
+
__orderby: []
|
|
512
517
|
};
|
|
513
518
|
if (moduleConfig.smartGroups) {
|
|
514
519
|
const queryFilter = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"c8y-ngx-components-assets-navigator.js","sources":["../../assets-navigator/load-more-node.ts","../../assets-navigator/group-fragment.model.ts","../../assets-navigator/action.enum.ts","../../assets-navigator/asset-node.ts","../../assets-navigator/dynamic-group-node.ts","../../assets-navigator/asset-node-config.model.ts","../../assets-navigator/group.service.ts","../../assets-navigator/asset-node.service.ts","../../assets-navigator/asset-node.factory.ts","../../assets-navigator/assets-navigator.module.ts","../../assets-navigator/asset-selector/group-node.ts","../../assets-navigator/asset-selector/group-node.service.ts","../../assets-navigator/asset-selector/asset-selector.component.ts","../../assets-navigator/asset-selector/asset-selector-node.component.ts","../../assets-navigator/asset-selector/asset-selector.module.ts","../../assets-navigator/c8y-ngx-components-assets-navigator.ts"],"sourcesContent":["import { NavigatorNode, gettext } from '@c8y/ngx-components';\n\nexport class LoadMoreNode extends NavigatorNode {\n label = gettext('Load more');\n icon = 'plus';\n droppable = true;\n\n constructor() {\n super();\n this.priority = -Infinity;\n }\n}\n","export enum GroupFragment {\n groupType = 'c8y_DeviceGroup',\n subGroupType = 'c8y_DeviceSubgroup',\n groupFragmentType = 'c8y_IsDeviceGroup',\n dataBrokerSourceFragment = 'c8y_BrokerSource',\n dynamicGroupType = 'c8y_DynamicGroup',\n dynamicGroupFragment = 'c8y_IsDynamicGroup',\n dynamicGroupColumnConfig = 'c8y_UIDeviceFilterConfig',\n dynamicGroupQueryString = 'c8y_DeviceQueryString',\n}\n","export enum Action {\n FETCH,\n NEXT,\n REFRESH,\n LOADING_DONE\n}\n","import { Paging } from '@c8y/client';\nimport { ClickOptions, gettext, NavigatorNode, DeviceStatusComponent } from '@c8y/ngx-components';\nimport { get } from 'lodash-es';\nimport { Subject, Subscription } from 'rxjs';\nimport { AssetNodeMo, AssetNodeService } from './asset-node.service';\nimport { LoadMoreNode } from './load-more-node';\nimport { GroupFragment } from './group-fragment.model';\nimport { Action } from './action.enum';\n\nexport class AssetNode extends NavigatorNode {\n root: boolean;\n mo: any;\n\n get hasChildren() {\n return this.root || this.service.groups.isGroup(this.mo);\n }\n\n get isDevice() {\n return !!this.mo.c8y_IsDevice;\n }\n\n get isDeviceOrProbablyChildDevice() {\n return this.isDevice || this.isNeitherDeviceOrGroup;\n }\n\n get isNeitherDeviceOrGroup() {\n const { isGroup, isDynamicGroup } = this.service.groups;\n return !isGroup(this.mo) && !isDynamicGroup(this.mo) && !this.isDevice && !this.root;\n }\n\n events: Subject<Action>;\n protected paging: Paging<AssetNodeMo>;\n protected loadMoreNode: LoadMoreNode;\n private onUpdateSubscription: Subscription;\n\n constructor(protected service: AssetNodeService, config = {}) {\n super(config);\n this.root = this.root || false;\n this.mo = this.mo || {};\n this.path = this.root\n ? 'group'\n : this.isDeviceOrProbablyChildDevice\n ? `device/${this.mo.id}`\n : `group/${this.mo.id}`;\n this.draggable = !this.service.moduleConfig.disableDragAndDrop && !this.root;\n this.droppable =\n !this.service.moduleConfig.disableDragAndDrop && !this.isDeviceOrProbablyChildDevice;\n this.routerLinkExact = this.root;\n this.updateIcon(false);\n this.onUpdateSubscription = this.service\n .onUpdate(this)\n .subscribe(({ data, method }) => this.refresh(data, method));\n this.setLabel();\n this.iconComponent = this.isDeviceOrProbablyChildDevice ? DeviceStatusComponent : undefined;\n }\n\n openOnStart(url) {\n const urlRegex = /^\\/group\\//;\n if (this.root) {\n if (this.service.moduleConfig.openOnStart || urlRegex.test(url)) {\n return true;\n }\n }\n const matches = url.match(/\\/(group)\\/(\\d+)/);\n let isMatch = false;\n if (matches) {\n const id = matches[2];\n isMatch = []\n .concat(get(this.mo, 'childAssets.references', []))\n .some(({ managedObject }) => managedObject.id === id);\n return isMatch;\n }\n return false;\n }\n\n refresh(mo: any = {}, method = 'GET') {\n if (mo.id === this.mo.id) {\n this.mo = mo;\n this.setLabel();\n } else if (method === 'DELETE') {\n this.parents.forEach((node: AssetNode) => node.refresh());\n return;\n }\n if (this.events) {\n this.events.next(Action.REFRESH);\n }\n }\n\n setLabel() {\n this.label = (this.root && gettext('Groups')) || this.mo.name || '--';\n }\n\n click(options: ClickOptions = {}) {\n if (this.isDeviceOrProbablyChildDevice) {\n this.service.preferBreadcrumb(this.parents);\n return;\n }\n this.hookEvents();\n\n this.updateIcon(options.open);\n if (options.open) {\n this.events.next(Action.FETCH);\n }\n }\n\n sort() {\n this.children.sort((a, b) => {\n if (a.priority > b.priority) {\n return -1;\n } else if (a.priority < b.priority) {\n return 1;\n } else {\n return 0;\n }\n });\n }\n\n addManagedObject(mo) {\n const { childAdditions } = this.mo;\n if (!this.isChildAddition(childAdditions, mo)) {\n this.add(this.service.createChildNode(mo));\n }\n }\n\n isChildAddition(childAdditions, mo) {\n return (\n childAdditions && childAdditions.references.some(({ managedObject: { id } }) => id === mo.id)\n );\n }\n\n destroy() {\n this.onUpdateSubscription.unsubscribe();\n }\n\n get canDrop() {\n const nodeToMove = this.service.draggedData;\n if (nodeToMove) {\n const shouldGetChildOfItsOwn = !!nodeToMove.find(child => child === this);\n const isAlreadyChild = (this.children as AssetNode[]).some(\n child => child.mo && child.mo.id === nodeToMove.mo.id\n );\n const preventMove = this === nodeToMove || shouldGetChildOfItsOwn || isAlreadyChild;\n return this.droppable && !preventMove;\n }\n return this.droppable;\n }\n\n dragStart($event) {\n super.dragStart($event);\n this.service.draggedData = this;\n this.service.rootNode.droppable = !this.isDeviceOrProbablyChildDevice;\n }\n\n dragEnd($event) {\n super.dragEnd($event);\n }\n\n async drop($event) {\n super.drop($event);\n const nodeToMove = this.service.draggedData;\n if (this.canDrop) {\n await this.moveNode(nodeToMove);\n } else {\n this.draggedHover = false;\n this.service.draggedData = undefined;\n }\n }\n\n hookEvents() {\n if (!this.events) {\n this.events = new Subject();\n this.events.subscribe(evt => {\n if (!this.loading) {\n this.handleEvent(evt);\n }\n });\n }\n }\n\n protected fetch() {\n return this.root ? this.service.getRootNodes() : this.service.getGroupItems(this.mo.id);\n }\n\n protected async handleEvent(evt: Action) {\n if (!this.children.length && evt === Action.FETCH) {\n this.loading = true;\n this.addNodes(await this.fetch());\n this.loading = false;\n } else if (evt === Action.NEXT) {\n this.loadMoreNode.loading = true;\n this.addNodes(await this.paging.next());\n this.loadMoreNode.loading = false;\n } else if (evt === Action.REFRESH) {\n this.loading = false;\n this.paging = undefined;\n this.loadMoreNode = undefined;\n this.empty();\n this.events.next(Action.FETCH);\n }\n }\n\n protected addNodes(res) {\n if (res.paging) {\n const { currentPage, nextPage, pageSize } = (this.paging = res.paging);\n if (currentPage === 1) {\n this.empty();\n }\n const itemsCount = res.data.length;\n const moreItemsAvailable = !!nextPage && itemsCount === pageSize;\n this.toggleLoadMore(moreItemsAvailable);\n }\n (res.data || res).map(mo => this.addManagedObject(mo));\n this.events.next(Action.LOADING_DONE);\n }\n\n protected toggleLoadMore(show: boolean) {\n if (!this.loadMoreNode && show) {\n this.loadMoreNode = new LoadMoreNode();\n this.add(this.loadMoreNode);\n this.loadMoreNode.click = () => this.events.next(Action.NEXT);\n }\n\n if (this.loadMoreNode) {\n this.loadMoreNode.hidden = !show;\n }\n }\n\n private async moveNode(nodeToMove: AssetNode) {\n try {\n const isCopy = await this.showDropConfirm(nodeToMove);\n await this.verifyNodeAccess(nodeToMove);\n await this.addMovedNode(nodeToMove);\n if (!isCopy) {\n await this.removeMovedNode(nodeToMove);\n }\n this.expand();\n } catch (ex) {\n if (ex) {\n this.service.alert.addServerFailure(ex);\n }\n } finally {\n this.draggedHover = false;\n this.service.draggedData = undefined;\n }\n }\n\n private async showDropConfirm(nodeToMove: AssetNode) {\n this.confirm.title = gettext('Move');\n this.confirm.message = gettext('Do you want to move the group?');\n const buttons: any = [\n {\n label: gettext('Cancel'),\n action: () => Promise.reject()\n },\n {\n label: gettext('Move'),\n status: 'default',\n action: () => Promise.resolve(false)\n }\n ];\n if (nodeToMove.isDeviceOrProbablyChildDevice) {\n this.confirm.title = gettext('Move or add');\n this.confirm.message = gettext('Do you want to move or add the device?');\n buttons.push({\n label: gettext('Add'),\n status: 'primary',\n action: () => Promise.resolve(true)\n });\n }\n return this.confirm.show(buttons);\n }\n\n private async verifyNodeAccess(nodeToMove: AssetNode) {\n return this.service.inventory.update({ id: nodeToMove.mo.id });\n }\n\n private async addMovedNode(nodeToMove: AssetNode) {\n let mo;\n if (this.root) {\n const { data } = await this.service.inventory.update({\n id: nodeToMove.mo.id,\n type: GroupFragment.groupType\n });\n mo = data;\n } else {\n const { data } = await this.service.inventory.childAssetsAdd(nodeToMove.mo, this.mo);\n mo = data;\n }\n this.addManagedObject(mo);\n }\n\n private async removeMovedNode(nodeToMove: AssetNode) {\n for (const parent of nodeToMove.parents as AssetNode[]) {\n if (parent.mo && parent.mo.type === GroupFragment.dynamicGroupType) {\n break; // smart groups don't need to be changed\n }\n if (parent.root) {\n await this.service.inventory.update({\n id: nodeToMove.mo.id,\n type: GroupFragment.subGroupType\n });\n } else {\n await this.service.inventory.childAssetsRemove(nodeToMove.mo, parent.mo);\n }\n parent.remove(nodeToMove);\n }\n }\n\n private updateIcon(open) {\n this.icon = this.service.groups.icon(\n // if it's root we are going to pass a fake mo to get the same icon as groups\n this.root ? { type: GroupFragment.groupType } : this.mo,\n open\n );\n }\n}\n","\nimport { AssetNode } from './asset-node';\nimport { AssetNodeService } from './asset-node.service';\n\nexport class DynamicGroupNode extends AssetNode {\n constructor(\n protected service: AssetNodeService,\n config = {}\n ) {\n super(service, config);\n this.draggable = false;\n this.droppable = false;\n }\n\n get hasChildren() {\n return true;\n }\n\n get query() {\n return this.mo.c8y_DeviceQueryString;\n }\n\n protected fetch(): any {\n return this.service.getDynamicGroupItems(this.query);\n }\n}\n","import { InjectionToken } from '@angular/core';\r\nexport const ASSET_NAVIGATOR_CONFIG = new InjectionToken<AssetNavigatorConfig>('AssetNodeConfig');\r\n\r\nexport interface AssetNavigatorConfig {\r\n smartGroups?: boolean;\r\n openOnStart?: boolean;\r\n rootNodePriority?: number;\r\n disableDragAndDrop?: boolean;\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { GroupFragment } from './group-fragment.model';\nimport { IManagedObject } from '@c8y/client';\n\n@Injectable()\nexport class DeviceGroupService {\n icons = {\n brokerSourceInactive: {\n icon: 'c8y-group-remote-inactive'\n },\n brokerSource: {\n icon: 'c8y-group-remote',\n iconOpen: 'c8y-group-remote-open'\n },\n group: {\n icon: 'c8y-group',\n iconOpen: 'c8y-group-open'\n },\n dynamicGroup: {\n icon: 'c8y-group-smart',\n iconOpen: 'c8y-group-smart-open'\n },\n other: {\n icon: 'circle',\n iconClass: 'statusUnknown'\n }\n };\n dataBrokerSourceFragmentInactive = `_${GroupFragment.dataBrokerSourceFragment}`;\n\n isGroup(mo) {\n return (\n !!mo[GroupFragment.groupFragmentType] ||\n mo.type === GroupFragment.groupType ||\n mo.type === GroupFragment.subGroupType\n );\n }\n\n isDynamicGroup(mo) {\n return !!mo[GroupFragment.dynamicGroupFragment] || mo.type === GroupFragment.dynamicGroupType;\n }\n\n isDataBroker(mo) {\n return (\n !!mo[GroupFragment.dataBrokerSourceFragment] || !!mo[this.dataBrokerSourceFragmentInactive]\n );\n }\n\n isDataBrokerActive(mo) {\n return (\n !!mo[GroupFragment.dataBrokerSourceFragment] && !mo[this.dataBrokerSourceFragmentInactive]\n );\n }\n\n isDevice(mo) {\n return !!mo.c8y_IsDevice;\n }\n\n icon(mo, open = false) {\n let type = 'other';\n if (this.isDynamicGroup(mo)) {\n type = 'dynamicGroup';\n } else if (this.isDataBrokerActive(mo)) {\n type = 'brokerSource';\n } else if (this.isDataBroker(mo)) {\n type = 'brokerSourceInactive';\n } else if (this.isGroup(mo)) {\n type = 'group';\n }\n const icon = this.icons[type];\n return (open && icon.iconOpen) || icon.icon;\n }\n\n isAnyGroup(mo: IManagedObject) {\n return (\n this.isGroup(mo) ||\n this.isDynamicGroup(mo) ||\n this.isDataBroker(mo) ||\n this.isDataBrokerActive(mo)\n );\n }\n}\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport { InventoryService, QueriesUtil, UserService, IManagedObject, IResult } from '@c8y/client';\nimport {\n AlertService,\n BreadcrumbService,\n ModalService,\n NavigatorNode,\n AppStateService\n} from '@c8y/ngx-components';\nimport { ApiService } from '@c8y/ngx-components/api';\nimport { empty } from 'rxjs';\nimport { filter, mergeMap } from 'rxjs/operators';\nimport { AssetNode } from './asset-node';\nimport { AssetNavigatorConfig, ASSET_NAVIGATOR_CONFIG } from './asset-node-config.model';\nimport { DynamicGroupNode } from './dynamic-group-node';\nimport { GroupFragment } from './group-fragment.model';\nimport { DeviceGroupService } from './group.service';\n\nexport interface AssetNodeMo {\n id: string;\n type: string;\n}\n\n@Injectable()\nexport class AssetNodeService {\n rootNode: AssetNode;\n firstUrl = true;\n draggedData: AssetNode;\n queriesUtil: QueriesUtil;\n protected PAGE_SIZE = 20;\n\n constructor(\n public inventory: InventoryService,\n public groups: DeviceGroupService,\n public apiService: ApiService,\n public modal: ModalService,\n public alert: AlertService,\n protected breadcrumbService: BreadcrumbService,\n protected user: UserService,\n protected appState: AppStateService,\n @Optional() @Inject(ASSET_NAVIGATOR_CONFIG) public moduleConfig: AssetNavigatorConfig\n ) {\n this.moduleConfig = {\n rootNodePriority: 2000,\n ...(moduleConfig || {})\n };\n this.queriesUtil = new QueriesUtil();\n }\n\n createRootNode() {\n this.rootNode = this.createAssetNode({\n root: true,\n priority: this.moduleConfig.rootNodePriority\n });\n return this.rootNode;\n }\n\n createDynamicGroupNode(config) {\n return new DynamicGroupNode(this, config);\n }\n\n createAssetNode(config) {\n return new AssetNode(this, config);\n }\n\n createChildNode(managedObject) {\n const { type } = managedObject;\n const config: Partial<AssetNode> = { mo: managedObject };\n if (type === GroupFragment.dynamicGroupType) {\n return this.createDynamicGroupNode(config);\n }\n return this.createAssetNode(config);\n }\n\n getRootNodes(customFilter?: any): Promise<any> {\n const defaultFilter = {\n pageSize: this.PAGE_SIZE,\n withChildren: false,\n query: this.queriesUtil.buildQuery(this.rootQueryFilter())\n };\n const groupFilter = customFilter ? customFilter : defaultFilter;\n\n // due to BE performance limitations we do not allow filtering and sorting for a user without inventory roles\n if (!this.user.hasRole(this.appState.currentUser.value, 'ROLE_INVENTORY_READ')) {\n delete groupFilter.query;\n Object.assign(groupFilter, {\n fragmentType: GroupFragment.groupFragmentType,\n onlyRoots: true\n });\n }\n return this.inventory.list(this.createFilter(groupFilter));\n }\n\n getGroupItems(moId: string, extraFilter: object = {}) {\n const queryFilter = {\n withChildren: false,\n pageSize: this.PAGE_SIZE,\n query: this.groupQueryFilter(moId)\n };\n return this.inventory.childAssetsList(moId, { ...queryFilter, ...extraFilter });\n }\n\n getDynamicGroupItems(groupQuery: string, filterObj: any = {}) {\n const { query, ...queryParams } = filterObj;\n const orderByQuery = query;\n const queryFilter = {\n q: this.buildCombinedQuery(groupQuery, orderByQuery),\n ...queryParams\n };\n return this.inventory.list(this.createFilter(queryFilter));\n }\n\n getDeviceChildren(moId: string, extraFilter: object = {}) {\n const queryFilter = {\n withChildren: false,\n pageSize: this.PAGE_SIZE,\n query: this.groupQueryFilter(moId)\n };\n return this.inventory.childDevicesList(moId, { ...queryFilter, ...extraFilter });\n }\n\n groupQueryFilter(moId: string) {\n return `$filter=(bygroupid(${moId}))$orderby=name`;\n }\n\n rootQueryFilter() {\n const { moduleConfig } = this;\n const rootFilter = {\n __filter: {\n type: `${GroupFragment.groupType}`\n },\n __orderby: [{ name: 1 }]\n };\n if (moduleConfig.smartGroups) {\n const queryFilter = {\n __filter: {\n __and: [\n {\n type: `${GroupFragment.dynamicGroupType}`\n },\n {\n __has: `${GroupFragment.dynamicGroupFragment}`\n },\n { __not: { __has: `${GroupFragment.dynamicGroupFragment}.invisible` } }\n ]\n }\n };\n this.queriesUtil.addOrFilter(rootFilter, queryFilter);\n }\n return rootFilter;\n }\n\n onUpdate({ mo, root }) {\n if (mo.id) {\n return this.apiService\n .hookResponse(\n ({ url, method }) =>\n ['PUT', 'DELETE', 'POST'].includes(method) &&\n RegExp(`((inventory/managedObjects)|(service/smartgroup/smartgroups))/${mo.id}`).test(\n url\n )\n )\n .pipe(\n filter(() => !this.draggedData),\n mergeMap(this.apiService.resolveData),\n filter(response => !response.data.c8y_Dashboard)\n );\n } else if (root) {\n return this.apiService\n .hookResponse(\n ({ url, method }) =>\n RegExp('((inventory/managedObjects)|(service/smartgroup/smartgroups))/?$').test(url) &&\n method === 'POST'\n )\n .pipe(\n mergeMap(this.apiService.resolveData),\n filter(response => this.isNewManagedObjectRoot(response))\n );\n } else {\n return empty();\n }\n }\n\n isNewManagedObjectRoot(response: Partial<IResult<IManagedObject>> = {}) {\n const { data } = response;\n let isRootAsset = false;\n\n if (typeof data === 'object') {\n isRootAsset = !!data[GroupFragment.groupFragmentType];\n if (!isRootAsset && this.moduleConfig.smartGroups) {\n isRootAsset = !!data[GroupFragment.dynamicGroupFragment];\n }\n }\n return isRootAsset;\n }\n\n /**\n * There could be multiple breadcrumbs for devices,\n * so we set a preferred one on click on a device.\n * @param parents The parent nodes of the device to select the prefered one.\n */\n preferBreadcrumb(parents: NavigatorNode[]) {\n if (parents.length === 1) {\n this.breadcrumbService.selectPreferredByPath(parents[0].path);\n }\n }\n\n protected createFilter(extraParams: any = {}) {\n const params = {\n currentPage: 1,\n withTotalPages: true,\n pageSize: 10\n };\n return { ...params, ...extraParams };\n }\n\n private buildCombinedQuery(query, orderByQuery) {\n let combinedQuery;\n if (query && orderByQuery) {\n const filterQuery = this.queriesUtil.buildQuery({\n __useFilterQueryString: query\n });\n combinedQuery = `${filterQuery} ${orderByQuery}`;\n } else {\n combinedQuery = query || orderByQuery || '';\n }\n return combinedQuery;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { AssetNodeService } from './asset-node.service';\nimport { NavigatorNode } from '@c8y/ngx-components';\n\n@Injectable()\nexport class AssetNodeFactory {\n constructor(private service: AssetNodeService) {}\n\n get(): NavigatorNode {\n if (!this.service.rootNode) {\n this.service.createRootNode();\n }\n return this.service.rootNode;\n }\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { HOOK_NAVIGATOR_NODES, ModalModule, ModalService, DeviceStatusComponent, DeviceStatusModule} from '@c8y/ngx-components';\nimport { ASSET_NAVIGATOR_CONFIG} from './asset-node-config.model';\nimport { AssetNodeFactory } from './asset-node.factory';\nimport { AssetNodeService } from './asset-node.service';\nimport { AssetNavigatorConfig } from './asset-node-config.model';\nimport { DeviceGroupService } from './group.service';\n\n@NgModule({\n declarations: [],\n imports: [\n ModalModule,\n DeviceStatusModule\n ],\n providers: [\n ModalService,\n AssetNodeService,\n DeviceGroupService,\n {\n provide: HOOK_NAVIGATOR_NODES, useClass: AssetNodeFactory, multi: true\n }\n ],\n entryComponents: [DeviceStatusComponent]\n})\nexport class AssetsNavigatorModule {\n static config(config: AssetNavigatorConfig): ModuleWithProviders<AssetsNavigatorModule> {\n return {\n ngModule: AssetsNavigatorModule,\n providers: [\n {\n provide: ASSET_NAVIGATOR_CONFIG, useValue: config\n }\n ],\n };\n }\n\n}\n","import { GroupNodeService } from './group-node.service';\nimport { AssetNode } from '../asset-node';\n\nexport class GroupNode extends AssetNode {\n // FIXME: Currently hasChildren returns true if it is a group,\n // Issue is, that we disable the children in the API\n // getGroupItems service call due to performance. This leads\n // to that the dropdown chevron is shown always. Issue is,\n // that even if we return the chevrons, we have no way to determine\n // if the childAssets contain groups or other assets (like dashboards).\n // get hasChildren() {\n // return this.root || this.service.groups.isGroup(this.mo) && (this.mo as IManagedObject).childAssets.references.length > 0;\n // }\n\n /**\n * Creates a new node which shows only groups.\n *\n * @param service The service to use.\n * @param config The default configuration of the node.\n */\n constructor(protected service: GroupNodeService, config = {}) {\n super(service, config);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { AssetNodeService } from '../asset-node.service';\nimport { GroupNode } from './group-node';\nimport { GroupFragment } from '../group-fragment.model';\n\n@Injectable()\nexport class GroupNodeService extends AssetNodeService {\n protected PAGE_SIZE = 5;\n\n createGroupNode(config) {\n return new GroupNode(this, config);\n }\n\n createChildNode(managedObject): GroupNode {\n const config: Partial<GroupNode> = { mo: managedObject };\n return this.createGroupNode(config);\n }\n\n subAssetsQueryFilter() {\n const rootQueryFilter = this.rootQueryFilter();\n const filter = this.queriesUtil.addOrFilter(rootQueryFilter, {\n type: GroupFragment.subGroupType\n });\n return this.queriesUtil.buildQuery(filter);\n }\n\n getGroupItems(moId: string): Promise<any> {\n return this.inventory.childAssetsList(moId, {\n query: this.subAssetsQueryFilter(),\n withChildren: false,\n pageSize: this.PAGE_SIZE,\n withTotalPages: true\n });\n }\n}\n","import { Component, Output, Input, EventEmitter, OnInit } from '@angular/core';\nimport { GroupNodeService } from './group-node.service';\nimport { GroupNode } from './group-node';\nimport { IManagedObject } from '@c8y/client';\n\n/**\n * Displays a hierarchical tree selector for assets.\n */\n@Component({\n selector: 'c8y-asset-selector',\n templateUrl: './asset-selector.component.html'\n})\nexport class AssetSelectorComponent implements OnInit {\n /**\n * An array of predefined nodes.\n */\n @Input() selected: IManagedObject[] = [];\n /**\n * Emits if one item was selected (all currently selected nodes).\n */\n @Output() onChange = new EventEmitter<IManagedObject[]>();\n /**\n * @ignore\n */\n rootNode: GroupNode;\n\n /**\n * @ignore only DI\n */\n constructor(private groupNodeService: GroupNodeService) {}\n\n /**\n * @ignore\n */\n ngOnInit(): void {\n this.rootNode = this.groupNodeService.createGroupNode({ root: true });\n }\n\n /**\n * Adds an managed object to the selected array and emits the change.\n * @param selectedMo The selected asset.\n */\n select(selectedMo: IManagedObject) {\n const index = this.getIndexOfSelected(this.selected, selectedMo);\n if (index === -1) {\n this.selected.push(selectedMo);\n }\n this.onChange.emit(this.selected);\n }\n\n /**\n * Removes a managed object from the selected array and emits the change.\n * @param selectedMo The selected asset.\n */\n deselect(selectedMo: IManagedObject) {\n const index = this.getIndexOfSelected(this.selected, selectedMo);\n if (index > -1) {\n this.selected.splice(index, 1);\n }\n this.onChange.emit(this.selected);\n }\n\n getIndexOfSelected(selected: Array<Partial<IManagedObject>>, selectedMo: IManagedObject) {\n return selected.findIndex(mo => mo.id === selectedMo.id);\n }\n}\n","import { Component, Input, OnInit, ChangeDetectorRef } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { GroupNode } from './group-node';\nimport { Subject } from 'rxjs';\nimport { takeUntil, filter } from 'rxjs/operators';\nimport { AssetSelectorComponent } from './asset-selector.component';\nimport { IManagedObject } from '@c8y/client';\nimport { Action } from '../action.enum';\n\n@Component({\n selector: 'c8y-asset-selector-node',\n templateUrl: './asset-selector-node.component.html'\n})\nexport class AssetSelectorNodeComponent implements OnInit {\n /**\n * The current node.\n */\n @Input() node: GroupNode;\n /**\n * All preselected items\n */\n @Input() preselected: Array<Partial<IManagedObject>> = [];\n /**\n * Should the path be shown\n */\n @Input() showPath: boolean = false;\n /**\n * The current path to the node\n */\n breadcrumb: string;\n /**\n * @ignore\n */\n level: number = 0;\n /**\n * The selection status of the node\n */\n checked: boolean = false;\n /**\n * @ignore\n */\n unsubscribe$ = new Subject<any>();\n\n /**\n * @ignore\n */\n get expandTitle() {\n return !this.node.open ? gettext('Expand') : gettext('Collapse');\n }\n\n /**\n * @ignore only di\n */\n constructor(\n private translateService: TranslateService,\n private cd: ChangeDetectorRef,\n private parentNode: AssetSelectorComponent\n ) {}\n\n /**\n * @ignore\n */\n async ngOnInit() {\n this.breadcrumb = this.node.label;\n this.setupBreadcrumbsAndLevel(this.node);\n\n if (this.node instanceof GroupNode) {\n this.node.hookEvents();\n }\n\n // open on startup\n if (this.node.root) {\n this.click();\n }\n\n if (this.node.events) {\n this.node.events\n .pipe(\n takeUntil(this.unsubscribe$),\n filter((a: Action) => a === Action.LOADING_DONE)\n )\n .subscribe(() => {\n this.cd.markForCheck();\n });\n }\n\n this.checked = this.isPreselected();\n }\n\n /**\n * Opens a node.\n */\n click() {\n this.node.open = !this.node.open;\n this.node.click({ open: this.node.open });\n }\n\n /**\n * TODO: Only level used. Breadcrumbs needs to be implemented.\n */\n setupBreadcrumbsAndLevel(node: GroupNode) {\n if (node.parents && node.parents.length) {\n const parent = node.parents[0] as GroupNode;\n this.breadcrumb = this.translateService.instant(parent.label) + ' > ' + this.breadcrumb;\n this.level++;\n\n this.setupBreadcrumbsAndLevel(parent);\n }\n }\n\n /**\n * Selects the node and emits a change on the parent component.\n * @param node The node to select.\n */\n selected(node: GroupNode) {\n this.checked = !this.checked;\n this.updateSelection(node.mo);\n }\n\n /**\n * @ignore\n */\n ngOnDestroy(): void {\n this.unsubscribe$.next(true);\n this.unsubscribe$.complete();\n }\n\n private isPreselected() {\n if (this.node.root || !this.node.mo) {\n return false;\n }\n return this.parentNode.getIndexOfSelected(this.preselected, this.node.mo) > -1;\n }\n\n private updateSelection(selectedMo: IManagedObject) {\n if (this.checked) {\n this.parentNode.select(selectedMo);\n return;\n }\n this.parentNode.deselect(selectedMo);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@c8y/ngx-components';\nimport { CollapseModule } from 'ngx-bootstrap/collapse';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { GroupNodeService } from './group-node.service';\n\nimport { AssetSelectorNodeComponent } from './asset-selector-node.component';\nimport { AssetSelectorComponent } from './asset-selector.component';\n\n@NgModule({\n imports: [CommonModule, CollapseModule, BsDropdownModule ],\n exports: [AssetSelectorNodeComponent, AssetSelectorComponent],\n providers: [GroupNodeService],\n declarations: [AssetSelectorNodeComponent, AssetSelectorComponent]\n})\nexport class AssetSelectorModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"c8y-ngx-components-assets-navigator.js","sources":["../../assets-navigator/load-more-node.ts","../../assets-navigator/group-fragment.model.ts","../../assets-navigator/action.enum.ts","../../assets-navigator/asset-node.ts","../../assets-navigator/dynamic-group-node.ts","../../assets-navigator/asset-node-config.model.ts","../../assets-navigator/group.service.ts","../../assets-navigator/asset-node.service.ts","../../assets-navigator/asset-node.factory.ts","../../assets-navigator/assets-navigator.module.ts","../../assets-navigator/asset-selector/group-node.ts","../../assets-navigator/asset-selector/group-node.service.ts","../../assets-navigator/asset-selector/asset-selector.component.ts","../../assets-navigator/asset-selector/asset-selector-node.component.ts","../../assets-navigator/asset-selector/asset-selector.module.ts","../../assets-navigator/c8y-ngx-components-assets-navigator.ts"],"sourcesContent":["import { NavigatorNode, gettext } from '@c8y/ngx-components';\n\nexport class LoadMoreNode extends NavigatorNode {\n label = gettext('Load more');\n icon = 'plus';\n droppable = true;\n\n constructor() {\n super();\n this.priority = -Infinity;\n }\n}\n","export enum GroupFragment {\n groupType = 'c8y_DeviceGroup',\n subGroupType = 'c8y_DeviceSubgroup',\n groupFragmentType = 'c8y_IsDeviceGroup',\n dataBrokerSourceFragment = 'c8y_BrokerSource',\n dynamicGroupType = 'c8y_DynamicGroup',\n dynamicGroupFragment = 'c8y_IsDynamicGroup',\n dynamicGroupColumnConfig = 'c8y_UIDeviceFilterConfig',\n dynamicGroupQueryString = 'c8y_DeviceQueryString',\n}\n","export enum Action {\n FETCH,\n NEXT,\n REFRESH,\n LOADING_DONE\n}\n","import { Paging } from '@c8y/client';\nimport { ClickOptions, gettext, NavigatorNode, DeviceStatusComponent } from '@c8y/ngx-components';\nimport { get } from 'lodash-es';\nimport { Subject, Subscription } from 'rxjs';\nimport { AssetNodeMo, AssetNodeService } from './asset-node.service';\nimport { LoadMoreNode } from './load-more-node';\nimport { GroupFragment } from './group-fragment.model';\nimport { Action } from './action.enum';\n\nexport class AssetNode extends NavigatorNode {\n root: boolean;\n mo: any;\n\n get hasChildren() {\n return this.root || this.service.groups.isGroup(this.mo);\n }\n\n get isDevice() {\n return !!this.mo.c8y_IsDevice;\n }\n\n get isDeviceOrProbablyChildDevice() {\n return this.isDevice || this.isNeitherDeviceOrGroup;\n }\n\n get isNeitherDeviceOrGroup() {\n const { isGroup, isDynamicGroup } = this.service.groups;\n return !isGroup(this.mo) && !isDynamicGroup(this.mo) && !this.isDevice && !this.root;\n }\n\n events: Subject<Action>;\n protected paging: Paging<AssetNodeMo>;\n protected loadMoreNode: LoadMoreNode;\n private onUpdateSubscription: Subscription;\n\n constructor(protected service: AssetNodeService, config = {}) {\n super(config);\n this.root = this.root || false;\n this.mo = this.mo || {};\n this.path = this.root\n ? 'group'\n : this.isDeviceOrProbablyChildDevice\n ? `device/${this.mo.id}`\n : `group/${this.mo.id}`;\n this.draggable = !this.service.moduleConfig.disableDragAndDrop && !this.root;\n this.droppable =\n !this.service.moduleConfig.disableDragAndDrop && !this.isDeviceOrProbablyChildDevice;\n this.routerLinkExact = this.root;\n this.updateIcon(false);\n this.onUpdateSubscription = this.service\n .onUpdate(this)\n .subscribe(({ data, method }) => this.refresh(data, method));\n this.setLabel();\n this.iconComponent = this.isDeviceOrProbablyChildDevice ? DeviceStatusComponent : undefined;\n }\n\n openOnStart(url) {\n const urlRegex = /^\\/group\\//;\n if (this.root) {\n if (this.service.moduleConfig.openOnStart || urlRegex.test(url)) {\n return true;\n }\n }\n const matches = url.match(/\\/(group)\\/(\\d+)/);\n let isMatch = false;\n if (matches) {\n const id = matches[2];\n isMatch = []\n .concat(get(this.mo, 'childAssets.references', []))\n .some(({ managedObject }) => managedObject.id === id);\n return isMatch;\n }\n return false;\n }\n\n refresh(mo: any = {}, method = 'GET') {\n if (mo.id === this.mo.id) {\n this.mo = mo;\n this.setLabel();\n } else if (method === 'DELETE') {\n this.parents.forEach((node: AssetNode) => node.refresh());\n return;\n }\n if (this.events) {\n this.events.next(Action.REFRESH);\n }\n }\n\n setLabel() {\n this.label = (this.root && gettext('Groups')) || this.mo.name || '--';\n }\n\n click(options: ClickOptions = {}) {\n if (this.isDeviceOrProbablyChildDevice) {\n this.service.preferBreadcrumb(this.parents);\n return;\n }\n this.hookEvents();\n\n this.updateIcon(options.open);\n if (options.open) {\n this.events.next(Action.FETCH);\n }\n }\n\n sort() {\n this.children.sort((a, b) => {\n if (a.priority > b.priority) {\n return -1;\n } else if (a.priority < b.priority) {\n return 1;\n } else {\n return 0;\n }\n });\n }\n\n addManagedObject(mo) {\n const { childAdditions } = this.mo;\n if (!this.isChildAddition(childAdditions, mo)) {\n this.add(this.service.createChildNode(mo));\n }\n }\n\n isChildAddition(childAdditions, mo) {\n return (\n childAdditions && childAdditions.references.some(({ managedObject: { id } }) => id === mo.id)\n );\n }\n\n destroy() {\n this.onUpdateSubscription.unsubscribe();\n }\n\n get canDrop() {\n const nodeToMove = this.service.draggedData;\n if (nodeToMove) {\n const shouldGetChildOfItsOwn = !!nodeToMove.find(child => child === this);\n const isAlreadyChild = (this.children as AssetNode[]).some(\n child => child.mo && child.mo.id === nodeToMove.mo.id\n );\n const preventMove = this === nodeToMove || shouldGetChildOfItsOwn || isAlreadyChild;\n return this.droppable && !preventMove;\n }\n return this.droppable;\n }\n\n dragStart($event) {\n super.dragStart($event);\n this.service.draggedData = this;\n this.service.rootNode.droppable = !this.isDeviceOrProbablyChildDevice;\n }\n\n dragEnd($event) {\n super.dragEnd($event);\n }\n\n async drop($event) {\n super.drop($event);\n const nodeToMove = this.service.draggedData;\n if (this.canDrop) {\n await this.moveNode(nodeToMove);\n } else {\n this.draggedHover = false;\n this.service.draggedData = undefined;\n }\n }\n\n hookEvents() {\n if (!this.events) {\n this.events = new Subject();\n this.events.subscribe(evt => {\n if (!this.loading) {\n this.handleEvent(evt);\n }\n });\n }\n }\n\n protected fetch() {\n return this.root ? this.service.getRootNodes() : this.service.getGroupItems(this.mo.id);\n }\n\n protected async handleEvent(evt: Action) {\n if (!this.children.length && evt === Action.FETCH) {\n this.loading = true;\n this.addNodes(await this.fetch());\n this.loading = false;\n } else if (evt === Action.NEXT) {\n this.loadMoreNode.loading = true;\n this.addNodes(await this.paging.next());\n this.loadMoreNode.loading = false;\n } else if (evt === Action.REFRESH) {\n this.loading = false;\n this.paging = undefined;\n this.loadMoreNode = undefined;\n this.empty();\n this.events.next(Action.FETCH);\n }\n }\n\n protected addNodes(res) {\n if (res.paging) {\n const { currentPage, nextPage, pageSize } = (this.paging = res.paging);\n if (currentPage === 1) {\n this.empty();\n }\n const itemsCount = res.data.length;\n const moreItemsAvailable = !!nextPage && itemsCount === pageSize;\n this.toggleLoadMore(moreItemsAvailable);\n }\n (res.data || res).map(mo => this.addManagedObject(mo));\n this.events.next(Action.LOADING_DONE);\n }\n\n protected toggleLoadMore(show: boolean) {\n if (!this.loadMoreNode && show) {\n this.loadMoreNode = new LoadMoreNode();\n this.add(this.loadMoreNode);\n this.loadMoreNode.click = () => this.events.next(Action.NEXT);\n }\n\n if (this.loadMoreNode) {\n this.loadMoreNode.hidden = !show;\n }\n }\n\n private async moveNode(nodeToMove: AssetNode) {\n try {\n const isCopy = await this.showDropConfirm(nodeToMove);\n await this.verifyNodeAccess(nodeToMove);\n await this.addMovedNode(nodeToMove);\n if (!isCopy) {\n await this.removeMovedNode(nodeToMove);\n }\n this.expand();\n } catch (ex) {\n if (ex) {\n this.service.alert.addServerFailure(ex);\n }\n } finally {\n this.draggedHover = false;\n this.service.draggedData = undefined;\n }\n }\n\n private async showDropConfirm(nodeToMove: AssetNode) {\n this.confirm.title = gettext('Move');\n this.confirm.message = gettext('Do you want to move the group?');\n const buttons: any = [\n {\n label: gettext('Cancel'),\n action: () => Promise.reject()\n },\n {\n label: gettext('Move'),\n status: 'default',\n action: () => Promise.resolve(false)\n }\n ];\n if (nodeToMove.isDeviceOrProbablyChildDevice) {\n this.confirm.title = gettext('Move or add');\n this.confirm.message = gettext('Do you want to move or add the device?');\n buttons.push({\n label: gettext('Add'),\n status: 'primary',\n action: () => Promise.resolve(true)\n });\n }\n return this.confirm.show(buttons);\n }\n\n private async verifyNodeAccess(nodeToMove: AssetNode) {\n return this.service.inventory.update({ id: nodeToMove.mo.id });\n }\n\n private async addMovedNode(nodeToMove: AssetNode) {\n let mo;\n if (this.root) {\n const { data } = await this.service.inventory.update({\n id: nodeToMove.mo.id,\n type: GroupFragment.groupType\n });\n mo = data;\n } else {\n const { data } = await this.service.inventory.childAssetsAdd(nodeToMove.mo, this.mo);\n mo = data;\n }\n this.addManagedObject(mo);\n }\n\n private async removeMovedNode(nodeToMove: AssetNode) {\n for (const parent of nodeToMove.parents as AssetNode[]) {\n if (parent.mo && parent.mo.type === GroupFragment.dynamicGroupType) {\n break; // smart groups don't need to be changed\n }\n if (parent.root) {\n await this.service.inventory.update({\n id: nodeToMove.mo.id,\n type: GroupFragment.subGroupType\n });\n } else {\n await this.service.inventory.childAssetsRemove(nodeToMove.mo, parent.mo);\n }\n parent.remove(nodeToMove);\n }\n }\n\n private updateIcon(open) {\n this.icon = this.service.groups.icon(\n // if it's root we are going to pass a fake mo to get the same icon as groups\n this.root ? { type: GroupFragment.groupType } : this.mo,\n open\n );\n }\n}\n","\nimport { AssetNode } from './asset-node';\nimport { AssetNodeService } from './asset-node.service';\n\nexport class DynamicGroupNode extends AssetNode {\n constructor(\n protected service: AssetNodeService,\n config = {}\n ) {\n super(service, config);\n this.draggable = false;\n this.droppable = false;\n }\n\n get hasChildren() {\n return true;\n }\n\n get query() {\n return this.mo.c8y_DeviceQueryString;\n }\n\n protected fetch(): any {\n return this.service.getDynamicGroupItems(this.query);\n }\n}\n","import { InjectionToken } from '@angular/core';\r\nexport const ASSET_NAVIGATOR_CONFIG = new InjectionToken<AssetNavigatorConfig>('AssetNodeConfig');\r\n\r\nexport interface AssetNavigatorConfig {\r\n smartGroups?: boolean;\r\n openOnStart?: boolean;\r\n rootNodePriority?: number;\r\n disableDragAndDrop?: boolean;\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { GroupFragment } from './group-fragment.model';\nimport { IManagedObject } from '@c8y/client';\n\n@Injectable()\nexport class DeviceGroupService {\n icons = {\n brokerSourceInactive: {\n icon: 'c8y-group-remote-inactive'\n },\n brokerSource: {\n icon: 'c8y-group-remote',\n iconOpen: 'c8y-group-remote-open'\n },\n group: {\n icon: 'c8y-group',\n iconOpen: 'c8y-group-open'\n },\n dynamicGroup: {\n icon: 'c8y-group-smart',\n iconOpen: 'c8y-group-smart-open'\n },\n other: {\n icon: 'circle',\n iconClass: 'statusUnknown'\n }\n };\n dataBrokerSourceFragmentInactive = `_${GroupFragment.dataBrokerSourceFragment}`;\n\n isGroup(mo) {\n return (\n !!mo[GroupFragment.groupFragmentType] ||\n mo.type === GroupFragment.groupType ||\n mo.type === GroupFragment.subGroupType\n );\n }\n\n isDynamicGroup(mo) {\n return !!mo[GroupFragment.dynamicGroupFragment] || mo.type === GroupFragment.dynamicGroupType;\n }\n\n isDataBroker(mo) {\n return (\n !!mo[GroupFragment.dataBrokerSourceFragment] || !!mo[this.dataBrokerSourceFragmentInactive]\n );\n }\n\n isDataBrokerActive(mo) {\n return (\n !!mo[GroupFragment.dataBrokerSourceFragment] && !mo[this.dataBrokerSourceFragmentInactive]\n );\n }\n\n isDevice(mo) {\n return !!mo.c8y_IsDevice;\n }\n\n icon(mo, open = false) {\n let type = 'other';\n if (this.isDynamicGroup(mo)) {\n type = 'dynamicGroup';\n } else if (this.isDataBrokerActive(mo)) {\n type = 'brokerSource';\n } else if (this.isDataBroker(mo)) {\n type = 'brokerSourceInactive';\n } else if (this.isGroup(mo)) {\n type = 'group';\n }\n const icon = this.icons[type];\n return (open && icon.iconOpen) || icon.icon;\n }\n\n isAnyGroup(mo: IManagedObject) {\n return (\n this.isGroup(mo) ||\n this.isDynamicGroup(mo) ||\n this.isDataBroker(mo) ||\n this.isDataBrokerActive(mo)\n );\n }\n}\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport { InventoryService, QueriesUtil, UserService, IManagedObject, IResult } from '@c8y/client';\nimport {\n AlertService,\n BreadcrumbService,\n ModalService,\n NavigatorNode,\n AppStateService\n} from '@c8y/ngx-components';\nimport { ApiService } from '@c8y/ngx-components/api';\nimport { empty } from 'rxjs';\nimport { filter, mergeMap } from 'rxjs/operators';\nimport { AssetNode } from './asset-node';\nimport { AssetNavigatorConfig, ASSET_NAVIGATOR_CONFIG } from './asset-node-config.model';\nimport { DynamicGroupNode } from './dynamic-group-node';\nimport { GroupFragment } from './group-fragment.model';\nimport { DeviceGroupService } from './group.service';\n\nexport interface AssetNodeMo {\n id: string;\n type: string;\n}\n\n@Injectable()\nexport class AssetNodeService {\n rootNode: AssetNode;\n firstUrl = true;\n draggedData: AssetNode;\n queriesUtil: QueriesUtil;\n protected PAGE_SIZE = 20;\n\n constructor(\n public inventory: InventoryService,\n public groups: DeviceGroupService,\n public apiService: ApiService,\n public modal: ModalService,\n public alert: AlertService,\n protected breadcrumbService: BreadcrumbService,\n protected user: UserService,\n protected appState: AppStateService,\n @Optional() @Inject(ASSET_NAVIGATOR_CONFIG) public moduleConfig: AssetNavigatorConfig\n ) {\n this.moduleConfig = {\n rootNodePriority: 2000,\n ...(moduleConfig || {})\n };\n this.queriesUtil = new QueriesUtil();\n }\n\n createRootNode() {\n this.rootNode = this.createAssetNode({\n root: true,\n priority: this.moduleConfig.rootNodePriority\n });\n return this.rootNode;\n }\n\n createDynamicGroupNode(config) {\n return new DynamicGroupNode(this, config);\n }\n\n createAssetNode(config) {\n return new AssetNode(this, config);\n }\n\n createChildNode(managedObject) {\n const { type } = managedObject;\n const config: Partial<AssetNode> = { mo: managedObject };\n if (type === GroupFragment.dynamicGroupType) {\n return this.createDynamicGroupNode(config);\n }\n return this.createAssetNode(config);\n }\n\n getRootNodes(customFilter?: any): Promise<any> {\n const defaultFilter = {\n pageSize: this.PAGE_SIZE,\n withChildren: false,\n query: this.queriesUtil.buildQuery(this.navRootQueryFilter())\n };\n const groupFilter = customFilter ? customFilter : defaultFilter;\n\n // due to BE performance limitations we do not allow filtering and sorting for a user without inventory roles\n if (!this.user.hasRole(this.appState.currentUser.value, 'ROLE_INVENTORY_READ')) {\n delete groupFilter.query;\n Object.assign(groupFilter, {\n fragmentType: GroupFragment.groupFragmentType,\n onlyRoots: true\n });\n }\n return this.inventory.list(this.createFilter(groupFilter));\n }\n\n getGroupItems(moId: string, extraFilter: object = {}) {\n const queryFilter = {\n withChildren: false,\n pageSize: this.PAGE_SIZE,\n query: this.groupQueryFilter(moId)\n };\n return this.inventory.childAssetsList(moId, { ...queryFilter, ...extraFilter });\n }\n\n getDynamicGroupItems(groupQuery: string, filterObj: any = {}) {\n const { query, ...queryParams } = filterObj;\n const orderByQuery = query;\n const queryFilter = {\n q: this.buildCombinedQuery(groupQuery, orderByQuery),\n ...queryParams\n };\n return this.inventory.list(this.createFilter(queryFilter));\n }\n\n getDeviceChildren(moId: string, extraFilter: object = {}) {\n const queryFilter = {\n withChildren: false,\n pageSize: this.PAGE_SIZE,\n query: this.groupQueryFilter(moId)\n };\n return this.inventory.childDevicesList(moId, { ...queryFilter, ...extraFilter });\n }\n\n groupQueryFilter(moId: string) {\n return `$filter=(bygroupid(${moId}))$orderby=name`;\n }\n\n navRootQueryFilter() {\n const navRootFilter = this.rootQueryFilter();\n navRootFilter.__orderby = [{ name: 1 }];\n return navRootFilter;\n }\n\n rootQueryFilter() {\n const { moduleConfig } = this;\n const rootFilter = {\n __filter: {\n type: `${GroupFragment.groupType}`\n },\n __orderby: []\n };\n if (moduleConfig.smartGroups) {\n const queryFilter = {\n __filter: {\n __and: [\n {\n type: `${GroupFragment.dynamicGroupType}`\n },\n {\n __has: `${GroupFragment.dynamicGroupFragment}`\n },\n { __not: { __has: `${GroupFragment.dynamicGroupFragment}.invisible` } }\n ]\n }\n };\n this.queriesUtil.addOrFilter(rootFilter, queryFilter);\n }\n return rootFilter;\n }\n\n onUpdate({ mo, root }) {\n if (mo.id) {\n return this.apiService\n .hookResponse(\n ({ url, method }) =>\n ['PUT', 'DELETE', 'POST'].includes(method) &&\n RegExp(`((inventory/managedObjects)|(service/smartgroup/smartgroups))/${mo.id}`).test(\n url\n )\n )\n .pipe(\n filter(() => !this.draggedData),\n mergeMap(this.apiService.resolveData),\n filter(response => !response.data.c8y_Dashboard)\n );\n } else if (root) {\n return this.apiService\n .hookResponse(\n ({ url, method }) =>\n RegExp('((inventory/managedObjects)|(service/smartgroup/smartgroups))/?$').test(url) &&\n method === 'POST'\n )\n .pipe(\n mergeMap(this.apiService.resolveData),\n filter(response => this.isNewManagedObjectRoot(response))\n );\n } else {\n return empty();\n }\n }\n\n isNewManagedObjectRoot(response: Partial<IResult<IManagedObject>> = {}) {\n const { data } = response;\n let isRootAsset = false;\n\n if (typeof data === 'object') {\n isRootAsset = !!data[GroupFragment.groupFragmentType];\n if (!isRootAsset && this.moduleConfig.smartGroups) {\n isRootAsset = !!data[GroupFragment.dynamicGroupFragment];\n }\n }\n return isRootAsset;\n }\n\n /**\n * There could be multiple breadcrumbs for devices,\n * so we set a preferred one on click on a device.\n * @param parents The parent nodes of the device to select the prefered one.\n */\n preferBreadcrumb(parents: NavigatorNode[]) {\n if (parents.length === 1) {\n this.breadcrumbService.selectPreferredByPath(parents[0].path);\n }\n }\n\n protected createFilter(extraParams: any = {}) {\n const params = {\n currentPage: 1,\n withTotalPages: true,\n pageSize: 10\n };\n return { ...params, ...extraParams };\n }\n\n private buildCombinedQuery(query, orderByQuery) {\n let combinedQuery;\n if (query && orderByQuery) {\n const filterQuery = this.queriesUtil.buildQuery({\n __useFilterQueryString: query\n });\n combinedQuery = `${filterQuery} ${orderByQuery}`;\n } else {\n combinedQuery = query || orderByQuery || '';\n }\n return combinedQuery;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { AssetNodeService } from './asset-node.service';\nimport { NavigatorNode } from '@c8y/ngx-components';\n\n@Injectable()\nexport class AssetNodeFactory {\n constructor(private service: AssetNodeService) {}\n\n get(): NavigatorNode {\n if (!this.service.rootNode) {\n this.service.createRootNode();\n }\n return this.service.rootNode;\n }\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { HOOK_NAVIGATOR_NODES, ModalModule, ModalService, DeviceStatusComponent, DeviceStatusModule} from '@c8y/ngx-components';\nimport { ASSET_NAVIGATOR_CONFIG} from './asset-node-config.model';\nimport { AssetNodeFactory } from './asset-node.factory';\nimport { AssetNodeService } from './asset-node.service';\nimport { AssetNavigatorConfig } from './asset-node-config.model';\nimport { DeviceGroupService } from './group.service';\n\n@NgModule({\n declarations: [],\n imports: [\n ModalModule,\n DeviceStatusModule\n ],\n providers: [\n ModalService,\n AssetNodeService,\n DeviceGroupService,\n {\n provide: HOOK_NAVIGATOR_NODES, useClass: AssetNodeFactory, multi: true\n }\n ],\n entryComponents: [DeviceStatusComponent]\n})\nexport class AssetsNavigatorModule {\n static config(config: AssetNavigatorConfig): ModuleWithProviders<AssetsNavigatorModule> {\n return {\n ngModule: AssetsNavigatorModule,\n providers: [\n {\n provide: ASSET_NAVIGATOR_CONFIG, useValue: config\n }\n ],\n };\n }\n\n}\n","import { GroupNodeService } from './group-node.service';\nimport { AssetNode } from '../asset-node';\n\nexport class GroupNode extends AssetNode {\n // FIXME: Currently hasChildren returns true if it is a group,\n // Issue is, that we disable the children in the API\n // getGroupItems service call due to performance. This leads\n // to that the dropdown chevron is shown always. Issue is,\n // that even if we return the chevrons, we have no way to determine\n // if the childAssets contain groups or other assets (like dashboards).\n // get hasChildren() {\n // return this.root || this.service.groups.isGroup(this.mo) && (this.mo as IManagedObject).childAssets.references.length > 0;\n // }\n\n /**\n * Creates a new node which shows only groups.\n *\n * @param service The service to use.\n * @param config The default configuration of the node.\n */\n constructor(protected service: GroupNodeService, config = {}) {\n super(service, config);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { AssetNodeService } from '../asset-node.service';\nimport { GroupNode } from './group-node';\nimport { GroupFragment } from '../group-fragment.model';\n\n@Injectable()\nexport class GroupNodeService extends AssetNodeService {\n protected PAGE_SIZE = 5;\n\n createGroupNode(config) {\n return new GroupNode(this, config);\n }\n\n createChildNode(managedObject): GroupNode {\n const config: Partial<GroupNode> = { mo: managedObject };\n return this.createGroupNode(config);\n }\n\n subAssetsQueryFilter() {\n const rootQueryFilter = this.rootQueryFilter();\n const filter = this.queriesUtil.addOrFilter(rootQueryFilter, {\n type: GroupFragment.subGroupType\n });\n return this.queriesUtil.buildQuery(filter);\n }\n\n getGroupItems(moId: string): Promise<any> {\n return this.inventory.childAssetsList(moId, {\n query: this.subAssetsQueryFilter(),\n withChildren: false,\n pageSize: this.PAGE_SIZE,\n withTotalPages: true\n });\n }\n}\n","import { Component, Output, Input, EventEmitter, OnInit } from '@angular/core';\nimport { GroupNodeService } from './group-node.service';\nimport { GroupNode } from './group-node';\nimport { IManagedObject } from '@c8y/client';\n\n/**\n * Displays a hierarchical tree selector for assets.\n */\n@Component({\n selector: 'c8y-asset-selector',\n templateUrl: './asset-selector.component.html'\n})\nexport class AssetSelectorComponent implements OnInit {\n /**\n * An array of predefined nodes.\n */\n @Input() selected: IManagedObject[] = [];\n /**\n * Emits if one item was selected (all currently selected nodes).\n */\n @Output() onChange = new EventEmitter<IManagedObject[]>();\n /**\n * @ignore\n */\n rootNode: GroupNode;\n\n /**\n * @ignore only DI\n */\n constructor(private groupNodeService: GroupNodeService) {}\n\n /**\n * @ignore\n */\n ngOnInit(): void {\n this.rootNode = this.groupNodeService.createGroupNode({ root: true });\n }\n\n /**\n * Adds an managed object to the selected array and emits the change.\n * @param selectedMo The selected asset.\n */\n select(selectedMo: IManagedObject) {\n const index = this.getIndexOfSelected(this.selected, selectedMo);\n if (index === -1) {\n this.selected.push(selectedMo);\n }\n this.onChange.emit(this.selected);\n }\n\n /**\n * Removes a managed object from the selected array and emits the change.\n * @param selectedMo The selected asset.\n */\n deselect(selectedMo: IManagedObject) {\n const index = this.getIndexOfSelected(this.selected, selectedMo);\n if (index > -1) {\n this.selected.splice(index, 1);\n }\n this.onChange.emit(this.selected);\n }\n\n getIndexOfSelected(selected: Array<Partial<IManagedObject>>, selectedMo: IManagedObject) {\n return selected.findIndex(mo => mo.id === selectedMo.id);\n }\n}\n","import { Component, Input, OnInit, ChangeDetectorRef } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { GroupNode } from './group-node';\nimport { Subject } from 'rxjs';\nimport { takeUntil, filter } from 'rxjs/operators';\nimport { AssetSelectorComponent } from './asset-selector.component';\nimport { IManagedObject } from '@c8y/client';\nimport { Action } from '../action.enum';\n\n@Component({\n selector: 'c8y-asset-selector-node',\n templateUrl: './asset-selector-node.component.html'\n})\nexport class AssetSelectorNodeComponent implements OnInit {\n /**\n * The current node.\n */\n @Input() node: GroupNode;\n /**\n * All preselected items\n */\n @Input() preselected: Array<Partial<IManagedObject>> = [];\n /**\n * Should the path be shown\n */\n @Input() showPath: boolean = false;\n /**\n * The current path to the node\n */\n breadcrumb: string;\n /**\n * @ignore\n */\n level: number = 0;\n /**\n * The selection status of the node\n */\n checked: boolean = false;\n /**\n * @ignore\n */\n unsubscribe$ = new Subject<any>();\n\n /**\n * @ignore\n */\n get expandTitle() {\n return !this.node.open ? gettext('Expand') : gettext('Collapse');\n }\n\n /**\n * @ignore only di\n */\n constructor(\n private translateService: TranslateService,\n private cd: ChangeDetectorRef,\n private parentNode: AssetSelectorComponent\n ) {}\n\n /**\n * @ignore\n */\n async ngOnInit() {\n this.breadcrumb = this.node.label;\n this.setupBreadcrumbsAndLevel(this.node);\n\n if (this.node instanceof GroupNode) {\n this.node.hookEvents();\n }\n\n // open on startup\n if (this.node.root) {\n this.click();\n }\n\n if (this.node.events) {\n this.node.events\n .pipe(\n takeUntil(this.unsubscribe$),\n filter((a: Action) => a === Action.LOADING_DONE)\n )\n .subscribe(() => {\n this.cd.markForCheck();\n });\n }\n\n this.checked = this.isPreselected();\n }\n\n /**\n * Opens a node.\n */\n click() {\n this.node.open = !this.node.open;\n this.node.click({ open: this.node.open });\n }\n\n /**\n * TODO: Only level used. Breadcrumbs needs to be implemented.\n */\n setupBreadcrumbsAndLevel(node: GroupNode) {\n if (node.parents && node.parents.length) {\n const parent = node.parents[0] as GroupNode;\n this.breadcrumb = this.translateService.instant(parent.label) + ' > ' + this.breadcrumb;\n this.level++;\n\n this.setupBreadcrumbsAndLevel(parent);\n }\n }\n\n /**\n * Selects the node and emits a change on the parent component.\n * @param node The node to select.\n */\n selected(node: GroupNode) {\n this.checked = !this.checked;\n this.updateSelection(node.mo);\n }\n\n /**\n * @ignore\n */\n ngOnDestroy(): void {\n this.unsubscribe$.next(true);\n this.unsubscribe$.complete();\n }\n\n private isPreselected() {\n if (this.node.root || !this.node.mo) {\n return false;\n }\n return this.parentNode.getIndexOfSelected(this.preselected, this.node.mo) > -1;\n }\n\n private updateSelection(selectedMo: IManagedObject) {\n if (this.checked) {\n this.parentNode.select(selectedMo);\n return;\n }\n this.parentNode.deselect(selectedMo);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@c8y/ngx-components';\nimport { CollapseModule } from 'ngx-bootstrap/collapse';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { GroupNodeService } from './group-node.service';\n\nimport { AssetSelectorNodeComponent } from './asset-selector-node.component';\nimport { AssetSelectorComponent } from './asset-selector.component';\n\n@NgModule({\n imports: [CommonModule, CollapseModule, BsDropdownModule ],\n exports: [AssetSelectorNodeComponent, AssetSelectorComponent],\n providers: [GroupNodeService],\n declarations: [AssetSelectorNodeComponent, AssetSelectorComponent]\n})\nexport class AssetSelectorModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { __awaiter } from 'tslib';
|
|
2
|
+
import { Component, Injectable, NgModule } from '@angular/core';
|
|
3
|
+
import { ActivatedRoute } from '@angular/router';
|
|
4
|
+
import { ManagedObjectRealtimeService, ViewContext, gettext, CoreModule, HOOK_ONCE_ROUTE } from '@c8y/ngx-components';
|
|
5
|
+
import { DeviceGridModule } from '@c8y/ngx-components/device-grid';
|
|
6
|
+
import { PopoverModule } from 'ngx-bootstrap/popover';
|
|
7
|
+
import { InventoryService } from '@c8y/client';
|
|
8
|
+
|
|
9
|
+
class ChildDevicesComponent {
|
|
10
|
+
constructor(route) {
|
|
11
|
+
this.route = route;
|
|
12
|
+
}
|
|
13
|
+
ngOnInit() {
|
|
14
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
15
|
+
yield this.getAllDevices();
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
getAllDevices() {
|
|
19
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
20
|
+
this.id = this.route.snapshot.parent.data.contextData;
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
ChildDevicesComponent.decorators = [
|
|
25
|
+
{ type: Component, args: [{
|
|
26
|
+
selector: 'c8y-child-devices',
|
|
27
|
+
template: "<c8y-device-grid\n [title]=\"'Child Devices' | translate\"\n class=\"flex-grow col-xs-12 no-gutter\"\n [childDeviceGrid]=\"true\"\n [parentDeviceId]=\"id\"\n>\n <div class=\"c8y-empty-state\">\n <h1 c8yIcon=\"search\"></h1>\n <div>\n <p>\n <strong>{{ 'No matching devices.' | translate }}</strong>\n </p>\n <small>{{ 'Refine your search terms' | translate }}</small>\n </div>\n </div>\n</c8y-device-grid>\n",
|
|
28
|
+
providers: [ManagedObjectRealtimeService]
|
|
29
|
+
},] }
|
|
30
|
+
];
|
|
31
|
+
ChildDevicesComponent.ctorParameters = () => [
|
|
32
|
+
{ type: ActivatedRoute }
|
|
33
|
+
];
|
|
34
|
+
|
|
35
|
+
class ChildDevicesTabGuard {
|
|
36
|
+
constructor(inventory) {
|
|
37
|
+
this.inventory = inventory;
|
|
38
|
+
}
|
|
39
|
+
canActivate(route) {
|
|
40
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
41
|
+
const contextData = route.data.contextData;
|
|
42
|
+
const filter = {
|
|
43
|
+
pageSize: 1
|
|
44
|
+
};
|
|
45
|
+
if (!contextData) {
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
const device = yield this.inventory.childDevicesList(contextData.id, filter);
|
|
49
|
+
const hasChildren = device.data.length;
|
|
50
|
+
const isVendme = route.data.contextData.type === 'com_nsn_startups_vendme_VendingMachine';
|
|
51
|
+
return hasChildren && !isVendme;
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
ChildDevicesTabGuard.decorators = [
|
|
56
|
+
{ type: Injectable }
|
|
57
|
+
];
|
|
58
|
+
ChildDevicesTabGuard.ctorParameters = () => [
|
|
59
|
+
{ type: InventoryService }
|
|
60
|
+
];
|
|
61
|
+
|
|
62
|
+
const ɵ0 = [
|
|
63
|
+
{
|
|
64
|
+
context: ViewContext.Device,
|
|
65
|
+
path: 'child-devices',
|
|
66
|
+
priority: 1000,
|
|
67
|
+
icon: 'code-fork',
|
|
68
|
+
label: gettext('Child devices'),
|
|
69
|
+
component: ChildDevicesComponent,
|
|
70
|
+
canActivate: [ChildDevicesTabGuard]
|
|
71
|
+
}
|
|
72
|
+
];
|
|
73
|
+
class ChildDevicesModule {
|
|
74
|
+
}
|
|
75
|
+
ChildDevicesModule.decorators = [
|
|
76
|
+
{ type: NgModule, args: [{
|
|
77
|
+
declarations: [ChildDevicesComponent],
|
|
78
|
+
imports: [CoreModule, DeviceGridModule, PopoverModule],
|
|
79
|
+
entryComponents: [ChildDevicesComponent],
|
|
80
|
+
providers: [
|
|
81
|
+
ChildDevicesTabGuard,
|
|
82
|
+
{
|
|
83
|
+
provide: HOOK_ONCE_ROUTE,
|
|
84
|
+
useValue: ɵ0,
|
|
85
|
+
multi: true
|
|
86
|
+
}
|
|
87
|
+
]
|
|
88
|
+
},] }
|
|
89
|
+
];
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Generated bundle index. Do not edit.
|
|
93
|
+
*/
|
|
94
|
+
|
|
95
|
+
export { ChildDevicesComponent, ChildDevicesModule, ɵ0, ChildDevicesTabGuard as ɵa };
|
|
96
|
+
//# sourceMappingURL=c8y-ngx-components-child-devices.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"c8y-ngx-components-child-devices.js","sources":["../../child-devices/child-devices.component.ts","../../child-devices/child-devices.guard.ts","../../child-devices/child-devices.module.ts","../../child-devices/c8y-ngx-components-child-devices.ts"],"sourcesContent":["import { Component, OnInit, EventEmitter } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { IManagedObject } from '@c8y/client';\nimport { ManagedObjectRealtimeService } from '@c8y/ngx-components';\n\n@Component({\n selector: 'c8y-child-devices',\n templateUrl: './child-devices.component.html',\n providers: [ManagedObjectRealtimeService]\n})\nexport class ChildDevicesComponent implements OnInit {\n id: string;\n\n constructor(private route: ActivatedRoute) {}\n\n async ngOnInit() {\n await this.getAllDevices();\n }\n\n async getAllDevices() {\n this.id = this.route.snapshot.parent.data.contextData;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivate } from '@angular/router';\nimport { InventoryService } from '@c8y/client';\n\n@Injectable()\nexport class ChildDevicesTabGuard implements CanActivate {\n constructor(private inventory: InventoryService) {}\n\n async canActivate(route: ActivatedRouteSnapshot): Promise<boolean> {\n const contextData = route.data.contextData;\n const filter: object = {\n pageSize: 1\n };\n if (!contextData) {\n return true;\n }\n const device = await this.inventory.childDevicesList(contextData.id, filter);\n const hasChildren = device.data.length;\n const isVendme = route.data.contextData.type === 'com_nsn_startups_vendme_VendingMachine';\n return hasChildren && !isVendme;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CoreModule, gettext, HOOK_ONCE_ROUTE, ViewContext } from '@c8y/ngx-components';\nimport { DeviceGridModule } from '@c8y/ngx-components/device-grid';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { ChildDevicesComponent } from './child-devices.component';\nimport { ChildDevicesTabGuard } from './child-devices.guard';\n\n@NgModule({\n declarations: [ChildDevicesComponent],\n imports: [CoreModule, DeviceGridModule, PopoverModule],\n entryComponents: [ChildDevicesComponent],\n providers: [\n ChildDevicesTabGuard,\n {\n provide: HOOK_ONCE_ROUTE,\n useValue: [\n {\n context: ViewContext.Device,\n path: 'child-devices',\n priority: 1000,\n icon: 'code-fork',\n label: gettext('Child devices'),\n component: ChildDevicesComponent,\n canActivate: [ChildDevicesTabGuard]\n }\n ],\n multi: true\n }\n ]\n})\nexport class ChildDevicesModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n\nexport {ChildDevicesTabGuard as ɵa} from './child-devices.guard';"],"names":[],"mappings":";;;;;;;;MAUa,qBAAqB;IAGhC,YAAoB,KAAqB;QAArB,UAAK,GAAL,KAAK,CAAgB;KAAI;IAEvC,QAAQ;;YACZ,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;SAC5B;KAAA;IAEK,aAAa;;YACjB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;SACvD;KAAA;;;YAhBF,SAAS,SAAC;gBACT,QAAQ,EAAE,mBAAmB;gBAC7B,ucAA6C;gBAC7C,SAAS,EAAE,CAAC,4BAA4B,CAAC;aAC1C;;;YARQ,cAAc;;;MCIV,oBAAoB;IAC/B,YAAoB,SAA2B;QAA3B,cAAS,GAAT,SAAS,CAAkB;KAAI;IAE7C,WAAW,CAAC,KAA6B;;YAC7C,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;YAC3C,MAAM,MAAM,GAAW;gBACrB,QAAQ,EAAE,CAAC;aACZ,CAAC;YACF,IAAI,CAAC,WAAW,EAAE;gBAChB,OAAO,IAAI,CAAC;aACb;YACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YAC7E,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;YACvC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,wCAAwC,CAAC;YAC1F,OAAO,WAAW,IAAI,CAAC,QAAQ,CAAC;SACjC;KAAA;;;YAhBF,UAAU;;;YAFF,gBAAgB;;;WCaT;IACR;QACE,OAAO,EAAE,WAAW,CAAC,MAAM;QAC3B,IAAI,EAAE,eAAe;QACrB,QAAQ,EAAE,IAAI;QACd,IAAI,EAAE,WAAW;QACjB,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC;QAC/B,SAAS,EAAE,qBAAqB;QAChC,WAAW,EAAE,CAAC,oBAAoB,CAAC;KACpC;;MAMI,kBAAkB;;;YAvB9B,QAAQ,SAAC;gBACR,YAAY,EAAE,CAAC,qBAAqB,CAAC;gBACrC,OAAO,EAAE,CAAC,UAAU,EAAE,gBAAgB,EAAE,aAAa,CAAC;gBACtD,eAAe,EAAE,CAAC,qBAAqB,CAAC;gBACxC,SAAS,EAAE;oBACT,oBAAoB;oBACpB;wBACE,OAAO,EAAE,eAAe;wBACxB,QAAQ,IAUP;wBACD,KAAK,EAAE,IAAI;qBACZ;iBACF;aACF;;;AC7BD;;;;;;"}
|