@c8y/ngx-components 1011.0.28 → 1011.0.31
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/bundles/c8y-ngx-components-sub-assets.umd.js +11 -37
- package/bundles/c8y-ngx-components-sub-assets.umd.js.map +1 -1
- package/bundles/c8y-ngx-components-sub-assets.umd.min.js +2 -2
- package/bundles/c8y-ngx-components-sub-assets.umd.min.js.map +1 -1
- package/esm2015/sub-assets/add-group/add-group.component.js +1 -2
- package/esm2015/sub-assets/sub-assets-grid.component.js +8 -32
- package/esm2015/sub-assets/sub-assets.service.js +1 -3
- package/fesm2015/c8y-ngx-components-sub-assets.js +7 -33
- package/fesm2015/c8y-ngx-components-sub-assets.js.map +1 -1
- package/locales/locales.pot +3 -0
- package/package.json +2 -2
- package/sub-assets/c8y-ngx-components-sub-assets.metadata.json +1 -1
- package/sub-assets/sub-assets-grid.component.d.ts +3 -3
- package/sub-assets/sub-assets.service.d.ts +0 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../node_modules/tslib/tslib.es6.js","../../sub-assets/columns/asset-type.cell-renderer.component.ts","../../sub-assets/columns/asset-type-grid-column.ts","../../sub-assets/sub-assets.service.ts","../../sub-assets/group-info.component.ts","../../sub-assets/sub-assets.component.ts","../../sub-assets/delete-assets-modal/delete-assets-modal.component.ts","../../sub-assets/unassign-assets-modal/unassign-modal.component.ts","../../sub-assets/sub-assets-grid.component.ts","../../sub-assets/add-group/add-group.service.ts","../../sub-assets/add-group/add-group.component.ts","../../sub-assets/add-group/add-group.module.ts","../../sub-assets/groups.component.ts","../../sub-assets/assign-devices/assign-devices.component.ts","../../sub-assets/assign-devices/assign-child-devices.component.ts","../../sub-assets/sub-assets.module.ts"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__extends","__","this","constructor","prototype","create","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","__generator","body","f","y","t","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","n","v","op","TypeError","call","pop","length","push","__read","o","m","r","i","ar","error","AssetTypeCellRendererComponent","context","deviceGroupService","ngOnInit","isAnyGroup","item","isDevice","groupIcon","icon","iconTitle","getIconTitle","gettext","Component","args","template","CellRendererContext","DeviceGroupService","AssetTypeGridColumn","initialColumnConfig","_this","_super","name","header","dataType","cellRendererComponent","sortable","sortingConfig","pathSortingConfigs","path","BaseDeviceGridColumn","SubAssetsService","translateService","inventoryService","appState","user","assetNodeService","smartGroupsService","smartRulesService","alertService","permissionsService","modal","uiOnlyCountersUpdate","BehaviorSubject","GRID_CONFIG_DEFAULT_STORAGE_KEY","IS_DEVICE_GROUP_FRAGMENT","IS_DYNAMIC_GROUP_FRAGMENT","getDefaultColumns","filterable","sortOrder","NameDeviceGridColumn","ModelDeviceGridColumn","SerialNumberDeviceGridColumn","visible","RegistrationDateDeviceGridColumn","SystemIdDeviceGridColumn","ImeiDeviceGridColumn","AlarmsDeviceGridColumn","getDefaultPagination","pageSize","getConfig","pagination","currentPage","getDefaultActionControls","unassignAsset","asset","parentRef","assetId","id","parentId","childAssetsRemove","_a","alertMessage","instant","success","danger","deactivateSmartrulesForAsset","deleteAsset","params","isSmartGroup","deleteGroup","deleteDevice","isSmartGroupV2","shouldShowWithDeviceUserCheckbox","owner","isRootDevice","c8y_IsDevice","hasDeviceUserAsOwner","isDeviceUser","Boolean","getDefaultBulkActionControls","getData","columns","parentReference","baseQuery","query","buildCombinedRootQueryFilter","getRootNodes","assign","filters","getAssetsFilters","withParents","isGroup","getGroupItems","isDynamicGroup","getDynamicGroupItems","c8y_DeviceQueryString","getDeviceChildren","getCount","defaultFilters","withChildren","getAssetsStatistics","getTotal","queryFilter","rootQueryFilter","queriesUtil","addAndFilter","buildQuery","withTotalPages","canEditGroup","group","canEdit","canCreateGroup","currentUser","hasAnyRole","canAssignDevice","canEditSmartGroup","canDeleteSmartGroup","isUsingInventoryRoles","paging","totalPages","userQuery","getQueryObj","queryPart","addOrderbys","__orderby","fullQuery","__filter","cascade","delete","_b","device","withDeviceUser","deleteDeviceWithUser","listByContext","rules","data","upateSmartrulesPromises","map","rule","bulkDeactivateEnabledSources","all","userId","match","DEFAULT_PAGE_SIZE","DeviceGridService","Injectable","TranslateService","InventoryService","AppStateService","UserService","AssetNodeService","SmartGroupsService","SmartRulesService","AlertService","Permissions","ModalService","GroupInfoComponent","inventory","subAssetsService","translate","modalService","onGroupChange","EventEmitter","filterMsg","canEditMsg","GROUP_UPDATED_MSG","_c","smartGroupFilter","setHintMsg","update","partialGroup","updateSmartGroup","updateGroup","addServerFailure","error_1","filterMsgTranslated","canEditMsgTranslated","filterHintMsg","updatedGroup","setGroup","modalBody","title","confirm","Status","WARNING","ok","cancel","isQueryExecutable","emit","filter","q","list","error_2","selector","Input","Output","SubAssetsComponent","route","toggle","showAddGroup","showAssignDevices","showGroupInfo","showAssignChildDevices","refresh","shouldDisableAddGroup","shouldDisableAssignDevices","dataSub","parent","subscribe","contextData","currentGroupId","state$","state","app","displayOptions","striped","bordered","gridHeader","groupChange","ngOnDestroy","unsubscribe","ActivatedRoute","DeleteAssetsModalComponent","showWithCascadeCheckbox","showWithDeviceUserCheckbox","closeSubject","Subject","labels","status","DANGER","config","message","ngAfterViewInit","modalRef","onClose","onDismiss","complete","ViewChild","static","UnassignModalComponent","SubAssetsGridComponent","subAssetsGridService","bsModalService","emptyStateText","loadingItemsLabel","selectable","onColumnsChange","itemsSelect","bulkActionControls","serverSideDataCallback","onDataSourceModifier","bind","defineProperty","_columns","getUserConfiguredColumns","actionControls","parentGroup","isRootGroup","undefined","forEach","column","setActionControls","isSmartGroupsV2MicroserviceInstalled","isMicroserviceInstalled","deleteAction","type","callback","onDeleteAsset","showIf","unassignAction","text","onUnassignAsset","initialState","show","content","ngOnChanges","changes","firstChange","dataGrid","reload","trackByName","_index","dataSourceModifier","promises","action","counters","dataResponse","size","filteredSize","res","configChange","saveConfig","currentAllItemsCount","filteringLabelsParams","allItemsCount","currentFilteredItemsCount","filteredItemsCount","BsModalService","DataGridComponent","AddGroupService","GROUP_FRAGMENT_TYPE","createGroupAndAssignDevices","groupForm","groupContextId","selectedDevices","description","newGroupMO","getGroupMO","childAssetsCreate","assignDevices","getGroupType","c8y_Notes","GroupFragment","subGroupType","groupType","moId","childAssetsAdd","AddGroupComponent","deviceGridService","fb","addGroupService","alert","onDeviceQueryStringChange","onCancel","pendingStatus","selected","ITEMS_SELECT_LIMIT","btnLabels","onEnterKeyDown","event","isGroupDetailsStep","isAssignDeviceStep","createGroup","stepper","onEscapeKeyDown","formGroupStepOne","Validators","required","subscription","resetStepper","nameInput","nameInputRef","nativeElement","setFocusOnNameInput","onSelected","selectedDevicesIDs","reset","selectedIndex","focus","select","FormBuilder","C8yStepper","HostListener","component","NgModule","declarations","imports","CoreModule","DeviceGridModule","FormsModule","ReactiveFormsModule","entryComponents","exports","providers","provide","HOOK_ONCE_ROUTE","useValue","ɵ0$1","multi","GroupsComponent","permissions","hasRole","AssignDevicesComponent","onShowChildDevices","selectedDevice","isSelectable","setNotIncludedInGroupQuery","notIncludedInGroupQuery","__not","__bygroupid","showChildren","selectChildrenAction","selectChildren","childDevices","references","childAssetsBulkAdd","AssignChildDevicesComponent","ViewContext","Group","priority","AddGroupModule","PopoverModule","ɵ0"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import { Component, OnInit } from '@angular/core';\nimport { CellRendererContext, gettext } from '@c8y/ngx-components';\nimport { DeviceGroupService } from '@c8y/ngx-components/assets-navigator';\n\n@Component({\n templateUrl: './asset-type.cell-renderer.component.html'\n})\nexport class AssetTypeCellRendererComponent implements OnInit {\n groupIcon: string;\n isAnyGroup: boolean;\n isDevice: boolean;\n iconTitle: string;\n constructor(\n public context: CellRendererContext,\n private deviceGroupService: DeviceGroupService\n ) {}\n\n ngOnInit() {\n this.isAnyGroup = this.deviceGroupService.isAnyGroup(this.context.item);\n this.isDevice = this.deviceGroupService.isDevice(this.context.item);\n this.groupIcon = this.deviceGroupService.icon(this.context.item);\n this.iconTitle = this.getIconTitle(this.groupIcon);\n }\n\n private getIconTitle(icon: string) {\n switch (icon) {\n case 'c8y-group':\n return gettext('Group');\n case 'c8y-group-smart':\n return gettext('Smart group');\n case 'c8y-group-remote-inactive':\n return 'Inactive remote group';\n case 'c8y-group-remote':\n return gettext('Remote group');\n default:\n return gettext('Child device');\n }\n }\n}\n","import { gettext, ColumnDataType, ColumnConfig } from '@c8y/ngx-components';\nimport { AssetTypeCellRendererComponent } from './asset-type.cell-renderer.component';\nimport { BaseDeviceGridColumn } from '@c8y/ngx-components/device-grid';\n\nexport class AssetTypeGridColumn extends BaseDeviceGridColumn {\n constructor(initialColumnConfig?: ColumnConfig) {\n super(initialColumnConfig);\n this.name = 'type';\n this.header = gettext('Type');\n this.dataType = ColumnDataType.Icon;\n this.cellRendererComponent = AssetTypeCellRendererComponent;\n this.sortable = true;\n this.sortingConfig = {\n pathSortingConfigs: [{ path: `c8y_IsDeviceGroup` }]\n };\n }\n}\n","import { Injectable } from '@angular/core';\nimport {\n IManagedObject,\n InventoryService,\n IRule,\n QueriesUtil,\n SmartGroupsService,\n SmartRulesService,\n UserService\n} from '@c8y/client';\nimport {\n ActionControl,\n AlertService,\n AppStateService,\n BulkActionControl,\n gettext,\n ModalService,\n Pagination,\n Permissions\n} from '@c8y/ngx-components';\nimport { AssetNodeService, DeviceGroupService } from '@c8y/ngx-components/assets-navigator';\nimport {\n AlarmsDeviceGridColumn,\n DeviceGridColumn,\n DeviceGridService,\n ImeiDeviceGridColumn,\n ModelDeviceGridColumn,\n NameDeviceGridColumn,\n RegistrationDateDeviceGridColumn,\n SerialNumberDeviceGridColumn,\n SystemIdDeviceGridColumn\n} from '@c8y/ngx-components/device-grid';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { AssetTypeGridColumn } from './columns/asset-type-grid-column';\n\n@Injectable()\nexport class SubAssetsService extends DeviceGridService {\n queriesUtil: QueriesUtil;\n uiOnlyCountersUpdate = new BehaviorSubject(null);\n protected GRID_CONFIG_DEFAULT_STORAGE_KEY = 'sub-assets-grid-config';\n private IS_DEVICE_GROUP_FRAGMENT = 'c8y_IsDeviceGroup';\n private IS_DYNAMIC_GROUP_FRAGMENT = 'c8y_IsDynamicGroup';\n\n constructor(\n protected translateService: TranslateService,\n protected inventoryService: InventoryService,\n protected appState: AppStateService,\n protected user: UserService,\n protected assetNodeService: AssetNodeService,\n protected deviceGroupService: DeviceGroupService,\n protected smartGroupsService: SmartGroupsService,\n protected smartRulesService: SmartRulesService,\n protected alertService: AlertService,\n protected permissionsService: Permissions,\n protected modal: ModalService\n ) {\n super(inventoryService, translateService, alertService, modal);\n }\n\n getDefaultColumns(filterable: boolean = true, sortable: boolean = true): DeviceGridColumn[] {\n const defaultColumns = [\n new AssetTypeGridColumn({ sortOrder: 'desc' }),\n new NameDeviceGridColumn({ sortOrder: 'asc' }),\n new ModelDeviceGridColumn(),\n new SerialNumberDeviceGridColumn({ visible: false }),\n new RegistrationDateDeviceGridColumn({ visible: false }),\n new SystemIdDeviceGridColumn({ visible: false }),\n new ImeiDeviceGridColumn({ visible: false }),\n new AlarmsDeviceGridColumn()\n ];\n return defaultColumns;\n }\n\n getDefaultPagination(): Pagination {\n const { pagination } = this.getConfig();\n return {\n pageSize: pagination.pageSize,\n currentPage: 1\n };\n }\n\n getDefaultActionControls(): ActionControl[] {\n return [];\n }\n\n async unassignAsset(asset: IManagedObject, parentRef: IManagedObject) {\n const { id: assetId } = asset;\n const { id: parentId } = parentRef;\n\n if (this.isDevice(asset)) {\n try {\n await this.inventoryService.childAssetsRemove(assetId, parentId);\n const alertMessage = this.translateService.instant(gettext('Asset unassigned.'));\n this.alertService.success(alertMessage);\n } catch (error) {\n const alertMessage = this.translateService.instant(gettext('Could not unassign asset.'));\n this.alertService.danger(alertMessage);\n }\n await this.deactivateSmartrulesForAsset(asset, parentRef);\n }\n }\n\n isDevice(asset: IManagedObject): boolean {\n return (\n !asset.hasOwnProperty(this.IS_DEVICE_GROUP_FRAGMENT) &&\n !asset.hasOwnProperty(this.IS_DYNAMIC_GROUP_FRAGMENT)\n );\n }\n\n async deleteAsset(asset: IManagedObject, parentRef: IManagedObject, params = {}) {\n const isGroup =\n asset.hasOwnProperty(this.IS_DEVICE_GROUP_FRAGMENT) ||\n this.smartGroupsService.isSmartGroup(asset);\n\n if (isGroup) {\n await this.deleteGroup(asset, params);\n } else {\n await this.deleteDevice(asset, params);\n }\n\n if (\n parentRef &&\n !this.smartGroupsService.isSmartGroup(asset) &&\n !this.smartGroupsService.isSmartGroupV2(asset)\n ) {\n await this.deactivateSmartrulesForAsset(asset, parentRef);\n }\n }\n\n shouldShowWithDeviceUserCheckbox(asset: IManagedObject): boolean {\n const { owner, c8y_IsDevice: isRootDevice } = asset;\n const hasDeviceUserAsOwner = asset.owner && this.isDeviceUser(owner);\n\n return Boolean(isRootDevice && hasDeviceUserAsOwner);\n }\n\n getDefaultBulkActionControls(): BulkActionControl[] {\n return [];\n }\n\n async getData(\n columns: DeviceGridColumn[],\n pagination: Pagination,\n parentReference: IManagedObject,\n baseQuery: any = {}\n ) {\n const isRoot = !parentReference;\n if (isRoot) {\n const query = this.buildCombinedRootQueryFilter(columns, pagination);\n return this.assetNodeService.getRootNodes({ ...pagination, query });\n }\n const filters = {\n ...this.getAssetsFilters(columns, pagination, baseQuery),\n withParents: false\n };\n if (this.deviceGroupService.isGroup(parentReference)) {\n return this.assetNodeService.getGroupItems(parentReference.id, filters);\n }\n if (this.deviceGroupService.isDynamicGroup(parentReference)) {\n return this.assetNodeService.getDynamicGroupItems(\n parentReference.c8y_DeviceQueryString,\n filters\n );\n }\n if (this.deviceGroupService.isDevice(parentReference)) {\n return this.assetNodeService.getDeviceChildren(parentReference.id, filters);\n }\n }\n\n async getCount(\n columns: DeviceGridColumn[],\n pagination: Pagination,\n parentReference: IManagedObject,\n baseQuery: any = {}\n ): Promise<number> {\n const defaultFilters = {\n pageSize: 1,\n withChildren: false\n };\n const filters = !parentReference\n ? {\n query: this.buildCombinedRootQueryFilter(columns, pagination),\n ...defaultFilters\n }\n : {\n ...this.getAssetsFilters(columns, pagination, baseQuery),\n ...defaultFilters\n };\n return this.getAssetsStatistics(parentReference, filters);\n }\n\n getTotal(parentReference: IManagedObject, baseQuery: any = {}): Promise<number> {\n const queryFilter = this.assetNodeService.rootQueryFilter();\n const query = !parentReference\n ? this.queriesUtil.addAndFilter(queryFilter, baseQuery)\n : baseQuery;\n const filters = {\n query: this.queriesUtil.buildQuery(query),\n withChildren: false,\n withTotalPages: true,\n pageSize: 1\n };\n return this.getAssetsStatistics(parentReference, filters);\n }\n\n async canEditGroup(group: IManagedObject): Promise<boolean> {\n return await this.permissionsService.canEdit(['ROLE_INVENTORY_ADMIN'], group);\n }\n\n canCreateGroup(): boolean {\n const currentUser = this.appState.currentUser.value;\n const hasAdminRole = this.user.hasAnyRole(currentUser, [\n 'ROLE_INVENTORY_ADMIN',\n 'ROLE_INVENTORY_CREATE'\n ]);\n return hasAdminRole;\n }\n\n async canAssignDevice(group: IManagedObject): Promise<boolean> {\n return await this.permissionsService.canEdit(['ROLE_INVENTORY_ADMIN'], group);\n }\n\n canEditSmartGroup(): boolean {\n const SMART_GROUPS_ROLES_EDIT = ['ROLE_SMARTGROUP_UPDATE', 'ROLE_SMARTGROUP_ADMIN'];\n return this.permissionsService.hasAnyRole(SMART_GROUPS_ROLES_EDIT);\n }\n\n canDeleteSmartGroup(): boolean {\n const SMART_GROUPS_ROLES_DELETE = ['ROLE_SMARTGROUP_ADMIN', 'ROLE_INVENTORY_ADMIN'];\n return this.permissionsService.hasAnyRole(SMART_GROUPS_ROLES_DELETE);\n }\n\n isSmartGroup(group: IManagedObject): boolean {\n return (\n this.smartGroupsService.isSmartGroup(group) || this.smartGroupsService.isSmartGroupV2(group)\n );\n }\n\n isUsingInventoryRoles() {\n const currentUser = this.appState.currentUser.value;\n const hasAnyInventoryRole = this.user.hasAnyRole(currentUser, [\n 'ROLE_INVENTORY_ADMIN',\n 'ROLE_INVENTORY_READ',\n 'ROLE_INVENTORY_CREATE'\n ]);\n return !hasAnyInventoryRole;\n }\n\n protected async getAssetsStatistics(\n parentReference: IManagedObject,\n filters: object\n ): Promise<number> {\n const isRoot = !parentReference;\n if (isRoot) {\n return (await this.assetNodeService.getRootNodes(filters)).paging.totalPages;\n }\n if (this.deviceGroupService.isGroup(parentReference)) {\n return (await this.assetNodeService.getGroupItems(parentReference.id, filters)).paging\n .totalPages;\n }\n if (this.deviceGroupService.isDynamicGroup(parentReference)) {\n return (await this.assetNodeService.getDynamicGroupItems(\n parentReference.c8y_DeviceQueryString,\n filters\n )).paging.totalPages;\n }\n if (this.deviceGroupService.isDevice(parentReference)) {\n return (await this.assetNodeService.getDeviceChildren(parentReference.id, filters)).paging\n .totalPages;\n }\n }\n\n protected buildCombinedRootQueryFilter(columns, pagination) {\n const queryFilter = this.assetNodeService.rootQueryFilter();\n const userQuery = this.getQueryObj(columns, pagination);\n\n const queryPart = this.queriesUtil.addOrderbys(queryFilter, userQuery.__orderby, 'append');\n const fullQuery = this.queriesUtil.addAndFilter(queryPart, userQuery.__filter);\n return this.queriesUtil.buildQuery(fullQuery);\n }\n\n private async deleteGroup(group: IManagedObject, params: any = {}) {\n const { cascade } = params;\n\n try {\n this.smartGroupsService.isSmartGroup(group) || this.smartGroupsService.isSmartGroupV2(group)\n ? await this.smartGroupsService.delete(group, { cascade })\n : await this.inventoryService.delete(group, { cascade });\n\n const alertMessage = this.translateService.instant(gettext('Asset deleted.'));\n this.alertService.success(alertMessage);\n } catch (error) {\n const alertMessage = this.translateService.instant(gettext('Could not delete asset.'));\n this.alertService.danger(alertMessage);\n }\n }\n\n private async deleteDevice(device: IManagedObject, params: any = {}) {\n const { cascade, withDeviceUser } = params;\n try {\n const { owner } = device;\n const shouldRemoveOwner = withDeviceUser && owner && this.isDeviceUser(owner);\n\n shouldRemoveOwner\n ? await this.deleteDeviceWithUser(device, cascade)\n : await this.inventoryService.delete(device, { cascade });\n\n const alertMessage = this.translateService.instant(gettext('Asset deleted.'));\n this.alertService.success(alertMessage);\n } catch (error) {\n const alertMessage = this.translateService.instant(gettext('Could not delete asset.'));\n this.alertService.danger(alertMessage);\n }\n }\n\n private async deactivateSmartrulesForAsset(asset: IManagedObject, parentRef: IManagedObject) {\n const { id: assetId } = asset;\n const { id: parentId } = parentRef;\n const rules: IRule[] = (await this.smartRulesService.listByContext(parentId)).data;\n\n const upateSmartrulesPromises = rules.map(rule =>\n this.smartRulesService.bulkDeactivateEnabledSources(rule, [assetId])\n );\n\n try {\n await Promise.all(upateSmartrulesPromises);\n } catch (error) {\n const alertMessage = this.translateService.instant(\n gettext('Could not deactivate smart rules.')\n );\n this.alertService.danger(alertMessage);\n }\n }\n\n private isDeviceUser(userId: string) {\n return userId.match(/^device_/);\n }\n\n private async deleteDeviceWithUser(device: IManagedObject, cascade: boolean) {\n const params = { cascade, withDeviceUser: true };\n try {\n return await this.inventoryService.delete(device, params);\n } catch (error) {\n return await this.inventoryService.delete(device, { cascade });\n }\n }\n\n private getAssetsFilters(columns: DeviceGridColumn[], pagination: Pagination, baseQuery) {\n const query = this.queriesUtil.addAndFilter(this.getQueryObj(columns), baseQuery);\n return {\n query: this.queriesUtil.buildQuery(query),\n pageSize: pagination.pageSize || this.DEFAULT_PAGE_SIZE,\n currentPage: pagination.currentPage,\n withTotalPages: true\n };\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { IManagedObject, InventoryService, SmartGroupsService } from '@c8y/client';\nimport { AlertService, gettext, ModalService, Status } from '@c8y/ngx-components';\nimport { DeviceGroupService } from '@c8y/ngx-components/assets-navigator';\nimport { TranslateService } from '@ngx-translate/core';\nimport { SubAssetsService } from './sub-assets.service';\n\n@Component({\n selector: 'c8y-group-info',\n templateUrl: './group-info.component.html'\n})\nexport class GroupInfoComponent {\n @Input() group: IManagedObject;\n @Output() onGroupChange = new EventEmitter();\n canEdit: boolean;\n groupIcon: string;\n smartGroupFilter: string;\n filterHintMsg: string;\n\n private filterMsg = gettext(\n 'Smart groups are groups dynamically constructed based on filtering criteria.'\n );\n private canEditMsg = gettext('You can edit the filter here.');\n private readonly GROUP_UPDATED_MSG = gettext('Group updated.');\n constructor(\n private inventory: InventoryService,\n private subAssetsService: SubAssetsService,\n private deviceGroupService: DeviceGroupService,\n private smartGroupsService: SmartGroupsService,\n private alertService: AlertService,\n private translate: TranslateService,\n private modalService: ModalService\n ) {}\n\n async ngOnInit() {\n this.canEdit = this.smartGroupsService.isSmartGroupV2(this.group)\n ? this.subAssetsService.canEditSmartGroup()\n : await this.subAssetsService.canEditGroup(this.group);\n this.groupIcon = this.deviceGroupService.icon(this.group);\n this.smartGroupFilter = this.group.c8y_DeviceQueryString;\n\n this.setHintMsg();\n }\n\n isSmartGroup() {\n return this.subAssetsService.isSmartGroup(this.group);\n }\n\n async update(partialGroup: Partial<IManagedObject>) {\n try {\n const isSmartGroup: boolean = this.subAssetsService.isSmartGroup(this.group);\n isSmartGroup\n ? await this.updateSmartGroup(partialGroup)\n : await this.updateGroup(partialGroup);\n } catch (error) {\n this.alertService.addServerFailure(error);\n }\n }\n\n private setHintMsg() {\n const filterMsgTranslated = this.translate.instant(this.filterMsg);\n const canEditMsgTranslated = this.translate.instant(this.canEditMsg);\n this.filterHintMsg = this.canEdit\n ? `${filterMsgTranslated} ${canEditMsgTranslated}`\n : this.filterMsg;\n }\n\n private async updateGroup(partialGroup: Partial<IManagedObject>) {\n const { id } = this.group;\n const group: Partial<IManagedObject> = { id, ...partialGroup };\n\n const updatedGroup = (await this.inventory.update(group)).data;\n this.setGroup(updatedGroup);\n }\n\n private async updateSmartGroup(partialGroup: Partial<IManagedObject>) {\n const { id } = this.group;\n const { c8y_DeviceQueryString } = partialGroup;\n const group: Partial<IManagedObject> = { id, ...partialGroup };\n let updatedGroup: IManagedObject;\n\n if (!c8y_DeviceQueryString) {\n updatedGroup = (await this.smartGroupsService.update(group)).data;\n this.setGroup(updatedGroup);\n return;\n }\n\n try {\n const modalBody = gettext(\n 'You are about to change the smart group filter. Do you want to proceed?'\n );\n const title = gettext('Smart group filter');\n await this.modalService.confirm(title, modalBody, Status.WARNING, {\n ok: gettext('Save'),\n cancel: gettext('Cancel')\n });\n\n if (!(await this.isQueryExecutable(c8y_DeviceQueryString))) {\n return;\n }\n } catch (e) {\n return;\n }\n updatedGroup = (await this.smartGroupsService.update(group)).data;\n this.setGroup(updatedGroup);\n }\n\n private setGroup(group: IManagedObject) {\n this.onGroupChange.emit(group);\n this.alertService.success(this.GROUP_UPDATED_MSG);\n }\n\n private async isQueryExecutable(query: string): Promise<boolean> {\n try {\n const filter = { q: query };\n await this.inventory.list(filter);\n return true;\n } catch (error) {\n this.alertService.addServerFailure(error);\n return false;\n }\n }\n}\n","import { Component, EventEmitter, OnDestroy, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { IIdentified, IManagedObject } from '@c8y/client';\nimport { AppStateService, DisplayOptions } from '@c8y/ngx-components';\nimport { DeviceGroupService } from '@c8y/ngx-components/assets-navigator';\nimport { Subscription } from 'rxjs';\nimport { SubAssetsService } from './sub-assets.service';\n\n@Component({\n selector: 'c8y-sub-assets',\n templateUrl: './sub-assets.component.html'\n})\nexport class SubAssetsComponent implements OnInit, OnDestroy {\n currentGroupId: IIdentified;\n showChildrenForDevice: IManagedObject;\n title: string;\n toggle: boolean = false;\n showAddGroup: boolean = false;\n showAssignDevices: boolean = false;\n requestInProgress: boolean;\n group: IManagedObject;\n showGroupInfo: boolean = true;\n showAssignChildDevices: boolean = false;\n refresh: EventEmitter<any> = new EventEmitter();\n filterable: boolean = true;\n shouldDisableAddGroup: boolean = false;\n shouldDisableAssignDevices: boolean = false;\n displayOptions: DisplayOptions;\n private dataSub: Subscription;\n\n constructor(\n private route: ActivatedRoute,\n private appState: AppStateService,\n private deviceGroupService: DeviceGroupService,\n private subAssetsService: SubAssetsService\n ) {\n this.dataSub = this.route.parent.data.subscribe(({ contextData }) => {\n this.title = contextData.name;\n this.currentGroupId = contextData.id;\n this.group = contextData;\n this.filterable = !this.deviceGroupService.isDynamicGroup(contextData);\n });\n }\n\n async ngOnInit() {\n this.appState.state$.subscribe(state => {\n this.showGroupInfo = state.app.name === 'cockpit' || state.app.name === 'devicemanagement';\n });\n this.shouldDisableAddGroup = !this.subAssetsService.canCreateGroup();\n this.shouldDisableAssignDevices = await !this.subAssetsService.canAssignDevice(this.group);\n\n this.displayOptions = {\n striped: true,\n bordered: false,\n gridHeader: true,\n filter: !this.isSmartGroup()\n };\n }\n\n groupChange(group: IManagedObject): void {\n /**\n * Group is cached in the context-route guard. To avoid loading old data (when switching tabs) we need to update\n * this object in the cache.\n */\n Object.assign(this.group, group);\n this.title = group.name;\n this.refresh.emit();\n }\n\n isSmartGroup() {\n return this.subAssetsService.isSmartGroup(this.group);\n }\n\n ngOnDestroy(): void {\n if (this.dataSub) {\n this.dataSub.unsubscribe();\n }\n }\n}\n","import { Component, Input, ViewChild } from '@angular/core';\nimport { IManagedObject } from '@c8y/client';\nimport {\n ConfirmModalComponent,\n gettext,\n ModalLabels,\n Status,\n StatusType\n} from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Subject } from 'rxjs';\nimport { DeleteModalCheckboxes } from './delete-assets-modal.model';\n\n@Component({\n selector: 'c8y-delete-assets-modal',\n templateUrl: './delete-assets-modal.component.html'\n})\nexport class DeleteAssetsModalComponent {\n @Input() showWithCascadeCheckbox: boolean = true;\n @Input() showWithDeviceUserCheckbox: boolean = false;\n @Input() asset: IManagedObject;\n @ViewChild('modalRef', { static: false }) modalRef: ConfirmModalComponent;\n closeSubject: Subject<DeleteModalCheckboxes> = new Subject();\n labels: ModalLabels = { ok: gettext('Delete'), cancel: gettext('Cancel') };\n title = gettext('Delete asset');\n status: StatusType = Status.DANGER;\n config: DeleteModalCheckboxes = {\n cascade: false,\n withDeviceUser: false\n };\n message: string;\n\n constructor(private translateService: TranslateService) {}\n\n ngOnInit() {\n this.message = this.translateService.instant(\n gettext(\n 'You are about to delete asset: \"{{name}}\". This operation is irreversible. Do you want to proceed?'\n ),\n { name: this.asset.name }\n );\n }\n\n async ngAfterViewInit() {\n try {\n await this.modalRef.result;\n this.onClose();\n } catch (error) {\n this.onDismiss();\n }\n }\n\n onClose() {\n this.closeSubject.next(this.config);\n this.closeSubject.complete();\n }\n\n onDismiss() {\n this.closeSubject.complete();\n }\n}\n","import { Component, Input, ViewChild } from '@angular/core';\nimport { IManagedObject } from '@c8y/client';\nimport {\n ConfirmModalComponent,\n gettext,\n ModalLabels,\n Status,\n StatusType\n} from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Subject } from 'rxjs';\n@Component({\n selector: 'c8y-unassign-modal',\n templateUrl: './unassign-modal.component.html'\n})\nexport class UnassignModalComponent {\n @Input() asset: IManagedObject;\n @ViewChild('modalRef', { static: false }) modalRef: ConfirmModalComponent;\n message: string;\n closeSubject: Subject<boolean> = new Subject();\n labels: ModalLabels = { ok: gettext('Unassign'), cancel: gettext('Cancel') };\n title = gettext('Unassign asset');\n status: StatusType = Status.WARNING;\n\n constructor(private translateService: TranslateService) {}\n\n ngOnInit() {\n this.message = this.translateService.instant(\n gettext('You are about to unassign asset \"{{name}}\". Do you want to proceed?'),\n { name: this.asset.name }\n );\n }\n\n async ngAfterViewInit() {\n try {\n await this.modalRef.result;\n this.onClose();\n } catch (error) {\n this.onDismiss();\n }\n }\n\n onClose() {\n this.closeSubject.next(true);\n this.closeSubject.complete();\n }\n\n onDismiss() {\n this.closeSubject.complete();\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport { IManagedObject, SmartGroupsService } from '@c8y/client';\nimport {\n ActionControl,\n BuiltInActionType,\n BulkActionControl,\n DataGridComponent,\n DataSourceModifier,\n DisplayOptions,\n gettext,\n Pagination,\n Row,\n ServerSideDataResult\n} from '@c8y/ngx-components';\nimport { DeviceGridColumn } from '@c8y/ngx-components/device-grid';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { DeleteModalCheckboxes } from './delete-assets-modal';\nimport { DeleteAssetsModalComponent } from './delete-assets-modal/delete-assets-modal.component';\nimport { SubAssetsService } from './sub-assets.service';\nimport { UnassignModalComponent } from './unassign-assets-modal/unassign-modal.component';\n@Component({\n selector: 'c8y-sub-assets-grid',\n templateUrl: './sub-assets-grid.component.html'\n})\nexport class SubAssetsGridComponent implements OnInit {\n @Input('parent-group') parentGroup: IManagedObject;\n @Input() refresh: EventEmitter<any>;\n @Input() title: string = gettext('Subassets');\n @Input() emptyStateText: string = gettext(\n 'Add your first group or assign devices using the buttons on the toolbar.'\n );\n @Input() loadingItemsLabel: string = gettext('Loading assets…');\n\n get columns() {\n return this._columns;\n }\n @Input() set columns(value: DeviceGridColumn[]) {\n if (value) {\n this._columns = this.subAssetsGridService.getUserConfiguredColumns(value);\n } else {\n this._columns = this.subAssetsGridService.getUserConfiguredColumns(\n this.subAssetsGridService.getDefaultColumns()\n );\n }\n }\n @Input('pagination') set _pagination(value: Pagination) {\n if (value) {\n this.pagination = value;\n } else {\n this.pagination = this.subAssetsGridService.getDefaultPagination();\n }\n }\n @Input('actionControls') set _actionControls(value: ActionControl[]) {\n if (value) {\n this.actionControls = value;\n } else {\n this.actionControls = this.subAssetsGridService.getDefaultActionControls();\n }\n }\n @Input() selectable: boolean = false;\n @Input() baseQuery: any = {};\n @Input('bulkActionControls') set _bulkActionControls(value: BulkActionControl[]) {\n if (value) {\n this.bulkActionControls = value;\n } else {\n this.bulkActionControls = this.subAssetsGridService.getDefaultBulkActionControls();\n }\n }\n @Input() filterable: boolean = true;\n @Input() sortable: boolean = true;\n @Output() onColumnsChange: EventEmitter<DeviceGridColumn[]> = new EventEmitter<\n DeviceGridColumn[]\n >();\n @Output() itemsSelect: EventEmitter<string[]> = new EventEmitter<string[]>();\n\n pagination: Pagination = this.subAssetsGridService.getDefaultPagination();\n actionControls: ActionControl[];\n bulkActionControls: BulkActionControl[] = this.subAssetsGridService.getDefaultBulkActionControls();\n serverSideDataCallback: any;\n\n @ViewChild(DataGridComponent, { static: true })\n dataGrid: DataGridComponent;\n\n displayOptions: DisplayOptions = {\n striped: true,\n bordered: false,\n gridHeader: true,\n filter: true\n };\n\n private _columns: DeviceGridColumn[];\n\n get isRootGroup() {\n return !this.parentGroup;\n }\n\n get getInfiniteScrollMode() {\n return this.isRootGroup && this.subAssetsGridService.isUsingInventoryRoles()\n ? 'auto'\n : undefined;\n }\n\n @Input('displayOptions')\n set _displayOptions(displayOptions) {\n this.displayOptions = { ...this.displayOptions, ...displayOptions };\n }\n\n constructor(\n public subAssetsGridService: SubAssetsService,\n private bsModalService: BsModalService,\n private smartGroupsService: SmartGroupsService\n ) {\n this.serverSideDataCallback = this.onDataSourceModifier.bind(this);\n }\n\n ngOnInit() {\n this.columns = this.subAssetsGridService.getDefaultColumns(this.filterable, this.sortable);\n if (!this.filterable || !this.sortable) {\n this.columns.forEach(column => {\n column.filterable = this.filterable;\n column.sortable = this.sortable;\n });\n }\n this.setActionControls();\n }\n\n async setActionControls() {\n const actionControls: ActionControl[] = [];\n const {\n data: isMicroserviceInstalled\n } = await this.smartGroupsService.isSmartGroupsV2MicroserviceInstalled();\n\n const deleteAction: ActionControl = {\n type: BuiltInActionType.Delete,\n callback: (asset: Row) => this.onDeleteAsset(asset as IManagedObject, this.parentGroup),\n showIf: (asset: Row) => {\n if (this.smartGroupsService.isSmartGroupV2(asset as IManagedObject)) {\n return isMicroserviceInstalled ? this.subAssetsGridService.canDeleteSmartGroup() : false;\n }\n\n if (this.smartGroupsService.isSmartGroup(asset as IManagedObject)) {\n return this.subAssetsGridService.canDeleteSmartGroup();\n }\n\n return true;\n }\n };\n\n actionControls.push(deleteAction);\n\n const unassignAction: ActionControl = {\n type: 'UNASSIGN',\n icon: 'unlink',\n text: gettext('Unassign'),\n callback: (asset: Row) => this.onUnassignAsset(asset as IManagedObject, this.parentGroup),\n showIf: (asset: Row) =>\n this.subAssetsGridService.isDevice(asset as IManagedObject) &&\n !this.subAssetsGridService.isSmartGroup(this.parentGroup as IManagedObject)\n };\n\n actionControls.push(unassignAction);\n\n if (!this.actionControls) {\n this.actionControls = actionControls;\n }\n }\n\n onUnassignAsset(asset: IManagedObject, parentRef: IManagedObject) {\n const initialState = {\n asset\n };\n const modalRef = this.bsModalService.show(UnassignModalComponent, { initialState });\n\n modalRef.content.closeSubject.subscribe(async (result: boolean) => {\n if (result) {\n await this.subAssetsGridService.unassignAsset(asset, parentRef);\n this.refresh.emit();\n }\n });\n }\n\n async onDeleteAsset(asset: IManagedObject, parentRef: IManagedObject) {\n const initialState = {\n showWithDeviceUserCheckbox: this.subAssetsGridService.shouldShowWithDeviceUserCheckbox(asset),\n asset,\n showWithCascadeCheckbox:\n !this.smartGroupsService.isSmartGroup(asset) &&\n !this.smartGroupsService.isSmartGroupV2(asset)\n };\n\n const modalRef = this.bsModalService.show(DeleteAssetsModalComponent, { initialState });\n\n modalRef.content.closeSubject.subscribe(async (result: DeleteModalCheckboxes) => {\n if (result) {\n this.subAssetsGridService.uiOnlyCountersUpdate.next('DECREASE');\n await this.subAssetsGridService.deleteAsset(asset, parentRef, result);\n this.refresh.emit();\n }\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.parentGroup && !changes.parentGroup.firstChange) {\n this.dataGrid.reload();\n }\n }\n\n trackByName(_index, column: DeviceGridColumn): string {\n return column.name;\n }\n\n async onDataSourceModifier(\n dataSourceModifier: DataSourceModifier\n ): Promise<ServerSideDataResult> {\n const promises = [];\n let counters;\n\n promises.push(\n this.subAssetsGridService.getData(\n dataSourceModifier.columns,\n dataSourceModifier.pagination,\n this.parentGroup,\n this.baseQuery\n )\n );\n\n const action = this.subAssetsGridService.uiOnlyCountersUpdate.value;\n if (action) {\n counters = this.uiOnlyCountersUpdate(action);\n this.subAssetsGridService.uiOnlyCountersUpdate.next(null);\n } else {\n promises.push(this.subAssetsGridService.getTotal(this.parentGroup, this.baseQuery));\n promises.push(\n this.subAssetsGridService.getCount(\n dataSourceModifier.columns,\n dataSourceModifier.pagination,\n this.parentGroup,\n this.baseQuery\n )\n );\n }\n const [dataResponse, size, filteredSize] = await Promise.all(promises);\n if (!counters) {\n counters = {\n size,\n filteredSize\n };\n }\n this.onColumnsChange.emit(dataSourceModifier.columns);\n\n return {\n res: dataResponse.res,\n data: dataResponse.data,\n paging: dataResponse.paging,\n ...counters\n };\n }\n\n configChange(config) {\n this.subAssetsGridService.saveConfig(config);\n }\n\n // workaround since the totalPages value is cached on the BE\n private uiOnlyCountersUpdate(action: 'INCREASE' | 'DECREASE') {\n const currentAllItemsCount = this.dataGrid.filteringLabelsParams.allItemsCount;\n const currentFilteredItemsCount = this.dataGrid.filteringLabelsParams.filteredItemsCount;\n let counters;\n if (action === 'DECREASE') {\n counters = {\n size: currentAllItemsCount - 1,\n filteredSize: currentFilteredItemsCount - 1\n };\n }\n if (action === 'INCREASE') {\n counters = {\n size: currentAllItemsCount + 1,\n filteredSize: currentFilteredItemsCount + 1\n };\n }\n return counters;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { IIdentified, IManagedObject, InventoryService } from '@c8y/client';\nimport { GroupForm } from './add-group.model';\nimport { GroupFragment } from '@c8y/ngx-components/assets-navigator';\n\n@Injectable()\nexport class AddGroupService {\n private GROUP_FRAGMENT_TYPE = 'c8y_IsDeviceGroup';\n\n constructor(private inventoryService: InventoryService) {}\n\n async createGroupAndAssignDevices(\n groupForm: GroupForm,\n groupContextId: string | number,\n selectedDevices: string[]\n ): Promise<IManagedObject | IIdentified> {\n let group: IManagedObject | IIdentified;\n const { name, description } = groupForm;\n const newGroupMO = this.getGroupMO(name, description, groupContextId);\n\n if (groupContextId) {\n group = (await this.inventoryService.childAssetsCreate(newGroupMO, groupContextId)).data;\n } else {\n group = (await this.inventoryService.create(newGroupMO)).data;\n }\n\n if (selectedDevices.length > 0) {\n await this.assignDevices(group.id, selectedDevices);\n }\n\n return group;\n }\n\n private getGroupMO(\n name: string,\n description: string = '',\n groupContextId: string | number\n ): Partial<IManagedObject> {\n const group = {\n type: this.getGroupType(groupContextId),\n [this.GROUP_FRAGMENT_TYPE]: {},\n name,\n c8y_Notes: description\n };\n\n return group;\n }\n\n private getGroupType(\n groupContextId: string | number\n ): GroupFragment.subGroupType | GroupFragment.groupType {\n return groupContextId ? GroupFragment.subGroupType : GroupFragment.groupType;\n }\n\n private async assignDevices(id: string | number, selectedDevices: string[]) {\n const promises = [];\n\n selectedDevices.forEach(moId => {\n promises.push(this.inventoryService.childAssetsAdd(moId, id));\n });\n\n return await Promise.all(promises);\n }\n}\n","import {\n Component,\n Output,\n EventEmitter,\n ViewChild,\n Input,\n HostListener,\n ElementRef\n} from '@angular/core';\nimport { FormGroup, Validators, FormBuilder } from '@angular/forms';\nimport { Subscription } from 'rxjs';\nimport { DeviceGridService } from '@c8y/ngx-components/device-grid';\nimport { C8yStepper, Pagination, AlertService, gettext } from '@c8y/ngx-components';\nimport { AddGroupService } from './add-group.service';\nimport { SubAssetsService } from '../sub-assets.service';\nimport { IManagedObject } from '@c8y/client';\n\n@Component({\n selector: 'c8y-add-group',\n templateUrl: './add-group.component.html'\n})\nexport class AddGroupComponent {\n @Input() currentGroupId: string;\n @Input() refresh = new EventEmitter<any>();\n @Output() onDeviceQueryStringChange: EventEmitter<string> = new EventEmitter<string>();\n @Output() onCancel = new EventEmitter<any>();\n @ViewChild(C8yStepper, { static: false })\n stepper: C8yStepper;\n @ViewChild('nameRef', { static: false })\n nameInputRef: ElementRef;\n deviceQueryStringOutput: string;\n formGroupStepOne: FormGroup;\n pendingStatus: boolean = false;\n pagination: Pagination = { pageSize: 20, currentPage: 1 };\n selected: string[] = [];\n subscription: Subscription;\n canCreateGroup: boolean = false;\n canAssignDevice: boolean = false;\n\n readonly ITEMS_SELECT_LIMIT: number = 15;\n readonly btnLabels = {\n next: gettext('Next'),\n cancel: gettext('Cancel'),\n create: gettext('Create')\n };\n\n private nameInput: HTMLInputElement;\n\n constructor(\n protected deviceGridService: DeviceGridService,\n private fb: FormBuilder,\n private addGroupService: AddGroupService,\n private alert: AlertService,\n private subAssetsService: SubAssetsService\n ) {}\n\n @HostListener('document:keydown.enter', ['$event']) onEnterKeyDown(event: KeyboardEvent) {\n // Order matters! Needs to be placed before this.stepper.next\n if ((this.isGroupDetailsStep() && !this.canAssignDevice) || this.isAssignDeviceStep()) {\n this.createGroup();\n return;\n }\n this.stepper.next();\n }\n\n @HostListener('document:keydown.escape', ['$event']) onEscapeKeyDown(event: KeyboardEvent) {\n this.onCancel.emit();\n }\n\n async ngOnInit() {\n this.formGroupStepOne = this.fb.group({\n name: ['', Validators.required],\n description: ['']\n });\n this.subscription = this.onCancel.subscribe(() => this.resetStepper());\n this.canCreateGroup = this.subAssetsService.canCreateGroup();\n this.canAssignDevice = await this.subAssetsService.canAssignDevice({\n id: this.currentGroupId\n } as IManagedObject);\n }\n\n ngAfterViewInit() {\n this.nameInput = this.nameInputRef.nativeElement as HTMLInputElement;\n this.setFocusOnNameInput();\n }\n\n async createGroup() {\n if (this.canCreateGroup === false) {\n return;\n }\n\n this.pendingStatus = true;\n this.subAssetsService.uiOnlyCountersUpdate.next('INCREASE');\n await this.addGroupService.createGroupAndAssignDevices(\n this.formGroupStepOne.value,\n this.currentGroupId,\n this.selected\n );\n\n this.pendingStatus = false;\n this.resetStepper();\n this.alert.success(gettext('Group created.'));\n\n this.refresh.emit();\n this.onCancel.emit();\n }\n\n onSelected(selectedDevicesIDs: string[]) {\n this.selected = selectedDevicesIDs;\n }\n\n resetStepper() {\n this.stepper.reset();\n this.stepper.selectedIndex = 1;\n this.selected = [];\n }\n\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n private isGroupDetailsStep() {\n return this.stepper.selectedIndex === 0;\n }\n\n private isAssignDeviceStep() {\n return this.stepper.selectedIndex === 1;\n }\n\n private setFocusOnNameInput() {\n if (this.nameInput) {\n this.nameInput.focus();\n this.nameInput.select();\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CoreModule, HOOK_ONCE_ROUTE } from '@c8y/ngx-components';\nimport { DeviceGridModule } from '@c8y/ngx-components/device-grid';\nimport { AddGroupComponent } from './add-group.component';\nimport { AddGroupService } from './add-group.service';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\n@NgModule({\n declarations: [AddGroupComponent],\n imports: [CoreModule, DeviceGridModule, FormsModule, ReactiveFormsModule],\n entryComponents: [AddGroupComponent],\n exports: [AddGroupComponent],\n providers: [\n {\n provide: HOOK_ONCE_ROUTE,\n useValue: [\n {\n path: 'add-group',\n component: AddGroupComponent\n }\n ],\n multi: true\n },\n AddGroupService\n ]\n})\nexport class AddGroupModule {}\n","import { Component, EventEmitter, OnInit } from '@angular/core';\nimport { Permissions } from '@c8y/ngx-components';\nimport { SubAssetsService } from './sub-assets.service';\n\n@Component({\n selector: 'c8y-groups-name',\n templateUrl: './groups.component.html'\n})\nexport class GroupsComponent implements OnInit {\n refresh: EventEmitter<any> = new EventEmitter();\n showAddGroup = false;\n filterable: boolean = false;\n sortable: boolean = true;\n shouldDisableAddGroup: boolean = false;\n constructor(private permissions: Permissions, private subAssetsService: SubAssetsService) {}\n\n ngOnInit() {\n if (!this.permissions.hasRole('ROLE_INVENTORY_READ')) {\n this.sortable = false;\n }\n this.shouldDisableAddGroup = !this.subAssetsService.canCreateGroup();\n }\n}\n","import { Component, Input, Output, EventEmitter, HostListener } from '@angular/core';\nimport { Pagination, AlertService, gettext, ActionControl, Row } from '@c8y/ngx-components';\nimport { InventoryService } from '@c8y/client';\nimport { SubAssetsService } from '../sub-assets.service';\nimport { IManagedObject } from '@c8y/client';\n\n@Component({\n selector: 'c8y-assign-devices',\n templateUrl: './assign-devices.component.html'\n})\nexport class AssignDevicesComponent {\n @Input() currentGroupId: string;\n @Input() refresh = new EventEmitter<any>();\n @Output() onCancel = new EventEmitter<any>();\n @Output() onShowChildDevices = new EventEmitter<boolean>();\n @Output() selectedDevice = new EventEmitter<IManagedObject>();\n\n deviceQueryStringOutput: string;\n pendingStatus: boolean = false;\n pagination: Pagination = { pageSize: 20, currentPage: 1 };\n selected: string[] = [];\n baseQuery: any;\n canAssignDevice: boolean = false;\n actionControls: ActionControl[] = [];\n readonly isSelectable = true;\n\n constructor(\n private alert: AlertService,\n private subAssetsService: SubAssetsService,\n private inventoryService: InventoryService\n ) {}\n\n @HostListener('document:keydown.enter', ['$event']) onEnterKeyDown(event: KeyboardEvent) {\n if (this.selected.length > 0) {\n this.assignDevices();\n }\n }\n\n @HostListener('document:keydown.escape', ['$event']) onEscapeKeyDown(event: KeyboardEvent) {\n this.onCancel.emit();\n }\n\n async ngOnInit() {\n this.setNotIncludedInGroupQuery();\n this.canAssignDevice = await this.subAssetsService.canAssignDevice({\n id: this.currentGroupId\n } as IManagedObject);\n }\n\n setNotIncludedInGroupQuery() {\n const notIncludedInGroupQuery = { __not: { __bygroupid: this.currentGroupId } };\n this.baseQuery = notIncludedInGroupQuery;\n }\n\n setActionControls(showChildren: boolean) {\n const actionControls: ActionControl[] = [];\n const selectChildrenAction: ActionControl = {\n type: 'SELECT_CHILDREN',\n icon: 'enter-bottom',\n text: gettext('Select children'),\n callback: (asset: Row) => this.selectChildren(asset as IManagedObject),\n showIf: (asset: Row) =>\n asset.childDevices.references.length > 0\n };\n\n if (showChildren) {\n actionControls.push(selectChildrenAction);\n }\n this.actionControls = actionControls;\n this.refresh.emit();\n }\n\n async assignDevices() {\n if (this.canAssignDevice === false) {\n return;\n }\n this.pendingStatus = true;\n\n try {\n await this.inventoryService.childAssetsBulkAdd(this.selected, this.currentGroupId);\n this.refresh.emit();\n this.alert.success(gettext('Devices assigned to the group.'));\n } catch (error) {\n this.alert.danger(gettext('Could not assign devices to the group'), error);\n }\n this.pendingStatus = false;\n this.selected = [];\n this.onCancel.emit();\n }\n\n onSelected(selectedDevicesIDs: string[]) {\n this.selected = selectedDevicesIDs;\n }\n\n selectChildren(asset: IManagedObject) {\n this.onShowChildDevices.emit(true);\n this.selectedDevice.emit(asset);\n }\n}\n","import { Component, Input, Output, EventEmitter, HostListener } from '@angular/core';\nimport { AlertService, gettext } from '@c8y/ngx-components';\nimport { InventoryService } from '@c8y/client';\nimport { SubAssetsService } from '../sub-assets.service';\nimport { IManagedObject } from '@c8y/client';\n\n@Component({\n selector: 'c8y-assign-child-devices',\n templateUrl: './assign-child-devices.component.html'\n})\nexport class AssignChildDevicesComponent {\n @Input() currentGroupId: string;\n @Input() parentDevice: IManagedObject;\n @Output() onCancel = new EventEmitter<any>();\n @Input() refresh = new EventEmitter<any>();\n\n selected: string[] = [];\n baseQuery: any;\n canAssignDevice: boolean = false;\n pendingStatus: boolean = false;\n\n constructor(\n private alert: AlertService,\n private subAssetsService: SubAssetsService,\n private inventoryService: InventoryService\n ) {}\n\n @HostListener('document:keydown.enter', ['$event']) onEnterKeyDown(event: KeyboardEvent) {\n if (this.selected.length > 0) {\n this.assignDevices();\n }\n }\n\n @HostListener('document:keydown.escape', ['$event']) onEscapeKeyDown(event: KeyboardEvent) {\n this.onCancel.emit();\n }\n\n async ngOnInit() {\n this.setNotIncludedInGroupQuery();\n this.canAssignDevice = await this.subAssetsService.canAssignDevice({\n id: this.currentGroupId\n } as IManagedObject);\n }\n\n setNotIncludedInGroupQuery() {\n const notIncludedInGroupQuery = { __not: { __bygroupid: this.currentGroupId } };\n this.baseQuery = notIncludedInGroupQuery;\n }\n\n async assignDevices() {\n if (this.canAssignDevice === false) {\n return;\n }\n this.pendingStatus = true;\n\n try {\n await this.inventoryService.childAssetsBulkAdd(this.selected, this.currentGroupId);\n this.refresh.emit();\n this.alert.success(gettext('Child devices assigned to the group.'));\n } catch (error) {\n this.alert.danger(gettext('Could not assign child devices to the group'), error);\n }\n this.pendingStatus = false;\n this.selected = [];\n this.onCancel.emit();\n }\n\n onSelected(selectedDevicesIDs: string[]) {\n this.selected = selectedDevicesIDs;\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 { AddGroupModule } from './add-group/add-group.module';\nimport { AssetTypeCellRendererComponent } from './columns/asset-type.cell-renderer.component';\nimport { DeleteAssetsModalComponent } from './delete-assets-modal/delete-assets-modal.component';\nimport { GroupInfoComponent } from './group-info.component';\nimport { GroupsComponent } from './groups.component';\nimport { SubAssetsGridComponent } from './sub-assets-grid.component';\nimport { SubAssetsComponent } from './sub-assets.component';\nimport { SubAssetsService } from './sub-assets.service';\nimport { UnassignModalComponent } from './unassign-assets-modal/unassign-modal.component';\nimport { AssignDevicesComponent } from './assign-devices/assign-devices.component';\nimport { AssignChildDevicesComponent } from './assign-devices/assign-child-devices.component';\n\n@NgModule({\n declarations: [\n SubAssetsComponent,\n SubAssetsGridComponent,\n AssetTypeCellRendererComponent,\n GroupsComponent,\n GroupInfoComponent,\n DeleteAssetsModalComponent,\n UnassignModalComponent,\n AssignDevicesComponent,\n AssignChildDevicesComponent\n ],\n imports: [CoreModule, DeviceGridModule, AddGroupModule, PopoverModule],\n entryComponents: [\n SubAssetsComponent,\n AssetTypeCellRendererComponent,\n GroupsComponent,\n DeleteAssetsModalComponent,\n UnassignModalComponent\n ],\n exports: [],\n providers: [\n {\n provide: HOOK_ONCE_ROUTE,\n useValue: [\n {\n context: ViewContext.Group,\n path: 'subassets',\n priority: 1000,\n icon: 'c8y-group-open',\n label: gettext('Subassets'),\n component: SubAssetsComponent\n },\n {\n path: 'group',\n component: GroupsComponent\n }\n ],\n multi: true\n },\n SubAssetsService\n ]\n})\nexport class SubAssetsModule {}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../node_modules/tslib/tslib.es6.js","../../sub-assets/columns/asset-type.cell-renderer.component.ts","../../sub-assets/columns/asset-type-grid-column.ts","../../sub-assets/sub-assets.service.ts","../../sub-assets/group-info.component.ts","../../sub-assets/sub-assets.component.ts","../../sub-assets/delete-assets-modal/delete-assets-modal.component.ts","../../sub-assets/unassign-assets-modal/unassign-modal.component.ts","../../sub-assets/sub-assets-grid.component.ts","../../sub-assets/add-group/add-group.service.ts","../../sub-assets/add-group/add-group.component.ts","../../sub-assets/add-group/add-group.module.ts","../../sub-assets/groups.component.ts","../../sub-assets/assign-devices/assign-devices.component.ts","../../sub-assets/assign-devices/assign-child-devices.component.ts","../../sub-assets/sub-assets.module.ts"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__extends","__","this","constructor","prototype","create","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","__generator","body","f","y","t","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","n","v","op","TypeError","call","pop","length","push","__read","o","m","r","i","ar","error","AssetTypeCellRendererComponent","context","deviceGroupService","ngOnInit","isAnyGroup","item","isDevice","groupIcon","icon","iconTitle","getIconTitle","gettext","Component","args","template","CellRendererContext","DeviceGroupService","AssetTypeGridColumn","initialColumnConfig","_this","_super","name","header","dataType","cellRendererComponent","sortable","sortingConfig","pathSortingConfigs","path","BaseDeviceGridColumn","SubAssetsService","translateService","inventoryService","appState","user","assetNodeService","smartGroupsService","smartRulesService","alertService","permissionsService","modal","GRID_CONFIG_DEFAULT_STORAGE_KEY","IS_DEVICE_GROUP_FRAGMENT","IS_DYNAMIC_GROUP_FRAGMENT","getDefaultColumns","filterable","sortOrder","NameDeviceGridColumn","ModelDeviceGridColumn","SerialNumberDeviceGridColumn","visible","RegistrationDateDeviceGridColumn","SystemIdDeviceGridColumn","ImeiDeviceGridColumn","AlarmsDeviceGridColumn","getDefaultPagination","pageSize","getConfig","pagination","currentPage","getDefaultActionControls","unassignAsset","asset","parentRef","assetId","id","parentId","childAssetsRemove","_a","alertMessage","instant","success","danger","deactivateSmartrulesForAsset","deleteAsset","params","isSmartGroup","deleteGroup","deleteDevice","isSmartGroupV2","shouldShowWithDeviceUserCheckbox","owner","isRootDevice","c8y_IsDevice","hasDeviceUserAsOwner","isDeviceUser","Boolean","getDefaultBulkActionControls","getData","columns","parentReference","baseQuery","query","buildCombinedRootQueryFilter","getRootNodes","assign","filters","getAssetsFilters","withParents","isGroup","getGroupItems","isDynamicGroup","getDynamicGroupItems","c8y_DeviceQueryString","getDeviceChildren","getCount","defaultFilters","withChildren","getAssetsStatistics","getTotal","queryFilter","rootQueryFilter","queriesUtil","addAndFilter","buildQuery","withTotalPages","canEditGroup","group","canEdit","canCreateGroup","currentUser","hasAnyRole","canAssignDevice","canEditSmartGroup","canDeleteSmartGroup","isUsingInventoryRoles","paging","totalPages","userQuery","getQueryObj","queryPart","addOrderbys","__orderby","fullQuery","__filter","cascade","delete","_b","device","withDeviceUser","deleteDeviceWithUser","listByContext","rules","data","upateSmartrulesPromises","map","rule","bulkDeactivateEnabledSources","all","userId","match","DEFAULT_PAGE_SIZE","DeviceGridService","Injectable","TranslateService","InventoryService","AppStateService","UserService","AssetNodeService","SmartGroupsService","SmartRulesService","AlertService","Permissions","ModalService","GroupInfoComponent","inventory","subAssetsService","translate","modalService","onGroupChange","EventEmitter","filterMsg","canEditMsg","GROUP_UPDATED_MSG","_c","smartGroupFilter","setHintMsg","update","partialGroup","updateSmartGroup","updateGroup","addServerFailure","error_1","filterMsgTranslated","canEditMsgTranslated","filterHintMsg","updatedGroup","setGroup","modalBody","title","confirm","Status","WARNING","ok","cancel","isQueryExecutable","emit","filter","q","list","error_2","selector","Input","Output","SubAssetsComponent","route","toggle","showAddGroup","showAssignDevices","showGroupInfo","showAssignChildDevices","refresh","shouldDisableAddGroup","shouldDisableAssignDevices","dataSub","parent","subscribe","contextData","currentGroupId","state$","state","app","displayOptions","striped","bordered","gridHeader","groupChange","ngOnDestroy","unsubscribe","ActivatedRoute","DeleteAssetsModalComponent","showWithCascadeCheckbox","showWithDeviceUserCheckbox","closeSubject","Subject","labels","status","DANGER","config","message","ngAfterViewInit","modalRef","onClose","onDismiss","complete","ViewChild","static","UnassignModalComponent","SubAssetsGridComponent","subAssetsGridService","alert","bsModalService","emptyStateText","loadingItemsLabel","selectable","onColumnsChange","itemsSelect","bulkActionControls","serverSideDataCallback","onDataSourceModifier","bind","defineProperty","_columns","getUserConfiguredColumns","actionControls","parentGroup","isRootGroup","undefined","forEach","column","setActionControls","isSmartGroupsV2MicroserviceInstalled","isMicroserviceInstalled","deleteAction","type","callback","onDeleteAsset","showIf","unassignAction","text","onUnassignAsset","initialState","show","content","warning","ngOnChanges","changes","firstChange","dataGrid","reload","trackByName","_index","dataSourceModifier","promises","dataResponse","size","filteredSize","counters","res","configChange","saveConfig","BsModalService","DataGridComponent","AddGroupService","GROUP_FRAGMENT_TYPE","createGroupAndAssignDevices","groupForm","groupContextId","selectedDevices","description","newGroupMO","getGroupMO","childAssetsCreate","assignDevices","getGroupType","c8y_Notes","GroupFragment","subGroupType","groupType","moId","childAssetsAdd","AddGroupComponent","deviceGridService","fb","addGroupService","onDeviceQueryStringChange","onCancel","pendingStatus","selected","ITEMS_SELECT_LIMIT","btnLabels","onEnterKeyDown","event","isGroupDetailsStep","isAssignDeviceStep","createGroup","stepper","onEscapeKeyDown","formGroupStepOne","Validators","required","subscription","resetStepper","nameInput","nameInputRef","nativeElement","setFocusOnNameInput","onSelected","selectedDevicesIDs","reset","selectedIndex","focus","select","FormBuilder","C8yStepper","HostListener","component","NgModule","declarations","imports","CoreModule","DeviceGridModule","FormsModule","ReactiveFormsModule","entryComponents","exports","providers","provide","HOOK_ONCE_ROUTE","useValue","ɵ0$1","multi","GroupsComponent","permissions","hasRole","AssignDevicesComponent","onShowChildDevices","selectedDevice","isSelectable","setNotIncludedInGroupQuery","notIncludedInGroupQuery","__not","__bygroupid","showChildren","selectChildrenAction","selectChildren","childDevices","references","childAssetsBulkAdd","AssignChildDevicesComponent","ViewContext","Group","priority","AddGroupModule","PopoverModule","ɵ0"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import { Component, OnInit } from '@angular/core';\nimport { CellRendererContext, gettext } from '@c8y/ngx-components';\nimport { DeviceGroupService } from '@c8y/ngx-components/assets-navigator';\n\n@Component({\n templateUrl: './asset-type.cell-renderer.component.html'\n})\nexport class AssetTypeCellRendererComponent implements OnInit {\n groupIcon: string;\n isAnyGroup: boolean;\n isDevice: boolean;\n iconTitle: string;\n constructor(\n public context: CellRendererContext,\n private deviceGroupService: DeviceGroupService\n ) {}\n\n ngOnInit() {\n this.isAnyGroup = this.deviceGroupService.isAnyGroup(this.context.item);\n this.isDevice = this.deviceGroupService.isDevice(this.context.item);\n this.groupIcon = this.deviceGroupService.icon(this.context.item);\n this.iconTitle = this.getIconTitle(this.groupIcon);\n }\n\n private getIconTitle(icon: string) {\n switch (icon) {\n case 'c8y-group':\n return gettext('Group');\n case 'c8y-group-smart':\n return gettext('Smart group');\n case 'c8y-group-remote-inactive':\n return 'Inactive remote group';\n case 'c8y-group-remote':\n return gettext('Remote group');\n default:\n return gettext('Child device');\n }\n }\n}\n","import { gettext, ColumnDataType, ColumnConfig } from '@c8y/ngx-components';\nimport { AssetTypeCellRendererComponent } from './asset-type.cell-renderer.component';\nimport { BaseDeviceGridColumn } from '@c8y/ngx-components/device-grid';\n\nexport class AssetTypeGridColumn extends BaseDeviceGridColumn {\n constructor(initialColumnConfig?: ColumnConfig) {\n super(initialColumnConfig);\n this.name = 'type';\n this.header = gettext('Type');\n this.dataType = ColumnDataType.Icon;\n this.cellRendererComponent = AssetTypeCellRendererComponent;\n this.sortable = true;\n this.sortingConfig = {\n pathSortingConfigs: [{ path: `c8y_IsDeviceGroup` }]\n };\n }\n}\n","import { Injectable } from '@angular/core';\nimport {\n IManagedObject,\n InventoryService,\n IRule,\n QueriesUtil,\n SmartGroupsService,\n SmartRulesService,\n UserService\n} from '@c8y/client';\nimport {\n ActionControl,\n AlertService,\n AppStateService,\n BulkActionControl,\n gettext,\n ModalService,\n Pagination,\n Permissions\n} from '@c8y/ngx-components';\nimport { AssetNodeService, DeviceGroupService } from '@c8y/ngx-components/assets-navigator';\nimport {\n AlarmsDeviceGridColumn,\n DeviceGridColumn,\n DeviceGridService,\n ImeiDeviceGridColumn,\n ModelDeviceGridColumn,\n NameDeviceGridColumn,\n RegistrationDateDeviceGridColumn,\n SerialNumberDeviceGridColumn,\n SystemIdDeviceGridColumn\n} from '@c8y/ngx-components/device-grid';\nimport { TranslateService } from '@ngx-translate/core';\nimport { AssetTypeGridColumn } from './columns/asset-type-grid-column';\n\n@Injectable()\nexport class SubAssetsService extends DeviceGridService {\n queriesUtil: QueriesUtil;\n protected GRID_CONFIG_DEFAULT_STORAGE_KEY = 'sub-assets-grid-config';\n private IS_DEVICE_GROUP_FRAGMENT = 'c8y_IsDeviceGroup';\n private IS_DYNAMIC_GROUP_FRAGMENT = 'c8y_IsDynamicGroup';\n\n constructor(\n protected translateService: TranslateService,\n protected inventoryService: InventoryService,\n protected appState: AppStateService,\n protected user: UserService,\n protected assetNodeService: AssetNodeService,\n protected deviceGroupService: DeviceGroupService,\n protected smartGroupsService: SmartGroupsService,\n protected smartRulesService: SmartRulesService,\n protected alertService: AlertService,\n protected permissionsService: Permissions,\n protected modal: ModalService\n ) {\n super(inventoryService, translateService, alertService, modal);\n }\n\n getDefaultColumns(filterable: boolean = true, sortable: boolean = true): DeviceGridColumn[] {\n const defaultColumns = [\n new AssetTypeGridColumn({ sortOrder: 'desc' }),\n new NameDeviceGridColumn({ sortOrder: 'asc' }),\n new ModelDeviceGridColumn(),\n new SerialNumberDeviceGridColumn({ visible: false }),\n new RegistrationDateDeviceGridColumn({ visible: false }),\n new SystemIdDeviceGridColumn({ visible: false }),\n new ImeiDeviceGridColumn({ visible: false }),\n new AlarmsDeviceGridColumn()\n ];\n return defaultColumns;\n }\n\n getDefaultPagination(): Pagination {\n const { pagination } = this.getConfig();\n return {\n pageSize: pagination.pageSize,\n currentPage: 1\n };\n }\n\n getDefaultActionControls(): ActionControl[] {\n return [];\n }\n\n async unassignAsset(asset: IManagedObject, parentRef: IManagedObject) {\n const { id: assetId } = asset;\n const { id: parentId } = parentRef;\n\n if (this.isDevice(asset)) {\n try {\n await this.inventoryService.childAssetsRemove(assetId, parentId);\n const alertMessage = this.translateService.instant(gettext('Asset unassigned.'));\n this.alertService.success(alertMessage);\n } catch (error) {\n const alertMessage = this.translateService.instant(gettext('Could not unassign asset.'));\n this.alertService.danger(alertMessage);\n }\n await this.deactivateSmartrulesForAsset(asset, parentRef);\n }\n }\n\n isDevice(asset: IManagedObject): boolean {\n return (\n !asset.hasOwnProperty(this.IS_DEVICE_GROUP_FRAGMENT) &&\n !asset.hasOwnProperty(this.IS_DYNAMIC_GROUP_FRAGMENT)\n );\n }\n\n async deleteAsset(asset: IManagedObject, parentRef: IManagedObject, params = {}) {\n const isGroup =\n asset.hasOwnProperty(this.IS_DEVICE_GROUP_FRAGMENT) ||\n this.smartGroupsService.isSmartGroup(asset);\n\n if (isGroup) {\n await this.deleteGroup(asset, params);\n } else {\n await this.deleteDevice(asset, params);\n }\n\n if (\n parentRef &&\n !this.smartGroupsService.isSmartGroup(asset) &&\n !this.smartGroupsService.isSmartGroupV2(asset)\n ) {\n await this.deactivateSmartrulesForAsset(asset, parentRef);\n }\n }\n\n shouldShowWithDeviceUserCheckbox(asset: IManagedObject): boolean {\n const { owner, c8y_IsDevice: isRootDevice } = asset;\n const hasDeviceUserAsOwner = asset.owner && this.isDeviceUser(owner);\n\n return Boolean(isRootDevice && hasDeviceUserAsOwner);\n }\n\n getDefaultBulkActionControls(): BulkActionControl[] {\n return [];\n }\n\n async getData(\n columns: DeviceGridColumn[],\n pagination: Pagination,\n parentReference: IManagedObject,\n baseQuery: any = {}\n ) {\n const isRoot = !parentReference;\n if (isRoot) {\n const query = this.buildCombinedRootQueryFilter(columns, pagination);\n return this.assetNodeService.getRootNodes({ ...pagination, query });\n }\n const filters = {\n ...this.getAssetsFilters(columns, pagination, baseQuery),\n withParents: false\n };\n if (this.deviceGroupService.isGroup(parentReference)) {\n return this.assetNodeService.getGroupItems(parentReference.id, filters);\n }\n if (this.deviceGroupService.isDynamicGroup(parentReference)) {\n return this.assetNodeService.getDynamicGroupItems(\n parentReference.c8y_DeviceQueryString,\n filters\n );\n }\n if (this.deviceGroupService.isDevice(parentReference)) {\n return this.assetNodeService.getDeviceChildren(parentReference.id, filters);\n }\n }\n\n async getCount(\n columns: DeviceGridColumn[],\n pagination: Pagination,\n parentReference: IManagedObject,\n baseQuery: any = {}\n ): Promise<number> {\n const defaultFilters = {\n pageSize: 1,\n withChildren: false\n };\n const filters = !parentReference\n ? {\n query: this.buildCombinedRootQueryFilter(columns, pagination),\n ...defaultFilters\n }\n : {\n ...this.getAssetsFilters(columns, pagination, baseQuery),\n ...defaultFilters\n };\n return this.getAssetsStatistics(parentReference, filters);\n }\n\n getTotal(parentReference: IManagedObject, baseQuery: any = {}): Promise<number> {\n const queryFilter = this.assetNodeService.rootQueryFilter();\n const query = !parentReference\n ? this.queriesUtil.addAndFilter(queryFilter, baseQuery)\n : baseQuery;\n const filters = {\n query: this.queriesUtil.buildQuery(query),\n withChildren: false,\n withTotalPages: true,\n pageSize: 1\n };\n return this.getAssetsStatistics(parentReference, filters);\n }\n\n async canEditGroup(group: IManagedObject): Promise<boolean> {\n return await this.permissionsService.canEdit(['ROLE_INVENTORY_ADMIN'], group);\n }\n\n canCreateGroup(): boolean {\n const currentUser = this.appState.currentUser.value;\n const hasAdminRole = this.user.hasAnyRole(currentUser, [\n 'ROLE_INVENTORY_ADMIN',\n 'ROLE_INVENTORY_CREATE'\n ]);\n return hasAdminRole;\n }\n\n async canAssignDevice(group: IManagedObject): Promise<boolean> {\n return await this.permissionsService.canEdit(['ROLE_INVENTORY_ADMIN'], group);\n }\n\n canEditSmartGroup(): boolean {\n const SMART_GROUPS_ROLES_EDIT = ['ROLE_SMARTGROUP_UPDATE', 'ROLE_SMARTGROUP_ADMIN'];\n return this.permissionsService.hasAnyRole(SMART_GROUPS_ROLES_EDIT);\n }\n\n canDeleteSmartGroup(): boolean {\n const SMART_GROUPS_ROLES_DELETE = ['ROLE_SMARTGROUP_ADMIN', 'ROLE_INVENTORY_ADMIN'];\n return this.permissionsService.hasAnyRole(SMART_GROUPS_ROLES_DELETE);\n }\n\n isSmartGroup(group: IManagedObject): boolean {\n return (\n this.smartGroupsService.isSmartGroup(group) || this.smartGroupsService.isSmartGroupV2(group)\n );\n }\n\n isUsingInventoryRoles() {\n const currentUser = this.appState.currentUser.value;\n const hasAnyInventoryRole = this.user.hasAnyRole(currentUser, [\n 'ROLE_INVENTORY_ADMIN',\n 'ROLE_INVENTORY_READ',\n 'ROLE_INVENTORY_CREATE'\n ]);\n return !hasAnyInventoryRole;\n }\n\n protected async getAssetsStatistics(\n parentReference: IManagedObject,\n filters: object\n ): Promise<number> {\n const isRoot = !parentReference;\n if (isRoot) {\n return (await this.assetNodeService.getRootNodes(filters)).paging.totalPages;\n }\n if (this.deviceGroupService.isGroup(parentReference)) {\n return (await this.assetNodeService.getGroupItems(parentReference.id, filters)).paging\n .totalPages;\n }\n if (this.deviceGroupService.isDynamicGroup(parentReference)) {\n return (await this.assetNodeService.getDynamicGroupItems(\n parentReference.c8y_DeviceQueryString,\n filters\n )).paging.totalPages;\n }\n if (this.deviceGroupService.isDevice(parentReference)) {\n return (await this.assetNodeService.getDeviceChildren(parentReference.id, filters)).paging\n .totalPages;\n }\n }\n\n protected buildCombinedRootQueryFilter(columns, pagination) {\n const queryFilter = this.assetNodeService.rootQueryFilter();\n const userQuery = this.getQueryObj(columns, pagination);\n\n const queryPart = this.queriesUtil.addOrderbys(queryFilter, userQuery.__orderby, 'append');\n const fullQuery = this.queriesUtil.addAndFilter(queryPart, userQuery.__filter);\n return this.queriesUtil.buildQuery(fullQuery);\n }\n\n private async deleteGroup(group: IManagedObject, params: any = {}) {\n const { cascade } = params;\n\n try {\n this.smartGroupsService.isSmartGroup(group) || this.smartGroupsService.isSmartGroupV2(group)\n ? await this.smartGroupsService.delete(group, { cascade })\n : await this.inventoryService.delete(group, { cascade });\n\n const alertMessage = this.translateService.instant(gettext('Asset deleted.'));\n this.alertService.success(alertMessage);\n } catch (error) {\n const alertMessage = this.translateService.instant(gettext('Could not delete asset.'));\n this.alertService.danger(alertMessage);\n }\n }\n\n private async deleteDevice(device: IManagedObject, params: any = {}) {\n const { cascade, withDeviceUser } = params;\n try {\n const { owner } = device;\n const shouldRemoveOwner = withDeviceUser && owner && this.isDeviceUser(owner);\n\n shouldRemoveOwner\n ? await this.deleteDeviceWithUser(device, cascade)\n : await this.inventoryService.delete(device, { cascade });\n\n const alertMessage = this.translateService.instant(gettext('Asset deleted.'));\n this.alertService.success(alertMessage);\n } catch (error) {\n const alertMessage = this.translateService.instant(gettext('Could not delete asset.'));\n this.alertService.danger(alertMessage);\n }\n }\n\n private async deactivateSmartrulesForAsset(asset: IManagedObject, parentRef: IManagedObject) {\n const { id: assetId } = asset;\n const { id: parentId } = parentRef;\n const rules: IRule[] = (await this.smartRulesService.listByContext(parentId)).data;\n\n const upateSmartrulesPromises = rules.map(rule =>\n this.smartRulesService.bulkDeactivateEnabledSources(rule, [assetId])\n );\n\n try {\n await Promise.all(upateSmartrulesPromises);\n } catch (error) {\n const alertMessage = this.translateService.instant(\n gettext('Could not deactivate smart rules.')\n );\n this.alertService.danger(alertMessage);\n }\n }\n\n private isDeviceUser(userId: string) {\n return userId.match(/^device_/);\n }\n\n private async deleteDeviceWithUser(device: IManagedObject, cascade: boolean) {\n const params = { cascade, withDeviceUser: true };\n try {\n return await this.inventoryService.delete(device, params);\n } catch (error) {\n return await this.inventoryService.delete(device, { cascade });\n }\n }\n\n private getAssetsFilters(columns: DeviceGridColumn[], pagination: Pagination, baseQuery) {\n const query = this.queriesUtil.addAndFilter(this.getQueryObj(columns), baseQuery);\n return {\n query: this.queriesUtil.buildQuery(query),\n pageSize: pagination.pageSize || this.DEFAULT_PAGE_SIZE,\n currentPage: pagination.currentPage,\n withTotalPages: true\n };\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { IManagedObject, InventoryService, SmartGroupsService } from '@c8y/client';\nimport { AlertService, gettext, ModalService, Status } from '@c8y/ngx-components';\nimport { DeviceGroupService } from '@c8y/ngx-components/assets-navigator';\nimport { TranslateService } from '@ngx-translate/core';\nimport { SubAssetsService } from './sub-assets.service';\n\n@Component({\n selector: 'c8y-group-info',\n templateUrl: './group-info.component.html'\n})\nexport class GroupInfoComponent {\n @Input() group: IManagedObject;\n @Output() onGroupChange = new EventEmitter();\n canEdit: boolean;\n groupIcon: string;\n smartGroupFilter: string;\n filterHintMsg: string;\n\n private filterMsg = gettext(\n 'Smart groups are groups dynamically constructed based on filtering criteria.'\n );\n private canEditMsg = gettext('You can edit the filter here.');\n private readonly GROUP_UPDATED_MSG = gettext('Group updated.');\n constructor(\n private inventory: InventoryService,\n private subAssetsService: SubAssetsService,\n private deviceGroupService: DeviceGroupService,\n private smartGroupsService: SmartGroupsService,\n private alertService: AlertService,\n private translate: TranslateService,\n private modalService: ModalService\n ) {}\n\n async ngOnInit() {\n this.canEdit = this.smartGroupsService.isSmartGroupV2(this.group)\n ? this.subAssetsService.canEditSmartGroup()\n : await this.subAssetsService.canEditGroup(this.group);\n this.groupIcon = this.deviceGroupService.icon(this.group);\n this.smartGroupFilter = this.group.c8y_DeviceQueryString;\n\n this.setHintMsg();\n }\n\n isSmartGroup() {\n return this.subAssetsService.isSmartGroup(this.group);\n }\n\n async update(partialGroup: Partial<IManagedObject>) {\n try {\n const isSmartGroup: boolean = this.subAssetsService.isSmartGroup(this.group);\n isSmartGroup\n ? await this.updateSmartGroup(partialGroup)\n : await this.updateGroup(partialGroup);\n } catch (error) {\n this.alertService.addServerFailure(error);\n }\n }\n\n private setHintMsg() {\n const filterMsgTranslated = this.translate.instant(this.filterMsg);\n const canEditMsgTranslated = this.translate.instant(this.canEditMsg);\n this.filterHintMsg = this.canEdit\n ? `${filterMsgTranslated} ${canEditMsgTranslated}`\n : this.filterMsg;\n }\n\n private async updateGroup(partialGroup: Partial<IManagedObject>) {\n const { id } = this.group;\n const group: Partial<IManagedObject> = { id, ...partialGroup };\n\n const updatedGroup = (await this.inventory.update(group)).data;\n this.setGroup(updatedGroup);\n }\n\n private async updateSmartGroup(partialGroup: Partial<IManagedObject>) {\n const { id } = this.group;\n const { c8y_DeviceQueryString } = partialGroup;\n const group: Partial<IManagedObject> = { id, ...partialGroup };\n let updatedGroup: IManagedObject;\n\n if (!c8y_DeviceQueryString) {\n updatedGroup = (await this.smartGroupsService.update(group)).data;\n this.setGroup(updatedGroup);\n return;\n }\n\n try {\n const modalBody = gettext(\n 'You are about to change the smart group filter. Do you want to proceed?'\n );\n const title = gettext('Smart group filter');\n await this.modalService.confirm(title, modalBody, Status.WARNING, {\n ok: gettext('Save'),\n cancel: gettext('Cancel')\n });\n\n if (!(await this.isQueryExecutable(c8y_DeviceQueryString))) {\n return;\n }\n } catch (e) {\n return;\n }\n updatedGroup = (await this.smartGroupsService.update(group)).data;\n this.setGroup(updatedGroup);\n }\n\n private setGroup(group: IManagedObject) {\n this.onGroupChange.emit(group);\n this.alertService.success(this.GROUP_UPDATED_MSG);\n }\n\n private async isQueryExecutable(query: string): Promise<boolean> {\n try {\n const filter = { q: query };\n await this.inventory.list(filter);\n return true;\n } catch (error) {\n this.alertService.addServerFailure(error);\n return false;\n }\n }\n}\n","import { Component, EventEmitter, OnDestroy, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { IIdentified, IManagedObject } from '@c8y/client';\nimport { AppStateService, DisplayOptions } from '@c8y/ngx-components';\nimport { DeviceGroupService } from '@c8y/ngx-components/assets-navigator';\nimport { Subscription } from 'rxjs';\nimport { SubAssetsService } from './sub-assets.service';\n\n@Component({\n selector: 'c8y-sub-assets',\n templateUrl: './sub-assets.component.html'\n})\nexport class SubAssetsComponent implements OnInit, OnDestroy {\n currentGroupId: IIdentified;\n showChildrenForDevice: IManagedObject;\n title: string;\n toggle: boolean = false;\n showAddGroup: boolean = false;\n showAssignDevices: boolean = false;\n requestInProgress: boolean;\n group: IManagedObject;\n showGroupInfo: boolean = true;\n showAssignChildDevices: boolean = false;\n refresh: EventEmitter<any> = new EventEmitter();\n filterable: boolean = true;\n shouldDisableAddGroup: boolean = false;\n shouldDisableAssignDevices: boolean = false;\n displayOptions: DisplayOptions;\n private dataSub: Subscription;\n\n constructor(\n private route: ActivatedRoute,\n private appState: AppStateService,\n private deviceGroupService: DeviceGroupService,\n private subAssetsService: SubAssetsService\n ) {\n this.dataSub = this.route.parent.data.subscribe(({ contextData }) => {\n this.title = contextData.name;\n this.currentGroupId = contextData.id;\n this.group = contextData;\n this.filterable = !this.deviceGroupService.isDynamicGroup(contextData);\n });\n }\n\n async ngOnInit() {\n this.appState.state$.subscribe(state => {\n this.showGroupInfo = state.app.name === 'cockpit' || state.app.name === 'devicemanagement';\n });\n this.shouldDisableAddGroup = !this.subAssetsService.canCreateGroup();\n this.shouldDisableAssignDevices = await !this.subAssetsService.canAssignDevice(this.group);\n\n this.displayOptions = {\n striped: true,\n bordered: false,\n gridHeader: true,\n filter: !this.isSmartGroup()\n };\n }\n\n groupChange(group: IManagedObject): void {\n /**\n * Group is cached in the context-route guard. To avoid loading old data (when switching tabs) we need to update\n * this object in the cache.\n */\n Object.assign(this.group, group);\n this.title = group.name;\n this.refresh.emit();\n }\n\n isSmartGroup() {\n return this.subAssetsService.isSmartGroup(this.group);\n }\n\n ngOnDestroy(): void {\n if (this.dataSub) {\n this.dataSub.unsubscribe();\n }\n }\n}\n","import { Component, Input, ViewChild } from '@angular/core';\nimport { IManagedObject } from '@c8y/client';\nimport {\n ConfirmModalComponent,\n gettext,\n ModalLabels,\n Status,\n StatusType\n} from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Subject } from 'rxjs';\nimport { DeleteModalCheckboxes } from './delete-assets-modal.model';\n\n@Component({\n selector: 'c8y-delete-assets-modal',\n templateUrl: './delete-assets-modal.component.html'\n})\nexport class DeleteAssetsModalComponent {\n @Input() showWithCascadeCheckbox: boolean = true;\n @Input() showWithDeviceUserCheckbox: boolean = false;\n @Input() asset: IManagedObject;\n @ViewChild('modalRef', { static: false }) modalRef: ConfirmModalComponent;\n closeSubject: Subject<DeleteModalCheckboxes> = new Subject();\n labels: ModalLabels = { ok: gettext('Delete'), cancel: gettext('Cancel') };\n title = gettext('Delete asset');\n status: StatusType = Status.DANGER;\n config: DeleteModalCheckboxes = {\n cascade: false,\n withDeviceUser: false\n };\n message: string;\n\n constructor(private translateService: TranslateService) {}\n\n ngOnInit() {\n this.message = this.translateService.instant(\n gettext(\n 'You are about to delete asset: \"{{name}}\". This operation is irreversible. Do you want to proceed?'\n ),\n { name: this.asset.name }\n );\n }\n\n async ngAfterViewInit() {\n try {\n await this.modalRef.result;\n this.onClose();\n } catch (error) {\n this.onDismiss();\n }\n }\n\n onClose() {\n this.closeSubject.next(this.config);\n this.closeSubject.complete();\n }\n\n onDismiss() {\n this.closeSubject.complete();\n }\n}\n","import { Component, Input, ViewChild } from '@angular/core';\nimport { IManagedObject } from '@c8y/client';\nimport {\n ConfirmModalComponent,\n gettext,\n ModalLabels,\n Status,\n StatusType\n} from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Subject } from 'rxjs';\n@Component({\n selector: 'c8y-unassign-modal',\n templateUrl: './unassign-modal.component.html'\n})\nexport class UnassignModalComponent {\n @Input() asset: IManagedObject;\n @ViewChild('modalRef', { static: false }) modalRef: ConfirmModalComponent;\n message: string;\n closeSubject: Subject<boolean> = new Subject();\n labels: ModalLabels = { ok: gettext('Unassign'), cancel: gettext('Cancel') };\n title = gettext('Unassign asset');\n status: StatusType = Status.WARNING;\n\n constructor(private translateService: TranslateService) {}\n\n ngOnInit() {\n this.message = this.translateService.instant(\n gettext('You are about to unassign asset \"{{name}}\". Do you want to proceed?'),\n { name: this.asset.name }\n );\n }\n\n async ngAfterViewInit() {\n try {\n await this.modalRef.result;\n this.onClose();\n } catch (error) {\n this.onDismiss();\n }\n }\n\n onClose() {\n this.closeSubject.next(true);\n this.closeSubject.complete();\n }\n\n onDismiss() {\n this.closeSubject.complete();\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport { IManagedObject, SmartGroupsService } from '@c8y/client';\nimport {\n ActionControl,\n AlertService,\n BuiltInActionType,\n BulkActionControl,\n DataGridComponent,\n DataSourceModifier,\n DisplayOptions,\n gettext,\n Pagination,\n Row,\n ServerSideDataResult\n} from '@c8y/ngx-components';\nimport { DeviceGridColumn } from '@c8y/ngx-components/device-grid';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { DeleteModalCheckboxes } from './delete-assets-modal';\nimport { DeleteAssetsModalComponent } from './delete-assets-modal/delete-assets-modal.component';\nimport { SubAssetsService } from './sub-assets.service';\nimport { UnassignModalComponent } from './unassign-assets-modal/unassign-modal.component';\n@Component({\n selector: 'c8y-sub-assets-grid',\n templateUrl: './sub-assets-grid.component.html'\n})\nexport class SubAssetsGridComponent implements OnInit {\n @Input('parent-group') parentGroup: IManagedObject;\n @Input() refresh: EventEmitter<any>;\n @Input() title: string = gettext('Subassets');\n @Input() emptyStateText: string = gettext(\n 'Add your first group or assign devices using the buttons on the toolbar.'\n );\n @Input() loadingItemsLabel: string = gettext('Loading assets…');\n\n get columns() {\n return this._columns;\n }\n @Input() set columns(value: DeviceGridColumn[]) {\n if (value) {\n this._columns = this.subAssetsGridService.getUserConfiguredColumns(value);\n } else {\n this._columns = this.subAssetsGridService.getUserConfiguredColumns(\n this.subAssetsGridService.getDefaultColumns()\n );\n }\n }\n @Input('pagination') set _pagination(value: Pagination) {\n if (value) {\n this.pagination = value;\n } else {\n this.pagination = this.subAssetsGridService.getDefaultPagination();\n }\n }\n @Input('actionControls') set _actionControls(value: ActionControl[]) {\n if (value) {\n this.actionControls = value;\n } else {\n this.actionControls = this.subAssetsGridService.getDefaultActionControls();\n }\n }\n @Input() selectable: boolean = false;\n @Input() baseQuery: any = {};\n @Input('bulkActionControls') set _bulkActionControls(value: BulkActionControl[]) {\n if (value) {\n this.bulkActionControls = value;\n } else {\n this.bulkActionControls = this.subAssetsGridService.getDefaultBulkActionControls();\n }\n }\n @Input() filterable: boolean = true;\n @Input() sortable: boolean = true;\n @Output() onColumnsChange: EventEmitter<DeviceGridColumn[]> = new EventEmitter<\n DeviceGridColumn[]\n >();\n @Output() itemsSelect: EventEmitter<string[]> = new EventEmitter<string[]>();\n\n pagination: Pagination = this.subAssetsGridService.getDefaultPagination();\n actionControls: ActionControl[];\n bulkActionControls: BulkActionControl[] =\n this.subAssetsGridService.getDefaultBulkActionControls();\n serverSideDataCallback: any;\n\n @ViewChild(DataGridComponent, { static: true })\n dataGrid: DataGridComponent;\n\n displayOptions: DisplayOptions = {\n striped: true,\n bordered: false,\n gridHeader: true,\n filter: true\n };\n\n private _columns: DeviceGridColumn[];\n\n get isRootGroup() {\n return !this.parentGroup;\n }\n\n get getInfiniteScrollMode() {\n return this.isRootGroup && this.subAssetsGridService.isUsingInventoryRoles()\n ? 'auto'\n : undefined;\n }\n\n @Input('displayOptions')\n set _displayOptions(displayOptions) {\n this.displayOptions = { ...this.displayOptions, ...displayOptions };\n }\n\n constructor(\n public subAssetsGridService: SubAssetsService,\n private alert: AlertService,\n private bsModalService: BsModalService,\n private smartGroupsService: SmartGroupsService\n ) {\n this.serverSideDataCallback = this.onDataSourceModifier.bind(this);\n }\n\n ngOnInit() {\n this.columns = this.subAssetsGridService.getDefaultColumns(this.filterable, this.sortable);\n if (!this.filterable || !this.sortable) {\n this.columns.forEach(column => {\n column.filterable = this.filterable;\n column.sortable = this.sortable;\n });\n }\n this.setActionControls();\n }\n\n async setActionControls() {\n const actionControls: ActionControl[] = [];\n const { data: isMicroserviceInstalled } =\n await this.smartGroupsService.isSmartGroupsV2MicroserviceInstalled();\n\n const deleteAction: ActionControl = {\n type: BuiltInActionType.Delete,\n callback: (asset: Row) => this.onDeleteAsset(asset as IManagedObject, this.parentGroup),\n showIf: (asset: Row) => {\n if (this.smartGroupsService.isSmartGroupV2(asset as IManagedObject)) {\n return isMicroserviceInstalled ? this.subAssetsGridService.canDeleteSmartGroup() : false;\n }\n\n if (this.smartGroupsService.isSmartGroup(asset as IManagedObject)) {\n return this.subAssetsGridService.canDeleteSmartGroup();\n }\n\n return true;\n }\n };\n\n actionControls.push(deleteAction);\n\n const unassignAction: ActionControl = {\n type: 'UNASSIGN',\n icon: 'unlink',\n text: gettext('Unassign'),\n callback: (asset: Row) => this.onUnassignAsset(asset as IManagedObject, this.parentGroup),\n showIf: (asset: Row) =>\n this.subAssetsGridService.isDevice(asset as IManagedObject) &&\n !this.subAssetsGridService.isSmartGroup(this.parentGroup as IManagedObject)\n };\n\n actionControls.push(unassignAction);\n\n if (!this.actionControls) {\n this.actionControls = actionControls;\n }\n }\n\n onUnassignAsset(asset: IManagedObject, parentRef: IManagedObject) {\n const initialState = {\n asset\n };\n const modalRef = this.bsModalService.show(UnassignModalComponent, { initialState });\n\n modalRef.content.closeSubject.subscribe(async (result: boolean) => {\n if (result) {\n await this.subAssetsGridService.unassignAsset(asset, parentRef);\n this.refresh.emit();\n }\n });\n }\n\n async onDeleteAsset(asset: IManagedObject, parentRef: IManagedObject) {\n const initialState = {\n showWithDeviceUserCheckbox: this.subAssetsGridService.shouldShowWithDeviceUserCheckbox(asset),\n asset,\n showWithCascadeCheckbox:\n !this.smartGroupsService.isSmartGroup(asset) &&\n !this.smartGroupsService.isSmartGroupV2(asset)\n };\n\n const modalRef = this.bsModalService.show(DeleteAssetsModalComponent, { initialState });\n\n modalRef.content.closeSubject.subscribe(async (result: DeleteModalCheckboxes) => {\n if (result) {\n await this.subAssetsGridService.deleteAsset(asset, parentRef, result);\n this.alert.warning(\n gettext('The counter for the total number of items might be inaccurate.')\n );\n this.refresh.emit();\n }\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.parentGroup && !changes.parentGroup.firstChange) {\n this.dataGrid.reload();\n }\n }\n\n trackByName(_index, column: DeviceGridColumn): string {\n return column.name;\n }\n\n async onDataSourceModifier(\n dataSourceModifier: DataSourceModifier\n ): Promise<ServerSideDataResult> {\n const promises = [];\n let counters;\n\n promises.push(\n this.subAssetsGridService.getData(\n dataSourceModifier.columns,\n dataSourceModifier.pagination,\n this.parentGroup,\n this.baseQuery\n )\n );\n\n promises.push(this.subAssetsGridService.getTotal(this.parentGroup, this.baseQuery));\n promises.push(\n this.subAssetsGridService.getCount(\n dataSourceModifier.columns,\n dataSourceModifier.pagination,\n this.parentGroup,\n this.baseQuery\n )\n );\n\n const [dataResponse, size, filteredSize] = await Promise.all(promises);\n if (!counters) {\n counters = {\n size,\n filteredSize\n };\n }\n this.onColumnsChange.emit(dataSourceModifier.columns);\n\n return {\n res: dataResponse.res,\n data: dataResponse.data,\n paging: dataResponse.paging,\n ...counters\n };\n }\n\n configChange(config) {\n this.subAssetsGridService.saveConfig(config);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { IIdentified, IManagedObject, InventoryService } from '@c8y/client';\nimport { GroupForm } from './add-group.model';\nimport { GroupFragment } from '@c8y/ngx-components/assets-navigator';\n\n@Injectable()\nexport class AddGroupService {\n private GROUP_FRAGMENT_TYPE = 'c8y_IsDeviceGroup';\n\n constructor(private inventoryService: InventoryService) {}\n\n async createGroupAndAssignDevices(\n groupForm: GroupForm,\n groupContextId: string | number,\n selectedDevices: string[]\n ): Promise<IManagedObject | IIdentified> {\n let group: IManagedObject | IIdentified;\n const { name, description } = groupForm;\n const newGroupMO = this.getGroupMO(name, description, groupContextId);\n\n if (groupContextId) {\n group = (await this.inventoryService.childAssetsCreate(newGroupMO, groupContextId)).data;\n } else {\n group = (await this.inventoryService.create(newGroupMO)).data;\n }\n\n if (selectedDevices.length > 0) {\n await this.assignDevices(group.id, selectedDevices);\n }\n\n return group;\n }\n\n private getGroupMO(\n name: string,\n description: string = '',\n groupContextId: string | number\n ): Partial<IManagedObject> {\n const group = {\n type: this.getGroupType(groupContextId),\n [this.GROUP_FRAGMENT_TYPE]: {},\n name,\n c8y_Notes: description\n };\n\n return group;\n }\n\n private getGroupType(\n groupContextId: string | number\n ): GroupFragment.subGroupType | GroupFragment.groupType {\n return groupContextId ? GroupFragment.subGroupType : GroupFragment.groupType;\n }\n\n private async assignDevices(id: string | number, selectedDevices: string[]) {\n const promises = [];\n\n selectedDevices.forEach(moId => {\n promises.push(this.inventoryService.childAssetsAdd(moId, id));\n });\n\n return await Promise.all(promises);\n }\n}\n","import {\n Component,\n Output,\n EventEmitter,\n ViewChild,\n Input,\n HostListener,\n ElementRef\n} from '@angular/core';\nimport { FormGroup, Validators, FormBuilder } from '@angular/forms';\nimport { Subscription } from 'rxjs';\nimport { DeviceGridService } from '@c8y/ngx-components/device-grid';\nimport { C8yStepper, Pagination, AlertService, gettext } from '@c8y/ngx-components';\nimport { AddGroupService } from './add-group.service';\nimport { SubAssetsService } from '../sub-assets.service';\nimport { IManagedObject } from '@c8y/client';\n\n@Component({\n selector: 'c8y-add-group',\n templateUrl: './add-group.component.html'\n})\nexport class AddGroupComponent {\n @Input() currentGroupId: string;\n @Input() refresh = new EventEmitter<any>();\n @Output() onDeviceQueryStringChange: EventEmitter<string> = new EventEmitter<string>();\n @Output() onCancel = new EventEmitter<any>();\n @ViewChild(C8yStepper, { static: false })\n stepper: C8yStepper;\n @ViewChild('nameRef', { static: false })\n nameInputRef: ElementRef;\n deviceQueryStringOutput: string;\n formGroupStepOne: FormGroup;\n pendingStatus: boolean = false;\n pagination: Pagination = { pageSize: 20, currentPage: 1 };\n selected: string[] = [];\n subscription: Subscription;\n canCreateGroup: boolean = false;\n canAssignDevice: boolean = false;\n\n readonly ITEMS_SELECT_LIMIT: number = 15;\n readonly btnLabels = {\n next: gettext('Next'),\n cancel: gettext('Cancel'),\n create: gettext('Create')\n };\n\n private nameInput: HTMLInputElement;\n\n constructor(\n protected deviceGridService: DeviceGridService,\n private fb: FormBuilder,\n private addGroupService: AddGroupService,\n private alert: AlertService,\n private subAssetsService: SubAssetsService\n ) {}\n\n @HostListener('document:keydown.enter', ['$event']) onEnterKeyDown(event: KeyboardEvent) {\n // Order matters! Needs to be placed before this.stepper.next\n if ((this.isGroupDetailsStep() && !this.canAssignDevice) || this.isAssignDeviceStep()) {\n this.createGroup();\n return;\n }\n this.stepper.next();\n }\n\n @HostListener('document:keydown.escape', ['$event']) onEscapeKeyDown(event: KeyboardEvent) {\n this.onCancel.emit();\n }\n\n async ngOnInit() {\n this.formGroupStepOne = this.fb.group({\n name: ['', Validators.required],\n description: ['']\n });\n this.subscription = this.onCancel.subscribe(() => this.resetStepper());\n this.canCreateGroup = this.subAssetsService.canCreateGroup();\n this.canAssignDevice = await this.subAssetsService.canAssignDevice({\n id: this.currentGroupId\n } as IManagedObject);\n }\n\n ngAfterViewInit() {\n this.nameInput = this.nameInputRef.nativeElement as HTMLInputElement;\n this.setFocusOnNameInput();\n }\n\n async createGroup() {\n if (this.canCreateGroup === false) {\n return;\n }\n\n this.pendingStatus = true;\n await this.addGroupService.createGroupAndAssignDevices(\n this.formGroupStepOne.value,\n this.currentGroupId,\n this.selected\n );\n\n this.pendingStatus = false;\n this.resetStepper();\n this.alert.success(gettext('Group created.'));\n\n this.refresh.emit();\n this.onCancel.emit();\n }\n\n onSelected(selectedDevicesIDs: string[]) {\n this.selected = selectedDevicesIDs;\n }\n\n resetStepper() {\n this.stepper.reset();\n this.stepper.selectedIndex = 1;\n this.selected = [];\n }\n\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n private isGroupDetailsStep() {\n return this.stepper.selectedIndex === 0;\n }\n\n private isAssignDeviceStep() {\n return this.stepper.selectedIndex === 1;\n }\n\n private setFocusOnNameInput() {\n if (this.nameInput) {\n this.nameInput.focus();\n this.nameInput.select();\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CoreModule, HOOK_ONCE_ROUTE } from '@c8y/ngx-components';\nimport { DeviceGridModule } from '@c8y/ngx-components/device-grid';\nimport { AddGroupComponent } from './add-group.component';\nimport { AddGroupService } from './add-group.service';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\n@NgModule({\n declarations: [AddGroupComponent],\n imports: [CoreModule, DeviceGridModule, FormsModule, ReactiveFormsModule],\n entryComponents: [AddGroupComponent],\n exports: [AddGroupComponent],\n providers: [\n {\n provide: HOOK_ONCE_ROUTE,\n useValue: [\n {\n path: 'add-group',\n component: AddGroupComponent\n }\n ],\n multi: true\n },\n AddGroupService\n ]\n})\nexport class AddGroupModule {}\n","import { Component, EventEmitter, OnInit } from '@angular/core';\nimport { Permissions } from '@c8y/ngx-components';\nimport { SubAssetsService } from './sub-assets.service';\n\n@Component({\n selector: 'c8y-groups-name',\n templateUrl: './groups.component.html'\n})\nexport class GroupsComponent implements OnInit {\n refresh: EventEmitter<any> = new EventEmitter();\n showAddGroup = false;\n filterable: boolean = false;\n sortable: boolean = true;\n shouldDisableAddGroup: boolean = false;\n constructor(private permissions: Permissions, private subAssetsService: SubAssetsService) {}\n\n ngOnInit() {\n if (!this.permissions.hasRole('ROLE_INVENTORY_READ')) {\n this.sortable = false;\n }\n this.shouldDisableAddGroup = !this.subAssetsService.canCreateGroup();\n }\n}\n","import { Component, Input, Output, EventEmitter, HostListener } from '@angular/core';\nimport { Pagination, AlertService, gettext, ActionControl, Row } from '@c8y/ngx-components';\nimport { InventoryService } from '@c8y/client';\nimport { SubAssetsService } from '../sub-assets.service';\nimport { IManagedObject } from '@c8y/client';\n\n@Component({\n selector: 'c8y-assign-devices',\n templateUrl: './assign-devices.component.html'\n})\nexport class AssignDevicesComponent {\n @Input() currentGroupId: string;\n @Input() refresh = new EventEmitter<any>();\n @Output() onCancel = new EventEmitter<any>();\n @Output() onShowChildDevices = new EventEmitter<boolean>();\n @Output() selectedDevice = new EventEmitter<IManagedObject>();\n\n deviceQueryStringOutput: string;\n pendingStatus: boolean = false;\n pagination: Pagination = { pageSize: 20, currentPage: 1 };\n selected: string[] = [];\n baseQuery: any;\n canAssignDevice: boolean = false;\n actionControls: ActionControl[] = [];\n readonly isSelectable = true;\n\n constructor(\n private alert: AlertService,\n private subAssetsService: SubAssetsService,\n private inventoryService: InventoryService\n ) {}\n\n @HostListener('document:keydown.enter', ['$event']) onEnterKeyDown(event: KeyboardEvent) {\n if (this.selected.length > 0) {\n this.assignDevices();\n }\n }\n\n @HostListener('document:keydown.escape', ['$event']) onEscapeKeyDown(event: KeyboardEvent) {\n this.onCancel.emit();\n }\n\n async ngOnInit() {\n this.setNotIncludedInGroupQuery();\n this.canAssignDevice = await this.subAssetsService.canAssignDevice({\n id: this.currentGroupId\n } as IManagedObject);\n }\n\n setNotIncludedInGroupQuery() {\n const notIncludedInGroupQuery = { __not: { __bygroupid: this.currentGroupId } };\n this.baseQuery = notIncludedInGroupQuery;\n }\n\n setActionControls(showChildren: boolean) {\n const actionControls: ActionControl[] = [];\n const selectChildrenAction: ActionControl = {\n type: 'SELECT_CHILDREN',\n icon: 'enter-bottom',\n text: gettext('Select children'),\n callback: (asset: Row) => this.selectChildren(asset as IManagedObject),\n showIf: (asset: Row) =>\n asset.childDevices.references.length > 0\n };\n\n if (showChildren) {\n actionControls.push(selectChildrenAction);\n }\n this.actionControls = actionControls;\n this.refresh.emit();\n }\n\n async assignDevices() {\n if (this.canAssignDevice === false) {\n return;\n }\n this.pendingStatus = true;\n\n try {\n await this.inventoryService.childAssetsBulkAdd(this.selected, this.currentGroupId);\n this.refresh.emit();\n this.alert.success(gettext('Devices assigned to the group.'));\n } catch (error) {\n this.alert.danger(gettext('Could not assign devices to the group'), error);\n }\n this.pendingStatus = false;\n this.selected = [];\n this.onCancel.emit();\n }\n\n onSelected(selectedDevicesIDs: string[]) {\n this.selected = selectedDevicesIDs;\n }\n\n selectChildren(asset: IManagedObject) {\n this.onShowChildDevices.emit(true);\n this.selectedDevice.emit(asset);\n }\n}\n","import { Component, Input, Output, EventEmitter, HostListener } from '@angular/core';\nimport { AlertService, gettext } from '@c8y/ngx-components';\nimport { InventoryService } from '@c8y/client';\nimport { SubAssetsService } from '../sub-assets.service';\nimport { IManagedObject } from '@c8y/client';\n\n@Component({\n selector: 'c8y-assign-child-devices',\n templateUrl: './assign-child-devices.component.html'\n})\nexport class AssignChildDevicesComponent {\n @Input() currentGroupId: string;\n @Input() parentDevice: IManagedObject;\n @Output() onCancel = new EventEmitter<any>();\n @Input() refresh = new EventEmitter<any>();\n\n selected: string[] = [];\n baseQuery: any;\n canAssignDevice: boolean = false;\n pendingStatus: boolean = false;\n\n constructor(\n private alert: AlertService,\n private subAssetsService: SubAssetsService,\n private inventoryService: InventoryService\n ) {}\n\n @HostListener('document:keydown.enter', ['$event']) onEnterKeyDown(event: KeyboardEvent) {\n if (this.selected.length > 0) {\n this.assignDevices();\n }\n }\n\n @HostListener('document:keydown.escape', ['$event']) onEscapeKeyDown(event: KeyboardEvent) {\n this.onCancel.emit();\n }\n\n async ngOnInit() {\n this.setNotIncludedInGroupQuery();\n this.canAssignDevice = await this.subAssetsService.canAssignDevice({\n id: this.currentGroupId\n } as IManagedObject);\n }\n\n setNotIncludedInGroupQuery() {\n const notIncludedInGroupQuery = { __not: { __bygroupid: this.currentGroupId } };\n this.baseQuery = notIncludedInGroupQuery;\n }\n\n async assignDevices() {\n if (this.canAssignDevice === false) {\n return;\n }\n this.pendingStatus = true;\n\n try {\n await this.inventoryService.childAssetsBulkAdd(this.selected, this.currentGroupId);\n this.refresh.emit();\n this.alert.success(gettext('Child devices assigned to the group.'));\n } catch (error) {\n this.alert.danger(gettext('Could not assign child devices to the group'), error);\n }\n this.pendingStatus = false;\n this.selected = [];\n this.onCancel.emit();\n }\n\n onSelected(selectedDevicesIDs: string[]) {\n this.selected = selectedDevicesIDs;\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 { AddGroupModule } from './add-group/add-group.module';\nimport { AssetTypeCellRendererComponent } from './columns/asset-type.cell-renderer.component';\nimport { DeleteAssetsModalComponent } from './delete-assets-modal/delete-assets-modal.component';\nimport { GroupInfoComponent } from './group-info.component';\nimport { GroupsComponent } from './groups.component';\nimport { SubAssetsGridComponent } from './sub-assets-grid.component';\nimport { SubAssetsComponent } from './sub-assets.component';\nimport { SubAssetsService } from './sub-assets.service';\nimport { UnassignModalComponent } from './unassign-assets-modal/unassign-modal.component';\nimport { AssignDevicesComponent } from './assign-devices/assign-devices.component';\nimport { AssignChildDevicesComponent } from './assign-devices/assign-child-devices.component';\n\n@NgModule({\n declarations: [\n SubAssetsComponent,\n SubAssetsGridComponent,\n AssetTypeCellRendererComponent,\n GroupsComponent,\n GroupInfoComponent,\n DeleteAssetsModalComponent,\n UnassignModalComponent,\n AssignDevicesComponent,\n AssignChildDevicesComponent\n ],\n imports: [CoreModule, DeviceGridModule, AddGroupModule, PopoverModule],\n entryComponents: [\n SubAssetsComponent,\n AssetTypeCellRendererComponent,\n GroupsComponent,\n DeleteAssetsModalComponent,\n UnassignModalComponent\n ],\n exports: [],\n providers: [\n {\n provide: HOOK_ONCE_ROUTE,\n useValue: [\n {\n context: ViewContext.Group,\n path: 'subassets',\n priority: 1000,\n icon: 'c8y-group-open',\n label: gettext('Subassets'),\n component: SubAssetsComponent\n },\n {\n path: 'group',\n component: GroupsComponent\n }\n ],\n multi: true\n },\n SubAssetsService\n ]\n})\nexport class SubAssetsModule {}\n"]}
|
|
@@ -61,7 +61,6 @@ export class AddGroupComponent {
|
|
|
61
61
|
return;
|
|
62
62
|
}
|
|
63
63
|
this.pendingStatus = true;
|
|
64
|
-
this.subAssetsService.uiOnlyCountersUpdate.next('INCREASE');
|
|
65
64
|
yield this.addGroupService.createGroupAndAssignDevices(this.formGroupStepOne.value, this.currentGroupId, this.selected);
|
|
66
65
|
this.pendingStatus = false;
|
|
67
66
|
this.resetStepper();
|
|
@@ -119,4 +118,4 @@ AddGroupComponent.propDecorators = {
|
|
|
119
118
|
onEnterKeyDown: [{ type: HostListener, args: ['document:keydown.enter', ['$event'],] }],
|
|
120
119
|
onEscapeKeyDown: [{ type: HostListener, args: ['document:keydown.escape', ['$event'],] }]
|
|
121
120
|
};
|
|
122
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3N1Yi1hc3NldHMvYWRkLWdyb3VwL2FkZC1ncm91cC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsTUFBTSxFQUNOLFlBQVksRUFDWixTQUFTLEVBQ1QsS0FBSyxFQUNMLFlBQVksRUFFYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWEsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXBFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxVQUFVLEVBQWMsWUFBWSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQU96RCxNQUFNLE9BQU8saUJBQWlCO0lBMkI1QixZQUNZLGlCQUFvQyxFQUN0QyxFQUFlLEVBQ2YsZUFBZ0MsRUFDaEMsS0FBbUIsRUFDbkIsZ0JBQWtDO1FBSmhDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDdEMsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUNmLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxVQUFLLEdBQUwsS0FBSyxDQUFjO1FBQ25CLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUE5Qm5DLFlBQU8sR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ2pDLDhCQUF5QixHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBQzdFLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBTzdDLGtCQUFhLEdBQVksS0FBSyxDQUFDO1FBQy9CLGVBQVUsR0FBZSxFQUFFLFFBQVEsRUFBRSxFQUFF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RW1pdHRlcixcbiAgVmlld0NoaWxkLFxuICBJbnB1dCxcbiAgSG9zdExpc3RlbmVyLFxuICBFbGVtZW50UmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwLCBWYWxpZGF0b3JzLCBGb3JtQnVpbGRlciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGV2aWNlR3JpZFNlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2RldmljZS1ncmlkJztcbmltcG9ydCB7IEM4eVN0ZXBwZXIsIFBhZ2luYXRpb24sIEFsZXJ0U2VydmljZSwgZ2V0dGV4dCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgQWRkR3JvdXBTZXJ2aWNlIH0gZnJvbSAnLi9hZGQtZ3JvdXAuc2VydmljZSc7XG5pbXBvcnQgeyBTdWJBc3NldHNTZXJ2aWNlIH0gZnJvbSAnLi4vc3ViLWFzc2V0cy5zZXJ2aWNlJztcbmltcG9ydCB7IElNYW5hZ2VkT2JqZWN0IH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktYWRkLWdyb3VwJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FkZC1ncm91cC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgQWRkR3JvdXBDb21wb25lbnQge1xuICBASW5wdXQoKSBjdXJyZW50R3JvdXBJZDogc3RyaW5nO1xuICBASW5wdXQoKSByZWZyZXNoID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBvbkRldmljZVF1ZXJ5U3RyaW5nQ2hhbmdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgb25DYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQFZpZXdDaGlsZChDOHlTdGVwcGVyLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgc3RlcHBlcjogQzh5U3RlcHBlcjtcbiAgQFZpZXdDaGlsZCgnbmFtZVJlZicsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBuYW1lSW5wdXRSZWY6IEVsZW1lbnRSZWY7XG4gIGRldmljZVF1ZXJ5U3RyaW5nT3V0cHV0OiBzdHJpbmc7XG4gIGZvcm1Hcm91cFN0ZXBPbmU6IEZvcm1Hcm91cDtcbiAgcGVuZGluZ1N0YXR1czogYm9vbGVhbiA9IGZhbHNlO1xuICBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uID0geyBwYWdlU2l6ZTogMjAsIGN1cnJlbnRQYWdlOiAxIH07XG4gIHNlbGVjdGVkOiBzdHJpbmdbXSA9IFtdO1xuICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgY2FuQ3JlYXRlR3JvdXA6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY2FuQXNzaWduRGV2aWNlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcmVhZG9ubHkgSVRFTVNfU0VMRUNUX0xJTUlUOiBudW1iZXIgPSAxNTtcbiAgcmVhZG9ubHkgYnRuTGFiZWxzID0ge1xuICAgIG5leHQ6IGdldHRleHQoJ05leHQnKSxcbiAgICBjYW5jZWw6IGdldHRleHQoJ0NhbmNlbCcpLFxuICAgIGNyZWF0ZTogZ2V0dGV4dCgnQ3JlYXRlJylcbiAgfTtcblxuICBwcml2YXRlIG5hbWVJbnB1dDogSFRNTElucHV0RWxlbWVudDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgZGV2aWNlR3JpZFNlcnZpY2U6IERldmljZUdyaWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgYWRkR3JvdXBTZXJ2aWNlOiBBZGRHcm91cFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydDogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3ViQXNzZXRzU2VydmljZTogU3ViQXNzZXRzU2VydmljZVxuICApIHt9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bi5lbnRlcicsIFsnJGV2ZW50J10pIG9uRW50ZXJLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgLy8gT3JkZXIgbWF0dGVycyEgTmVlZHMgdG8gYmUgcGxhY2VkIGJlZm9yZSB0aGlzLnN0ZXBwZXIubmV4dFxuICAgIGlmICgodGhpcy5pc0dyb3VwRGV0YWlsc1N0ZXAoKSAmJiAhdGhpcy5jYW5Bc3NpZ25EZXZpY2UpIHx8IHRoaXMuaXNBc3NpZ25EZXZpY2VTdGVwKCkpIHtcbiAgICAgIHRoaXMuY3JlYXRlR3JvdXAoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zdGVwcGVyLm5leHQoKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24uZXNjYXBlJywgWyckZXZlbnQnXSkgb25Fc2NhcGVLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgdGhpcy5vbkNhbmNlbC5lbWl0KCk7XG4gIH1cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmZvcm1Hcm91cFN0ZXBPbmUgPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIG5hbWU6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICBkZXNjcmlwdGlvbjogWycnXVxuICAgIH0pO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5vbkNhbmNlbC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5yZXNldFN0ZXBwZXIoKSk7XG4gICAgdGhpcy5jYW5DcmVhdGVHcm91cCA9IHRoaXMuc3ViQXNzZXRzU2VydmljZS5jYW5DcmVhdGVHcm91cCgpO1xuICAgIHRoaXMuY2FuQXNzaWduRGV2aWNlID0gYXdhaXQgdGhpcy5zdWJBc3NldHNTZXJ2aWNlLmNhbkFzc2lnbkRldmljZSh7XG4gICAgICBpZDogdGhpcy5jdXJyZW50R3JvdXBJZFxuICAgIH0gYXMgSU1hbmFnZWRPYmplY3QpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMubmFtZUlucHV0ID0gdGhpcy5uYW1lSW5wdXRSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIHRoaXMuc2V0Rm9jdXNPbk5hbWVJbnB1dCgpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlR3JvdXAoKSB7XG4gICAgaWYgKHRoaXMuY2FuQ3JlYXRlR3JvdXAgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wZW5kaW5nU3RhdHVzID0gdHJ1ZTtcbiAgICB0aGlzLnN1YkFzc2V0c1NlcnZpY2UudWlPbmx5Q291bnRlcnNVcGRhdGUubmV4dCgnSU5DUkVBU0UnKTtcbiAgICBhd2FpdCB0aGlzLmFkZEdyb3VwU2VydmljZS5jcmVhdGVHcm91cEFuZEFzc2lnbkRldmljZXMoXG4gICAgICB0aGlzLmZvcm1Hcm91cFN0ZXBPbmUudmFsdWUsXG4gICAgICB0aGlzLmN1cnJlbnRHcm91cElkLFxuICAgICAgdGhpcy5zZWxlY3RlZFxuICAgICk7XG5cbiAgICB0aGlzLnBlbmRpbmdTdGF0dXMgPSBmYWxzZTtcbiAgICB0aGlzLnJlc2V0U3RlcHBlcigpO1xuICAgIHRoaXMuYWxlcnQuc3VjY2VzcyhnZXR0ZXh0KCdHcm91cCBjcmVhdGVkLicpKTtcblxuICAgIHRoaXMucmVmcmVzaC5lbWl0KCk7XG4gICAgdGhpcy5vbkNhbmNlbC5lbWl0KCk7XG4gIH1cblxuICBvblNlbGVjdGVkKHNlbGVjdGVkRGV2aWNlc0lEczogc3RyaW5nW10pIHtcbiAgICB0aGlzLnNlbGVjdGVkID0gc2VsZWN0ZWREZXZpY2VzSURzO1xuICB9XG5cbiAgcmVzZXRTdGVwcGVyKCkge1xuICAgIHRoaXMuc3RlcHBlci5yZXNldCgpO1xuICAgIHRoaXMuc3RlcHBlci5zZWxlY3RlZEluZGV4ID0gMTtcbiAgICB0aGlzLnNlbGVjdGVkID0gW107XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpc0dyb3VwRGV0YWlsc1N0ZXAoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RlcHBlci5zZWxlY3RlZEluZGV4ID09PSAwO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0Fzc2lnbkRldmljZVN0ZXAoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RlcHBlci5zZWxlY3RlZEluZGV4ID09PSAxO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRGb2N1c09uTmFtZUlucHV0KCkge1xuICAgIGlmICh0aGlzLm5hbWVJbnB1dCkge1xuICAgICAgdGhpcy5uYW1lSW5wdXQuZm9jdXMoKTtcbiAgICAgIHRoaXMubmFtZUlucHV0LnNlbGVjdCgpO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
121
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3N1Yi1hc3NldHMvYWRkLWdyb3VwL2FkZC1ncm91cC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsTUFBTSxFQUNOLFlBQVksRUFDWixTQUFTLEVBQ1QsS0FBSyxFQUNMLFlBQVksRUFFYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWEsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXBFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxVQUFVLEVBQWMsWUFBWSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQU96RCxNQUFNLE9BQU8saUJBQWlCO0lBMkI1QixZQUNZLGlCQUFvQyxFQUN0QyxFQUFlLEVBQ2YsZUFBZ0MsRUFDaEMsS0FBbUIsRUFDbkIsZ0JBQWtDO1FBSmhDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDdEMsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUNmLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxVQUFLLEdBQUwsS0FBSyxDQUFjO1FBQ25CLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUE5Qm5DLFlBQU8sR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ2pDLDhCQUF5QixHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBQzdFLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBTzdDLGtCQUFhLEdBQVksS0FBSyxDQUFDO1FBQy9CLGVBQVUsR0FBZSxFQUFFLFFBQVEsRUFBRSxFQUFF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QUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDakM7SUFDSCxDQUFDO0lBRU8sa0JBQWtCO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEtBQUssQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFTyxrQkFBa0I7UUFDeEIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsS0FBSyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVPLG1CQUFtQjtRQUN6QixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQzs7O1lBdEhGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsZUFBZTtnQkFDekIscytKQUF5QzthQUMxQzs7O1lBVFEsaUJBQWlCO1lBRk0sV0FBVztZQUlsQyxlQUFlO1lBRFMsWUFBWTtZQUVwQyxnQkFBZ0I7Ozs2QkFRdEIsS0FBSztzQkFDTCxLQUFLO3dDQUNMLE1BQU07dUJBQ04sTUFBTTtzQkFDTixTQUFTLFNBQUMsVUFBVSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTsyQkFFdkMsU0FBUyxTQUFDLFNBQVMsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7NkJBNEJ0QyxZQUFZLFNBQUMsd0JBQXdCLEVBQUUsQ0FBQyxRQUFRLENBQUM7OEJBU2pELFlBQVksU0FBQyx5QkFBeUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIFZpZXdDaGlsZCxcbiAgSW5wdXQsXG4gIEhvc3RMaXN0ZW5lcixcbiAgRWxlbWVudFJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCwgVmFsaWRhdG9ycywgRm9ybUJ1aWxkZXIgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERldmljZUdyaWRTZXJ2aWNlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9kZXZpY2UtZ3JpZCc7XG5pbXBvcnQgeyBDOHlTdGVwcGVyLCBQYWdpbmF0aW9uLCBBbGVydFNlcnZpY2UsIGdldHRleHQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IEFkZEdyb3VwU2VydmljZSB9IGZyb20gJy4vYWRkLWdyb3VwLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3ViQXNzZXRzU2VydmljZSB9IGZyb20gJy4uL3N1Yi1hc3NldHMuc2VydmljZSc7XG5pbXBvcnQgeyBJTWFuYWdlZE9iamVjdCB9IGZyb20gJ0BjOHkvY2xpZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWFkZC1ncm91cCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9hZGQtZ3JvdXAuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEFkZEdyb3VwQ29tcG9uZW50IHtcbiAgQElucHV0KCkgY3VycmVudEdyb3VwSWQ6IHN0cmluZztcbiAgQElucHV0KCkgcmVmcmVzaCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgb25EZXZpY2VRdWVyeVN0cmluZ0NoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIG9uQ2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBWaWV3Q2hpbGQoQzh5U3RlcHBlciwgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIHN0ZXBwZXI6IEM4eVN0ZXBwZXI7XG4gIEBWaWV3Q2hpbGQoJ25hbWVSZWYnLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgbmFtZUlucHV0UmVmOiBFbGVtZW50UmVmO1xuICBkZXZpY2VRdWVyeVN0cmluZ091dHB1dDogc3RyaW5nO1xuICBmb3JtR3JvdXBTdGVwT25lOiBGb3JtR3JvdXA7XG4gIHBlbmRpbmdTdGF0dXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcGFnaW5hdGlvbjogUGFnaW5hdGlvbiA9IHsgcGFnZVNpemU6IDIwLCBjdXJyZW50UGFnZTogMSB9O1xuICBzZWxlY3RlZDogc3RyaW5nW10gPSBbXTtcbiAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIGNhbkNyZWF0ZUdyb3VwOiBib29sZWFuID0gZmFsc2U7XG4gIGNhbkFzc2lnbkRldmljZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHJlYWRvbmx5IElURU1TX1NFTEVDVF9MSU1JVDogbnVtYmVyID0gMTU7XG4gIHJlYWRvbmx5IGJ0bkxhYmVscyA9IHtcbiAgICBuZXh0OiBnZXR0ZXh0KCdOZXh0JyksXG4gICAgY2FuY2VsOiBnZXR0ZXh0KCdDYW5jZWwnKSxcbiAgICBjcmVhdGU6IGdldHRleHQoJ0NyZWF0ZScpXG4gIH07XG5cbiAgcHJpdmF0ZSBuYW1lSW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGRldmljZUdyaWRTZXJ2aWNlOiBEZXZpY2VHcmlkU2VydmljZSxcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIGFkZEdyb3VwU2VydmljZTogQWRkR3JvdXBTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnQ6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIHN1YkFzc2V0c1NlcnZpY2U6IFN1YkFzc2V0c1NlcnZpY2VcbiAgKSB7fVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24uZW50ZXInLCBbJyRldmVudCddKSBvbkVudGVyS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIC8vIE9yZGVyIG1hdHRlcnMhIE5lZWRzIHRvIGJlIHBsYWNlZCBiZWZvcmUgdGhpcy5zdGVwcGVyLm5leHRcbiAgICBpZiAoKHRoaXMuaXNHcm91cERldGFpbHNTdGVwKCkgJiYgIXRoaXMuY2FuQXNzaWduRGV2aWNlKSB8fCB0aGlzLmlzQXNzaWduRGV2aWNlU3RlcCgpKSB7XG4gICAgICB0aGlzLmNyZWF0ZUdyb3VwKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc3RlcHBlci5uZXh0KCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duLmVzY2FwZScsIFsnJGV2ZW50J10pIG9uRXNjYXBlS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIHRoaXMub25DYW5jZWwuZW1pdCgpO1xuICB9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5mb3JtR3JvdXBTdGVwT25lID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBuYW1lOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgZGVzY3JpcHRpb246IFsnJ11cbiAgICB9KTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMub25DYW5jZWwuc3Vic2NyaWJlKCgpID0+IHRoaXMucmVzZXRTdGVwcGVyKCkpO1xuICAgIHRoaXMuY2FuQ3JlYXRlR3JvdXAgPSB0aGlzLnN1YkFzc2V0c1NlcnZpY2UuY2FuQ3JlYXRlR3JvdXAoKTtcbiAgICB0aGlzLmNhbkFzc2lnbkRldmljZSA9IGF3YWl0IHRoaXMuc3ViQXNzZXRzU2VydmljZS5jYW5Bc3NpZ25EZXZpY2Uoe1xuICAgICAgaWQ6IHRoaXMuY3VycmVudEdyb3VwSWRcbiAgICB9IGFzIElNYW5hZ2VkT2JqZWN0KTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLm5hbWVJbnB1dCA9IHRoaXMubmFtZUlucHV0UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICB0aGlzLnNldEZvY3VzT25OYW1lSW5wdXQoKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUdyb3VwKCkge1xuICAgIGlmICh0aGlzLmNhbkNyZWF0ZUdyb3VwID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGVuZGluZ1N0YXR1cyA9IHRydWU7XG4gICAgYXdhaXQgdGhpcy5hZGRHcm91cFNlcnZpY2UuY3JlYXRlR3JvdXBBbmRBc3NpZ25EZXZpY2VzKFxuICAgICAgdGhpcy5mb3JtR3JvdXBTdGVwT25lLnZhbHVlLFxuICAgICAgdGhpcy5jdXJyZW50R3JvdXBJZCxcbiAgICAgIHRoaXMuc2VsZWN0ZWRcbiAgICApO1xuXG4gICAgdGhpcy5wZW5kaW5nU3RhdHVzID0gZmFsc2U7XG4gICAgdGhpcy5yZXNldFN0ZXBwZXIoKTtcbiAgICB0aGlzLmFsZXJ0LnN1Y2Nlc3MoZ2V0dGV4dCgnR3JvdXAgY3JlYXRlZC4nKSk7XG5cbiAgICB0aGlzLnJlZnJlc2guZW1pdCgpO1xuICAgIHRoaXMub25DYW5jZWwuZW1pdCgpO1xuICB9XG5cbiAgb25TZWxlY3RlZChzZWxlY3RlZERldmljZXNJRHM6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5zZWxlY3RlZCA9IHNlbGVjdGVkRGV2aWNlc0lEcztcbiAgfVxuXG4gIHJlc2V0U3RlcHBlcigpIHtcbiAgICB0aGlzLnN0ZXBwZXIucmVzZXQoKTtcbiAgICB0aGlzLnN0ZXBwZXIuc2VsZWN0ZWRJbmRleCA9IDE7XG4gICAgdGhpcy5zZWxlY3RlZCA9IFtdO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNHcm91cERldGFpbHNTdGVwKCkge1xuICAgIHJldHVybiB0aGlzLnN0ZXBwZXIuc2VsZWN0ZWRJbmRleCA9PT0gMDtcbiAgfVxuXG4gIHByaXZhdGUgaXNBc3NpZ25EZXZpY2VTdGVwKCkge1xuICAgIHJldHVybiB0aGlzLnN0ZXBwZXIuc2VsZWN0ZWRJbmRleCA9PT0gMTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Rm9jdXNPbk5hbWVJbnB1dCgpIHtcbiAgICBpZiAodGhpcy5uYW1lSW5wdXQpIHtcbiAgICAgIHRoaXMubmFtZUlucHV0LmZvY3VzKCk7XG4gICAgICB0aGlzLm5hbWVJbnB1dC5zZWxlY3QoKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|