@c8y/ngx-components 1010.0.31 → 1010.0.35

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.
Files changed (61) hide show
  1. package/bundles/c8y-ngx-components-operations-bulk-operations-list.umd.js +18 -10
  2. package/bundles/c8y-ngx-components-operations-bulk-operations-list.umd.js.map +1 -1
  3. package/bundles/c8y-ngx-components-operations-bulk-operations-list.umd.min.js +1 -1
  4. package/bundles/c8y-ngx-components-operations-bulk-operations-list.umd.min.js.map +1 -1
  5. package/bundles/c8y-ngx-components-repository.umd.js +8 -4
  6. package/bundles/c8y-ngx-components-repository.umd.js.map +1 -1
  7. package/bundles/c8y-ngx-components-repository.umd.min.js +1 -1
  8. package/bundles/c8y-ngx-components-repository.umd.min.js.map +1 -1
  9. package/bundles/c8y-ngx-components-sensor-phone.umd.js +1 -1
  10. package/bundles/c8y-ngx-components-sensor-phone.umd.js.map +1 -1
  11. package/bundles/c8y-ngx-components-sensor-phone.umd.min.js +1 -1
  12. package/bundles/c8y-ngx-components-sensor-phone.umd.min.js.map +1 -1
  13. package/bundles/c8y-ngx-components.umd.js +14 -8
  14. package/bundles/c8y-ngx-components.umd.js.map +1 -1
  15. package/bundles/c8y-ngx-components.umd.min.js +1 -1
  16. package/bundles/c8y-ngx-components.umd.min.js.map +1 -1
  17. package/c8y-ngx-components.metadata.json +1 -1
  18. package/core/file-picker/file-picker.component.d.ts +8 -0
  19. package/esm2015/core/file-picker/file-picker.component.js +12 -2
  20. package/esm2015/core/file-picker/file-picker.module.js +6 -8
  21. package/esm2015/operations/bulk-operations-list/bulk-operation-list-item.component.js +4 -3
  22. package/esm2015/operations/bulk-operations-list/bulk-operation-list-item.model.js +16 -9
  23. package/esm2015/repository/configuration/configuration-detail.component.js +7 -2
  24. package/esm2015/repository/firmware/add-firmware-modal.component.js +7 -2
  25. package/esm2015/repository/firmware/add-firmware-patch-modal.component.js +7 -2
  26. package/esm2015/repository/software/add-software-modal.component.js +7 -2
  27. package/esm2015/sensor-phone/sensor-phone-modal.component.js +2 -2
  28. package/esm5/core/file-picker/file-picker.component.js +12 -2
  29. package/esm5/core/file-picker/file-picker.module.js +6 -8
  30. package/esm5/operations/bulk-operations-list/bulk-operation-list-item.component.js +5 -4
  31. package/esm5/operations/bulk-operations-list/bulk-operation-list-item.model.js +16 -9
  32. package/esm5/repository/configuration/configuration-detail.component.js +3 -2
  33. package/esm5/repository/firmware/add-firmware-modal.component.js +3 -2
  34. package/esm5/repository/firmware/add-firmware-patch-modal.component.js +3 -2
  35. package/esm5/repository/software/add-software-modal.component.js +3 -2
  36. package/esm5/sensor-phone/sensor-phone-modal.component.js +2 -2
  37. package/fesm2015/c8y-ngx-components-operations-bulk-operations-list.js +17 -9
  38. package/fesm2015/c8y-ngx-components-operations-bulk-operations-list.js.map +1 -1
  39. package/fesm2015/c8y-ngx-components-repository.js +24 -4
  40. package/fesm2015/c8y-ngx-components-repository.js.map +1 -1
  41. package/fesm2015/c8y-ngx-components-sensor-phone.js +1 -1
  42. package/fesm2015/c8y-ngx-components-sensor-phone.js.map +1 -1
  43. package/fesm2015/c8y-ngx-components.js +14 -8
  44. package/fesm2015/c8y-ngx-components.js.map +1 -1
  45. package/fesm5/c8y-ngx-components-operations-bulk-operations-list.js +18 -10
  46. package/fesm5/c8y-ngx-components-operations-bulk-operations-list.js.map +1 -1
  47. package/fesm5/c8y-ngx-components-repository.js +8 -4
  48. package/fesm5/c8y-ngx-components-repository.js.map +1 -1
  49. package/fesm5/c8y-ngx-components-sensor-phone.js +1 -1
  50. package/fesm5/c8y-ngx-components-sensor-phone.js.map +1 -1
  51. package/fesm5/c8y-ngx-components.js +14 -8
  52. package/fesm5/c8y-ngx-components.js.map +1 -1
  53. package/locales/locales.pot +33 -9
  54. package/operations/bulk-operations-list/bulk-operation-list-item.model.d.ts +2 -0
  55. package/package.json +2 -2
  56. package/repository/c8y-ngx-components-repository.metadata.json +1 -1
  57. package/repository/configuration/configuration-detail.component.d.ts +1 -0
  58. package/repository/firmware/add-firmware-modal.component.d.ts +1 -0
  59. package/repository/firmware/add-firmware-patch-modal.component.d.ts +1 -0
  60. package/repository/software/add-software-modal.component.d.ts +1 -0
  61. package/sensor-phone/c8y-ngx-components-sensor-phone.metadata.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../node_modules/tslib/tslib.es6.js","ng://@c8y/ngx-components/operations/bulk-operations-list/bulk-operation-wrapper.component.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/bulk-operation-details.service.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/modals/bulk-operations-modal.component.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/modals/bulk-operation-modals.service.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/modals/bulk-operations-reschedule-modal.component.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/bulk-operation-list-item.model.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/bulk-operation-list-item.component.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/bulk-operations-list.component.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/bulk-operation-details-tabs.component.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/bulk-operation-details.component.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/single-operation-item.model.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/single-operations-list.component.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/single-operation-item.component.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/type-list/bulk-operation-type-list.component.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/bulk-operations-list.module.ts"],"names":["__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","apply","this","__decorate","decorators","target","key","desc","d","c","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","__generator","body","f","y","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","v","op","TypeError","pop","push","__read","o","m","ar","error","BulkOperationWrapperComponent","bulkOperationDetailsService","modalRef","BulkOperationDetailsService","BsModalRef","tslib_1.__decorate","Input","Component","selector","template","bulkOperationsService","modalService","openDetails","bulkOperationId","getBulkOperationById","bulkOperation","_a","data","initialState","show","class","BulkOperationsService","BsModalService","Injectable","BulkOperationsModalComponent","bsModalRef","resolver","showComponent","cancel","hide","createComponent","item","component","factory","resolveComponentFactory","container","ComponentFactoryResolver","ViewChild","static","read","ViewContainerRef","BulkOperationModalsService","bsModalService","showNewBulkOperationModal","backdrop","hideNewBulkOperationModal","BulkOperationsRescheduleModalComponent","alert","closeSubject","Subject","ngOnInit","modalTitle","getTitle","onDateAndDelaySelect","$event","dateAndDelay","isRetryOperation","gettext","onCancel","onSave","startDate","scheduledDate","toISOString","creationRamp","delayInSeconds","createBulkOperation","newBulkOperation","success","addServerFailure","er_1","updateBulkOperation","er_2","AlertService","BULK_OPERATION_STATUS_LABELS","SCHEDULED","EXECUTING","CANCELED","FAILED","SUCCESSFUL","BULK_OPERATION_STATUS_OPTIONS","generalStatus","OperationBulkGeneralStatus","iconClass","EXECUTING_WITH_ERROR","BulkOperationListItemComponent","modal","detailsCollapsed","readOnly","showFailedOperation","EventEmitter","reload","refreshLoading","bulkOperationGeneralStatus","bulkOperationStatusOptions","finishDatePopoverText","progressBarClass","progressBarStatus","getIconClass","finishDate","calculateFinishDateMs","setProgressBar","ngOnChanges","changes","firstChange","_this","find","statusOption","includes","Date","getTime","progress","all","progressBarProgressFn","successful","failed","staticContentOfClass","progressBarState","progressBarColor","editSchedule","modalOptions","cloneDeep","cancelBulkOperation","confirm","Status","DANGER","deleteBulkOperation","id","emit","retryFailedOperation","clonedBulk","groupId","failedParentId","content","subscribe","setToSuccessful","openFailedOperation","isStatusScheduled","isStatusExecutingOrExecutingWithError","allOperationsCreated","executing","pending","isStatusCanceled","isStatusFailed","ModalService","Output","BulkOperationsListComponent","realtime","bulkOperationModalsService","bulkTypes","selectedTypeFilters","getTypeFilters","statusFilter$","BehaviorSubject","typeFilter$","timeFilter$","reload$","bulkOperations$","combineLatest","pipe","tap","switchMap","_b","statusFilters","timeFilters","filter","withLatestFrom","map","typeFilter","filterPipe","filterByType","shareReplay","allFilterFragments","flattenFilterFragments","getBulkTypes","bulkOperations","flattenedFragments","every","fragment","keys","operationPrototype","some","resetFilter","datePicker","clearFilter","statusFilter","reset","isFilterApplied","getValue","timeFilter","status","flatten","time","dateFrom","dateTo","getBulkOperations","addBulkOperation","listItems","forEach","listItem","collapsed","element","nativeElement","scrollIntoView","behavior","block","compareOperations","operationA","operationB","filters","reduce","flattened","current","concat","fragments","OperationBulkRealtimeService","ViewChildren","DatePickerComponent","providers","BulkOperationDetailsTabsComponent","onRetryFailedOperations","tabs","detailsTemplate","path","icon","auditTemplate","BulkOperationDetailsComponent","allFilterIsSelected","scrollToRetriedFromOperation","failedOperationId","SINGLE_OP_STATUS_NAMES","PENDING","ALL","SINGLE_OP_STATUS_PROPERTIES","selected","SingleOperationsListComponent","singleOperationStatusProperties","singleOperationStatusNames","ngAfterViewInit","filterOperationsByType","getFilterTypeOfSingleOperations","preset","setTimeout","bind","getOperationsByStatus","getSingleOperationsByStatus","singleOperations","retryBulkOperation","StatusFilterComponent","SingleOperationItemComponent","alertService","device","showIfTextTruncated","singleOperationsStatusProperties","getDeviceMO","operation","deviceId","isTextTruncated","retrySingleOperation","singleOperation","operationToCreate","omit","createSingleOperation","operationProperties","toUpperCase","getManagedObject","inventoryMO","failureReason","el","failureReasonRef","offsetWidth","scrollWidth","BulkOperationTypeListComponent","router","onCustomType","bulkList","handleClick","navigateByUrl","Router","bulkOperationListRoutes","BulkOperationsListModule","NgModule","imports","CoreModule","PopoverModule","TooltipModule","StatusFilterModule","OperationSummaryModule","BulkOperationSchedulerModule","RouterModule","forChild","declarations","entryComponents","exports"],"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, Input } from '@angular/core';\nimport { IOperationBulk } from '@c8y/client';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { BulkOperationDetailsService } from './bulk-operation-details.service';\n\n@Component({\n selector: 'c8y-bulk-operations-wrapper',\n templateUrl: './bulk-operation-wrapper.component.html'\n})\nexport class BulkOperationWrapperComponent {\n @Input() bulkOperation: Partial<IOperationBulk>;\n\n constructor(\n public bulkOperationDetailsService: BulkOperationDetailsService,\n public modalRef: BsModalRef\n ) {}\n}\n","import { Injectable } from '@angular/core';\nimport { IOperationBulk } from '@c8y/client';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { BulkOperationsService } from '@c8y/ngx-components/operations/bulk-operations-service';\nimport { BulkOperationWrapperComponent } from './bulk-operation-wrapper.component';\n\n@Injectable()\nexport class BulkOperationDetailsService {\n constructor(\n private bulkOperationsService: BulkOperationsService,\n private modalService: BsModalService\n ) {}\n\n async openDetails(bulkOperationId) {\n const bulkOperation: IOperationBulk = (await this.bulkOperationsService.getBulkOperationById(\n bulkOperationId\n )).data;\n const initialState = { bulkOperation };\n this.modalService.show(BulkOperationWrapperComponent, {\n initialState,\n class: 'modal-lg'\n });\n }\n}\n","import { Component, ViewContainerRef, ViewChild, ComponentFactoryResolver } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { OperationType } from '@c8y/ngx-components/operations/bulk-operations-service';\n\n@Component({\n selector: 'c8y-bulk-operations-modal',\n templateUrl: 'bulk-operations-modal.component.html'\n})\nexport class BulkOperationsModalComponent {\n @ViewChild('container', { static: false, read: ViewContainerRef }) container;\n showComponent: boolean = false;\n constructor(private bsModalRef: BsModalRef, private resolver: ComponentFactoryResolver) {}\n\n cancel() {\n this.bsModalRef.hide();\n }\n\n createComponent(item: OperationType) {\n if (item && item.component) {\n this.showComponent = true;\n const factory = this.resolver.resolveComponentFactory(item.component);\n this.container.createComponent(factory);\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BsModalRef, BsModalService } from 'ngx-bootstrap/modal';\nimport { BulkOperationsModalComponent } from './bulk-operations-modal.component';\n\n@Injectable()\nexport class BulkOperationModalsService {\n private bsModalRef: BsModalRef;\n\n constructor(private bsModalService: BsModalService) {}\n\n showNewBulkOperationModal() {\n this.bsModalRef = this.bsModalService.show(BulkOperationsModalComponent, {\n backdrop: 'static',\n class: 'modal-sm'\n });\n }\n\n hideNewBulkOperationModal() {\n if (this.bsModalRef) {\n this.bsModalRef.hide();\n }\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { IOperationBulk } from '@c8y/client';\nimport { AlertService, gettext } from '@c8y/ngx-components';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { Subject } from 'rxjs';\nimport { OperationSchedule } from '@c8y/ngx-components/operations/bulk-operation-scheduler';\nimport { BulkOperationsService } from '@c8y/ngx-components/operations/bulk-operations-service';\n\n@Component({\n selector: 'c8y-bulk-operations-reschedule-modal',\n templateUrl: 'bulk-operations-reschedule-modal.component.html'\n})\nexport class BulkOperationsRescheduleModalComponent implements OnInit {\n closeSubject: Subject<IOperationBulk> = new Subject();\n dateAndDelay: OperationSchedule;\n bulkOperation: Partial<IOperationBulk>;\n isRetryOperation: boolean;\n modalTitle: string;\n\n constructor(\n public bsModalRef: BsModalRef,\n private bulkOperationsService: BulkOperationsService,\n private alert: AlertService\n ) {}\n\n ngOnInit() {\n this.modalTitle = this.getTitle();\n }\n\n onDateAndDelaySelect($event) {\n this.dateAndDelay = $event;\n }\n\n getTitle() {\n return this.isRetryOperation ? gettext('Retry operation') : gettext('Edit schedule');\n }\n\n onCancel() {\n this.bsModalRef.hide();\n }\n\n async onSave() {\n let newBulkOperation;\n this.bulkOperation.startDate = this.dateAndDelay.scheduledDate.toISOString();\n this.bulkOperation.creationRamp = this.dateAndDelay.delayInSeconds;\n\n if (this.isRetryOperation) {\n try {\n newBulkOperation = await this.bulkOperationsService.createBulkOperation(this.bulkOperation);\n this.alert.success(gettext('Successfully rescheduled for a retry.'));\n } catch (er) {\n this.alert.addServerFailure(er);\n }\n } else {\n try {\n newBulkOperation = await this.bulkOperationsService.updateBulkOperation(this.bulkOperation);\n this.alert.success(gettext('Successfully rescheduled.'));\n } catch (er) {\n this.alert.addServerFailure(er);\n }\n }\n\n // send back to component from which modal was called\n this.closeSubject.next(newBulkOperation.data);\n this.bsModalRef.hide();\n }\n}\n","import { OperationBulkGeneralStatus } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components';\nimport { IStatusOption } from '@c8y/ngx-components/operations/status-filter';\n\nexport const BULK_OPERATION_STATUS_LABELS = {\n SCHEDULED: gettext('Scheduled'),\n EXECUTING: gettext('Executing'),\n CANCELED: gettext('Canceled'),\n FAILED: gettext('Completed with failures'),\n SUCCESSFUL: gettext('Completed successfully')\n};\n\nexport const BULK_OPERATION_STATUS_OPTIONS: IStatusOption[] = [\n {\n label: BULK_OPERATION_STATUS_LABELS.SCHEDULED,\n generalStatus: [OperationBulkGeneralStatus.SCHEDULED],\n iconClass: 'dlt-c8y-icon-calendar text-info'\n },\n {\n label: BULK_OPERATION_STATUS_LABELS.EXECUTING,\n generalStatus: [\n OperationBulkGeneralStatus.EXECUTING,\n OperationBulkGeneralStatus.EXECUTING_WITH_ERROR\n ],\n iconClass: 'dlt-c8y-icon-refresh text-primary'\n },\n {\n label: BULK_OPERATION_STATUS_LABELS.CANCELED,\n generalStatus: [OperationBulkGeneralStatus.CANCELED],\n iconClass: 'dlt-c8y-icon-ban text-muted'\n },\n {\n label: BULK_OPERATION_STATUS_LABELS.FAILED,\n generalStatus: [OperationBulkGeneralStatus.FAILED],\n iconClass: 'dlt-c8y-icon-exclamation-triangle text-danger'\n },\n {\n label: BULK_OPERATION_STATUS_LABELS.SUCCESSFUL,\n generalStatus: [OperationBulkGeneralStatus.SUCCESSFUL],\n iconClass: 'dlt-c8y-icon-check-circle text-success'\n }\n];\n","import {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport { IOperationBulk, OperationBulkGeneralStatus } from '@c8y/client';\nimport {\n AlertService,\n gettext,\n ListItemComponent,\n ModalService,\n Status\n} from '@c8y/ngx-components';\nimport { assign, cloneDeep } from 'lodash-es';\nimport { BsModalRef, BsModalService, ModalOptions } from 'ngx-bootstrap/modal';\nimport { BulkOperationsService } from '@c8y/ngx-components/operations/bulk-operations-service';\nimport { IStatusOption } from '@c8y/ngx-components/operations/status-filter';\nimport { BulkOperationsRescheduleModalComponent } from './modals/bulk-operations-reschedule-modal.component';\nimport { BULK_OPERATION_STATUS_OPTIONS } from './bulk-operation-list-item.model';\n\n@Component({\n selector: 'c8y-bulk-operation-list-item',\n templateUrl: './bulk-operation-list-item.component.html'\n})\nexport class BulkOperationListItemComponent implements OnInit, OnChanges {\n @Input()\n bulkOperation: Partial<IOperationBulk>;\n @Input()\n detailsCollapsed: boolean = true;\n @Input()\n readOnly: boolean = false;\n @Output() showFailedOperation = new EventEmitter();\n @Output() reload: EventEmitter<any> = new EventEmitter();\n @ViewChild('listItem', { static: true }) listItem: ListItemComponent;\n iconClass: string;\n finishDate: number;\n refreshLoading = false;\n bulkOperationGeneralStatus = OperationBulkGeneralStatus;\n bulkOperationStatusOptions: IStatusOption[] = BULK_OPERATION_STATUS_OPTIONS;\n bsModalRef: BsModalRef;\n finishDatePopoverText: string = gettext(\n 'Approximate date, estimated based on the bulk operation settings.'\n );\n progressBarClass: string = 'progress';\n progressBarColor: string;\n progressBarStatus: number = 0;\n\n constructor(\n private bulkOperationsService: BulkOperationsService,\n private modal: ModalService,\n private alert: AlertService,\n private bsModalService: BsModalService\n ) {}\n\n ngOnInit() {\n this.iconClass = this.getIconClass();\n this.finishDate = this.calculateFinishDateMs();\n this.setProgressBar();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.bulkOperation && !changes.bulkOperation.firstChange) {\n this.iconClass = this.getIconClass();\n this.setProgressBar();\n }\n }\n\n getIconClass() {\n return this.bulkOperationStatusOptions.find(statusOption =>\n statusOption.generalStatus.includes(this.bulkOperation.generalStatus)\n ).iconClass;\n }\n\n calculateFinishDateMs(): number {\n const startDateMs: number = new Date(this.bulkOperation.startDate).getTime();\n const creationRampMs: number = this.bulkOperation.creationRamp * 1000;\n\n return startDateMs + creationRampMs * this.bulkOperation.progress.all;\n }\n\n progressBarProgressFn() {\n return (\n ((this.bulkOperation.progress.successful + this.bulkOperation.progress.failed) /\n this.bulkOperation.progress.all) *\n 100\n );\n }\n\n setProgressBar() {\n const staticContentOfClass = 'progress-bar progress-striped active progress-bar';\n\n const progressBarState = {\n EXECUTING: {\n progressBarClass: 'progress progress-striped active',\n progressBarColor: `${staticContentOfClass}-primary`,\n progressBarStatus: this.progressBarProgressFn()\n },\n EXECUTING_WITH_ERROR: {\n progressBarClass: 'progress progress-striped active',\n progressBarColor: `${staticContentOfClass}-danger`,\n progressBarStatus: this.progressBarProgressFn()\n },\n FAILED: {\n progressBarClass: 'progress',\n progressBarColor: `${staticContentOfClass}-danger`,\n progressBarStatus: 100\n },\n SUCCESSFUL: {\n progressBarClass: 'progress',\n progressBarColor: `${staticContentOfClass}-success`,\n progressBarStatus: 100\n }\n };\n\n assign(this, progressBarState[this.bulkOperation.generalStatus]);\n }\n\n editSchedule() {\n const rescheduledOperation = cloneDeep(this.bulkOperation);\n const initialState = {\n bulkOperation: rescheduledOperation\n };\n const modalOptions = { initialState, class: 'modal-sm', backdrop: 'static' } as ModalOptions;\n this.bsModalRef = this.bsModalService.show(\n BulkOperationsRescheduleModalComponent,\n modalOptions\n );\n }\n\n async cancelBulkOperation() {\n try {\n await this.modal.confirm(\n gettext('Cancel bulk operation'),\n gettext('You are about to cancel the bulk operation. Do you want to proceed?'),\n Status.DANGER\n );\n await this.bulkOperationsService.deleteBulkOperation(this.bulkOperation.id);\n this.reload.emit();\n this.alert.success(gettext('Operation canceled.'));\n } catch (er) {\n this.alert.addServerFailure(er);\n }\n }\n\n retryFailedOperation() {\n const clonedBulk = cloneDeep(this.bulkOperation);\n\n // change the id to failedparentId similar to the logic in deviceBulkControl.service.js\n delete clonedBulk.groupId;\n clonedBulk.failedParentId = this.bulkOperation.id;\n\n // show reschdedule modal:\n const initialState = {\n bulkOperation: clonedBulk,\n isRetryOperation: true\n };\n const modalOptions = { initialState, class: 'modal-sm', backdrop: 'static' } as ModalOptions;\n this.bsModalRef = this.bsModalService.show(\n BulkOperationsRescheduleModalComponent,\n modalOptions\n );\n this.bsModalRef.content.closeSubject.subscribe(() => {\n this.reload.emit();\n });\n }\n\n async setToSuccessful() {\n try {\n await this.modal.confirm(\n gettext('Set manually bulk operation to SUCCESSFUL'),\n gettext(\n 'You are about to change the bulk operation status to SUCCESSFUL. Do you want to proceed?'\n ),\n Status.DANGER\n );\n\n await this.bulkOperationsService.updateBulkOperation({\n id: this.bulkOperation.id,\n generalStatus: OperationBulkGeneralStatus.SUCCESSFUL\n });\n this.reload.emit();\n this.alert.success(gettext('Operation status changed to SUCCESSFUL.'));\n } catch (er) {\n this.alert.addServerFailure(er);\n }\n }\n\n openFailedOperation(failedParentId) {\n this.showFailedOperation.emit(failedParentId);\n }\n\n isStatusScheduled() {\n return this.bulkOperation.generalStatus === this.bulkOperationGeneralStatus.SCHEDULED;\n }\n\n isStatusExecutingOrExecutingWithError() {\n return (\n this.bulkOperation.generalStatus === this.bulkOperationGeneralStatus.EXECUTING ||\n this.bulkOperation.generalStatus === this.bulkOperationGeneralStatus.EXECUTING_WITH_ERROR\n );\n }\n\n allOperationsCreated() {\n return (\n this.bulkOperation.progress.all ===\n this.bulkOperation.progress.executing +\n this.bulkOperation.progress.failed +\n this.bulkOperation.progress.pending +\n this.bulkOperation.progress.successful\n );\n }\n\n isStatusCanceled() {\n return this.bulkOperation.generalStatus === this.bulkOperationGeneralStatus.CANCELED;\n }\n\n isStatusFailed() {\n return this.bulkOperation.generalStatus === this.bulkOperationGeneralStatus.FAILED;\n }\n}\n","import { Component, OnInit, QueryList, ViewChild, ViewChildren } from '@angular/core';\nimport { IOperationBulk, IResultList } from '@c8y/client';\nimport { OperationBulkRealtimeService, DatePickerComponent } from '@c8y/ngx-components';\nimport { flatten } from 'lodash-es';\nimport { BehaviorSubject, Observable, combineLatest, pipe } from 'rxjs';\nimport { map, tap, switchMap, withLatestFrom, shareReplay } from 'rxjs/operators';\nimport { StatusFilterComponent, IStatusOption } from '@c8y/ngx-components/operations/status-filter';\nimport {\n BulkOperationsService,\n OperationType\n} from '@c8y/ngx-components/operations/bulk-operations-service';\nimport { BulkOperationModalsService } from './modals/bulk-operation-modals.service';\nimport { BulkOperationListItemComponent } from './bulk-operation-list-item.component';\nimport { BULK_OPERATION_STATUS_OPTIONS } from './bulk-operation-list-item.model';\n@Component({\n selector: 'c8y-bulk-operations',\n templateUrl: './bulk-operations-list.component.html',\n providers: [OperationBulkRealtimeService]\n})\nexport class BulkOperationsListComponent implements OnInit {\n bulkTypes: OperationType[] = [];\n selectedTypeFilters = this.getTypeFilters();\n bulkOperationStatusOptions: IStatusOption[] = BULK_OPERATION_STATUS_OPTIONS;\n\n filterPipe;\n refreshLoading: boolean = false;\n statusFilter$: BehaviorSubject<IStatusOption[]> = new BehaviorSubject(null);\n typeFilter$: BehaviorSubject<OperationType[]> = new BehaviorSubject(null);\n timeFilter$: BehaviorSubject<any> = new BehaviorSubject(null);\n reload$: BehaviorSubject<void> = new BehaviorSubject(null);\n @ViewChildren(BulkOperationListItemComponent) listItems: QueryList<\n BulkOperationListItemComponent\n >;\n @ViewChild('statusFilter', { static: true }) statusFilter: StatusFilterComponent;\n @ViewChild(DatePickerComponent, { static: true }) datePicker: DatePickerComponent;\n\n bulkOperations$: Observable<IResultList<IOperationBulk>> = combineLatest(\n this.statusFilter$,\n this.timeFilter$,\n this.typeFilter$,\n this.reload$\n ).pipe(\n tap(() => {\n this.refreshLoading = true;\n }),\n switchMap(([statusFilters, timeFilters]) => this.filter(statusFilters, timeFilters)),\n withLatestFrom(this.typeFilter$),\n map(([result, typeFilter]: [IResultList<IOperationBulk>, OperationType[]]) => {\n this.filterPipe = pipe(map((data: []) => this.filterByType(data, typeFilter)));\n return { ...result, data: this.filterByType(result.data, typeFilter) };\n }),\n tap(() => {\n this.refreshLoading = false;\n }),\n shareReplay(1)\n );\n\n private allFilterFragments: string[];\n\n constructor(\n public realtime: OperationBulkRealtimeService,\n private bulkOperationsService: BulkOperationsService,\n private bulkOperationModalsService: BulkOperationModalsService\n ) {\n this.allFilterFragments = this.flattenFilterFragments(this.getTypeFilters());\n }\n\n ngOnInit() {\n this.bulkTypes = this.bulkOperationsService.getBulkTypes();\n }\n\n filterByType(bulkOperations: IOperationBulk[], typeFilter) {\n const flattenedFragments: string[] = this.flattenFilterFragments(typeFilter);\n if (\n // return data unfiltered if no filters selected...\n !flattenedFragments.length ||\n // ...or when all filters are selected\n this.allFilterFragments.every(fragment => flattenedFragments.includes(fragment))\n ) {\n return bulkOperations;\n }\n\n const filteredData = bulkOperations.filter(item => {\n return Object.keys(item.operationPrototype).some(key => flattenedFragments.includes(key));\n });\n\n return filteredData;\n }\n\n resetFilter() {\n this.statusFilter$.next(null);\n this.timeFilter$.next(null);\n this.typeFilter$.next(null);\n\n this.datePicker.clearFilter();\n this.selectedTypeFilters = this.getTypeFilters();\n this.statusFilter.reset();\n }\n\n isFilterApplied() {\n return (\n this.statusFilter$.getValue() || this.typeFilter$.getValue() || this.timeFilter$.getValue()\n );\n }\n\n filter(statusFilters, timeFilter) {\n const status =\n statusFilters && statusFilters.length > 0\n ? {\n generalStatus: flatten(statusFilters.map(statusFilter => statusFilter.generalStatus))\n }\n : {};\n\n const time = timeFilter\n ? {\n ...(timeFilter.dateFrom && {\n dateFrom: timeFilter.dateFrom.toISOString()\n }),\n ...(timeFilter.dateTo && {\n dateTo: timeFilter.dateTo.toISOString()\n })\n }\n : {};\n return this.getBulkOperations({ ...status, ...time });\n }\n\n getBulkOperations(filter?) {\n return this.bulkOperationsService.getBulkOperations(filter);\n }\n\n getTypeFilters() {\n return this.bulkOperationsService.getBulkTypes();\n }\n\n addBulkOperation() {\n this.bulkOperationModalsService.showNewBulkOperationModal();\n }\n\n openFailedOperation(failedParentId) {\n this.listItems.forEach(item => {\n if (item.bulkOperation.id === failedParentId) {\n item.listItem.collapsed = false;\n item.listItem.element.nativeElement.scrollIntoView({ behavior: 'smooth', block: 'center' });\n }\n });\n }\n\n compareOperations(operationA: IOperationBulk, operationB: IOperationBulk): number {\n return new Date(operationA.startDate).getTime() - new Date(operationB.startDate).getTime();\n }\n\n private flattenFilterFragments(filters: OperationType[]): string[] {\n return (filters || []).reduce((flattened, current) => flattened.concat(current.fragments), []);\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n ViewChild,\n ViewContainerRef\n} from '@angular/core';\nimport { IOperationBulk } from '@c8y/client';\nimport { gettext, Tab } from '@c8y/ngx-components';\n\n@Component({\n selector: 'c8y-bulk-operation-details-tabs',\n templateUrl: './bulk-operation-details-tabs.component.html'\n})\nexport class BulkOperationDetailsTabsComponent implements OnInit {\n @Input()\n bulkOperation: Partial<IOperationBulk>;\n @Input()\n readOnly: boolean = false;\n @Output() onRetryFailedOperations: EventEmitter<Partial<IOperationBulk>> = new EventEmitter();\n @Output() showFailedOperation: EventEmitter<number> = new EventEmitter();\n\n @ViewChild('details', { static: true }) detailsTemplate: any;\n @ViewChild('audit', { static: true }) auditTemplate: any;\n\n tabs: Tab[] = [];\n template: ViewContainerRef;\n\n ngOnInit(): void {\n this.template = this.detailsTemplate;\n\n this.tabs = [\n {\n label: gettext('Details'),\n path: null,\n icon: 'asterisk',\n template: this.detailsTemplate\n },\n {\n label: gettext('History of changes'),\n path: null,\n icon: 'archive',\n template: this.auditTemplate\n }\n ];\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { IManagedObject, IOperationBulk } from '@c8y/client';\n\n@Component({\n selector: 'c8y-bulk-operation-details',\n templateUrl: './bulk-operation-details.component.html'\n})\nexport class BulkOperationDetailsComponent {\n allFilterIsSelected: boolean = false;\n collapsed: boolean;\n device: IManagedObject;\n\n @Input()\n bulkOperation: Partial<IOperationBulk>;\n @Input()\n readOnly: boolean = false;\n @Output() showFailedOperation: EventEmitter<number> = new EventEmitter();\n\n scrollToRetriedFromOperation(failedOperationId) {\n this.showFailedOperation.emit(failedOperationId);\n }\n}\n","import { gettext } from '@c8y/ngx-components';\n\nexport const SINGLE_OP_STATUS_NAMES = {\n PENDING: gettext('Pending'),\n EXECUTING: gettext('Executing'),\n FAILED: gettext('Failed'),\n SUCCESSFUL: gettext('Successful'),\n ALL: gettext('All')\n};\n\nexport const SINGLE_OP_STATUS_PROPERTIES = [\n {\n label: SINGLE_OP_STATUS_NAMES.PENDING,\n iconClass: 'dlt-c8y-icon-clock-o text-info',\n selected: false\n },\n {\n label: SINGLE_OP_STATUS_NAMES.EXECUTING,\n iconClass: 'dlt-c8y-icon-refresh text-info',\n selected: false\n },\n {\n label: SINGLE_OP_STATUS_NAMES.SUCCESSFUL,\n iconClass: 'dlt-c8y-icon-check-circle text-success',\n selected: false\n },\n {\n label: SINGLE_OP_STATUS_NAMES.FAILED,\n iconClass: 'dlt-c8y-icon-exclamation-circle text-danger',\n selected: false\n }\n];\n","import {\n AfterViewInit,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport { IOperation, IOperationBulk, IResultList } from '@c8y/client';\nimport { StatusFilterComponent, IStatusOption } from '@c8y/ngx-components/operations/status-filter';\nimport { BulkOperationsService } from '@c8y/ngx-components/operations/bulk-operations-service';\nimport { SINGLE_OP_STATUS_NAMES, SINGLE_OP_STATUS_PROPERTIES } from './single-operation-item.model';\n\n@Component({\n selector: 'c8y-single-operations-list',\n templateUrl: './single-operations-list.component.html'\n})\nexport class SingleOperationsListComponent implements AfterViewInit, OnChanges {\n @Input()\n bulkOperation: Partial<IOperationBulk>;\n @Input()\n readOnly: boolean = false;\n @Output() onRetryFailedOperations: EventEmitter<Partial<IOperationBulk>> = new EventEmitter();\n\n @ViewChild(StatusFilterComponent, { static: false })\n statusFilter: StatusFilterComponent;\n\n singleOperationStatusProperties = SINGLE_OP_STATUS_PROPERTIES;\n singleOperationStatusNames = SINGLE_OP_STATUS_NAMES;\n singleOperations: IResultList<IOperation>;\n\n constructor(private bulkOperationsService: BulkOperationsService) {}\n\n async ngAfterViewInit() {\n if (this.statusFilter) {\n this.filterOperationsByType();\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.bulkOperation && !changes.bulkOperation.firstChange) {\n this.filterOperationsByType();\n }\n }\n\n filterOperationsByType() {\n if (this.statusFilter) {\n const typeFilter = this.getFilterTypeOfSingleOperations();\n\n this.statusFilter.preset(\n typeFilter === this.singleOperationStatusNames.ALL\n ? []\n : [{ label: typeFilter } as IStatusOption]\n );\n } else {\n setTimeout(this.filterOperationsByType.bind(this));\n }\n }\n\n getFilterTypeOfSingleOperations() {\n const progress = this.bulkOperation.progress;\n\n if (progress.failed > 0) {\n return this.singleOperationStatusNames.FAILED;\n } else if (progress.failed === 0 && progress.successful === 0 && progress.pending === 0) {\n return this.singleOperationStatusNames.EXECUTING;\n } else if (progress.failed === 0 && progress.successful === 0 && progress.executing === 0) {\n return this.singleOperationStatusNames.PENDING;\n } else if (progress.failed === 0 && progress.pending === 0 && progress.executing === 0) {\n return this.singleOperationStatusNames.SUCCESSFUL;\n }\n\n return this.singleOperationStatusNames.ALL;\n }\n\n async getOperationsByStatus(filter: IStatusOption[]) {\n this.singleOperations = await this.bulkOperationsService.getSingleOperationsByStatus(\n filter[0] && filter[0].label,\n this.bulkOperation.id\n );\n }\n\n retryBulkOperation() {\n this.onRetryFailedOperations.emit(this.bulkOperation);\n }\n}\n","import { Component, ElementRef, Input, ViewChild } from '@angular/core';\nimport { IOperation } from '@c8y/client';\nimport { AlertService, gettext } from '@c8y/ngx-components';\nimport { BulkOperationsService } from '@c8y/ngx-components/operations/bulk-operations-service';\nimport { omit } from 'lodash-es';\nimport { SINGLE_OP_STATUS_NAMES, SINGLE_OP_STATUS_PROPERTIES } from './single-operation-item.model';\n\n@Component({\n selector: 'c8y-single-operation-item',\n templateUrl: './single-operation-item.component.html'\n})\nexport class SingleOperationItemComponent {\n device = {};\n showIfTextTruncated = false;\n singleOperationStatusNames = SINGLE_OP_STATUS_NAMES;\n singleOperationsStatusProperties = SINGLE_OP_STATUS_PROPERTIES;\n iconClass: string;\n @Input()\n operation: IOperation;\n @Input()\n readOnly: boolean = false;\n @ViewChild('failureReason', { static: true }) failureReasonRef: ElementRef;\n\n constructor(\n private bulkOperationsService: BulkOperationsService,\n private alertService: AlertService\n ) {}\n\n async ngOnInit() {\n this.iconClass = this.getIconClass();\n this.device = await this.getDeviceMO(this.operation.deviceId);\n }\n\n ngAfterViewInit() {\n this.isTextTruncated();\n }\n\n async retrySingleOperation(singleOperation) {\n const operationToCreate = omit(singleOperation, [\n 'id',\n 'self',\n 'status',\n 'failureReason',\n 'creationTime',\n 'delivery'\n ]);\n\n try {\n await this.bulkOperationsService.createSingleOperation(operationToCreate);\n this.alertService.success(gettext('Operation created.'));\n } catch (er) {\n this.alertService.addServerFailure(er);\n }\n }\n\n getIconClass() {\n return this.singleOperationsStatusProperties.find(\n operationProperties => operationProperties.label.toUpperCase() === this.operation.status\n ).iconClass;\n }\n\n private async getDeviceMO(deviceId) {\n const inventoryMO = await this.bulkOperationsService.getManagedObject(deviceId);\n if (inventoryMO) {\n return inventoryMO.data;\n }\n }\n\n private isTextTruncated() {\n if (this.operation.failureReason) {\n const el = this.failureReasonRef.nativeElement;\n this.showIfTextTruncated = el.offsetWidth < el.scrollWidth ? true : false;\n }\n }\n}\n","import { Component, EventEmitter, Output, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\nimport {\n BulkOperationsService,\n OperationType\n} from '@c8y/ngx-components/operations/bulk-operations-service';\nimport { BulkOperationModalsService } from '../modals/bulk-operation-modals.service';\n\n@Component({\n selector: 'c8y-bulk-operation-type-list',\n templateUrl: './bulk-operation-type-list.component.html'\n})\nexport class BulkOperationTypeListComponent implements OnInit {\n @Output() onCustomType: EventEmitter<OperationType> = new EventEmitter();\n bulkList: OperationType[] = [];\n\n constructor(\n private router: Router,\n private bulkOperationsService: BulkOperationsService,\n private bulkOperationModalsService: BulkOperationModalsService\n ) {}\n\n ngOnInit() {\n this.bulkList = this.bulkOperationsService.getBulkTypes();\n }\n\n handleClick(item: OperationType) {\n if (item.path) {\n this.bulkOperationModalsService.hideNewBulkOperationModal();\n this.router.navigateByUrl(item.path);\n } else if (item.component) {\n this.onCustomType.emit(item);\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\n\nimport { CoreModule, Route } from '@c8y/ngx-components';\nimport { StatusFilterModule } from '@c8y/ngx-components/operations/status-filter';\nimport { OperationSummaryModule } from '@c8y/ngx-components/operations/operation-summary';\nimport { BulkOperationSchedulerModule } from '@c8y/ngx-components/operations/bulk-operation-scheduler';\n\nimport { BulkOperationDetailsService } from './bulk-operation-details.service';\nimport { BulkOperationsListComponent } from './bulk-operations-list.component';\nimport { BulkOperationListItemComponent } from './bulk-operation-list-item.component';\nimport { BulkOperationDetailsTabsComponent } from './bulk-operation-details-tabs.component';\nimport { BulkOperationDetailsComponent } from './bulk-operation-details.component';\nimport { SingleOperationsListComponent } from './single-operations-list.component';\nimport { SingleOperationItemComponent } from './single-operation-item.component';\nimport { BulkOperationWrapperComponent } from './bulk-operation-wrapper.component';\nimport { BulkOperationTypeListComponent } from './type-list/bulk-operation-type-list.component';\nimport { BulkOperationModalsService } from './modals/bulk-operation-modals.service';\nimport { BulkOperationsModalComponent } from './modals/bulk-operations-modal.component';\nimport { BulkOperationsRescheduleModalComponent } from './modals/bulk-operations-reschedule-modal.component';\n\nexport const bulkOperationListRoutes: Route[] = [\n {\n path: 'devicecontrol/bulk',\n component: BulkOperationsListComponent\n }\n];\n\n/**\n * This module allows for displaying the list of bulk operations and their details.\n */\n@NgModule({\n imports: [\n CoreModule,\n PopoverModule,\n TooltipModule,\n StatusFilterModule,\n OperationSummaryModule,\n BulkOperationSchedulerModule,\n RouterModule.forChild(bulkOperationListRoutes)\n ],\n providers: [BulkOperationDetailsService, BulkOperationModalsService],\n declarations: [\n BulkOperationsListComponent,\n BulkOperationListItemComponent,\n BulkOperationDetailsTabsComponent,\n BulkOperationDetailsComponent,\n SingleOperationsListComponent,\n SingleOperationItemComponent,\n BulkOperationWrapperComponent,\n BulkOperationTypeListComponent,\n BulkOperationsModalComponent,\n BulkOperationsRescheduleModalComponent\n ],\n entryComponents: [\n BulkOperationsListComponent,\n BulkOperationListItemComponent,\n BulkOperationDetailsTabsComponent,\n BulkOperationDetailsComponent,\n SingleOperationsListComponent,\n SingleOperationItemComponent,\n BulkOperationWrapperComponent,\n BulkOperationTypeListComponent,\n BulkOperationsModalComponent,\n BulkOperationsRescheduleModalComponent\n ],\n exports: [\n BulkOperationsListComponent,\n BulkOperationListItemComponent,\n BulkOperationDetailsTabsComponent,\n BulkOperationDetailsComponent,\n SingleOperationsListComponent,\n SingleOperationItemComponent,\n BulkOperationWrapperComponent,\n BulkOperationTypeListComponent,\n BulkOperationsModalComponent,\n BulkOperationsRescheduleModalComponent\n ]\n})\nexport class BulkOperationsListModule {}\n"]}
1
+ {"version":3,"sources":["../../../../node_modules/tslib/tslib.es6.js","ng://@c8y/ngx-components/operations/bulk-operations-list/bulk-operation-wrapper.component.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/bulk-operation-details.service.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/modals/bulk-operations-modal.component.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/modals/bulk-operation-modals.service.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/modals/bulk-operations-reschedule-modal.component.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/bulk-operation-list-item.model.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/bulk-operation-list-item.component.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/bulk-operations-list.component.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/bulk-operation-details-tabs.component.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/bulk-operation-details.component.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/single-operation-item.model.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/single-operations-list.component.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/single-operation-item.component.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/type-list/bulk-operation-type-list.component.ts","ng://@c8y/ngx-components/operations/bulk-operations-list/bulk-operations-list.module.ts"],"names":["__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","apply","this","__decorate","decorators","target","key","desc","d","c","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","__generator","body","f","y","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","v","op","TypeError","pop","push","__read","o","m","ar","error","BulkOperationWrapperComponent","bulkOperationDetailsService","modalRef","BulkOperationDetailsService","BsModalRef","tslib_1.__decorate","Input","Component","selector","template","bulkOperationsService","modalService","openDetails","bulkOperationId","getBulkOperationById","bulkOperation","_a","data","initialState","show","class","BulkOperationsService","BsModalService","Injectable","BulkOperationsModalComponent","bsModalRef","resolver","showComponent","cancel","hide","createComponent","item","component","factory","resolveComponentFactory","container","ComponentFactoryResolver","ViewChild","static","read","ViewContainerRef","BulkOperationModalsService","bsModalService","showNewBulkOperationModal","backdrop","hideNewBulkOperationModal","BulkOperationsRescheduleModalComponent","alert","closeSubject","Subject","ngOnInit","modalTitle","getTitle","onDateAndDelaySelect","$event","dateAndDelay","isRetryOperation","gettext","onCancel","onSave","startDate","scheduledDate","toISOString","creationRamp","delayInSeconds","createBulkOperation","newBulkOperation","success","addServerFailure","er_1","updateBulkOperation","er_2","AlertService","BULK_OPERATION_STATUS_LABELS","SCHEDULED","EXECUTING","CANCELED","FAILED","SUCCESSFUL","DELETED","BULK_OPERATION_STATUS_OPTIONS","generalStatus","OperationBulkGeneralStatus","iconClass","EXECUTING_WITH_ERROR","BulkOperationListItemComponent","modal","detailsCollapsed","readOnly","showFailedOperation","EventEmitter","reload","refreshLoading","bulkOperationGeneralStatus","bulkOperationStatusOptions","finishDatePopoverText","progressBarClass","progressBarStatus","getIconClass","finishDate","calculateFinishDateMs","setProgressBar","ngOnChanges","changes","firstChange","_this","statusOptions","find","statusOption","includes","Date","getTime","progress","all","progressBarProgressFn","successful","failed","staticContentOfClass","progressBarState","progressBarColor","editSchedule","modalOptions","cloneDeep","cancelBulkOperation","confirm","Status","DANGER","deleteBulkOperation","id","emit","retryFailedOperation","clonedBulk","groupId","failedParentId","content","subscribe","setToSuccessful","openFailedOperation","isStatusScheduled","isStatusExecutingOrExecutingWithError","allOperationsCreated","executing","pending","isStatusCanceled","isStatusFailed","ModalService","Output","BulkOperationsListComponent","realtime","bulkOperationModalsService","bulkTypes","selectedTypeFilters","getTypeFilters","statusFilter$","BehaviorSubject","typeFilter$","timeFilter$","reload$","bulkOperations$","combineLatest","pipe","tap","switchMap","_b","statusFilters","timeFilters","filter","withLatestFrom","map","typeFilter","filterPipe","filterByType","shareReplay","allFilterFragments","flattenFilterFragments","getBulkTypes","bulkOperations","flattenedFragments","every","fragment","keys","operationPrototype","some","resetFilter","datePicker","clearFilter","statusFilter","reset","isFilterApplied","getValue","timeFilter","status","flatten","time","dateFrom","dateTo","getBulkOperations","addBulkOperation","listItems","forEach","listItem","collapsed","element","nativeElement","scrollIntoView","behavior","block","compareOperations","operationA","operationB","filters","reduce","flattened","current","concat","fragments","OperationBulkRealtimeService","ViewChildren","DatePickerComponent","providers","BulkOperationDetailsTabsComponent","onRetryFailedOperations","tabs","detailsTemplate","path","icon","auditTemplate","BulkOperationDetailsComponent","allFilterIsSelected","scrollToRetriedFromOperation","failedOperationId","SINGLE_OP_STATUS_NAMES","PENDING","ALL","SINGLE_OP_STATUS_PROPERTIES","selected","SingleOperationsListComponent","singleOperationStatusProperties","singleOperationStatusNames","ngAfterViewInit","filterOperationsByType","getFilterTypeOfSingleOperations","preset","setTimeout","bind","getOperationsByStatus","getSingleOperationsByStatus","singleOperations","retryBulkOperation","StatusFilterComponent","SingleOperationItemComponent","alertService","device","showIfTextTruncated","singleOperationsStatusProperties","getDeviceMO","operation","deviceId","isTextTruncated","retrySingleOperation","singleOperation","operationToCreate","omit","createSingleOperation","operationProperties","toUpperCase","getManagedObject","inventoryMO","failureReason","el","failureReasonRef","offsetWidth","scrollWidth","BulkOperationTypeListComponent","router","onCustomType","bulkList","handleClick","navigateByUrl","Router","bulkOperationListRoutes","BulkOperationsListModule","NgModule","imports","CoreModule","PopoverModule","TooltipModule","StatusFilterModule","OperationSummaryModule","BulkOperationSchedulerModule","RouterModule","forChild","declarations","entryComponents","exports"],"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, Input } from '@angular/core';\nimport { IOperationBulk } from '@c8y/client';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { BulkOperationDetailsService } from './bulk-operation-details.service';\n\n@Component({\n selector: 'c8y-bulk-operations-wrapper',\n templateUrl: './bulk-operation-wrapper.component.html'\n})\nexport class BulkOperationWrapperComponent {\n @Input() bulkOperation: Partial<IOperationBulk>;\n\n constructor(\n public bulkOperationDetailsService: BulkOperationDetailsService,\n public modalRef: BsModalRef\n ) {}\n}\n","import { Injectable } from '@angular/core';\nimport { IOperationBulk } from '@c8y/client';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { BulkOperationsService } from '@c8y/ngx-components/operations/bulk-operations-service';\nimport { BulkOperationWrapperComponent } from './bulk-operation-wrapper.component';\n\n@Injectable()\nexport class BulkOperationDetailsService {\n constructor(\n private bulkOperationsService: BulkOperationsService,\n private modalService: BsModalService\n ) {}\n\n async openDetails(bulkOperationId) {\n const bulkOperation: IOperationBulk = (await this.bulkOperationsService.getBulkOperationById(\n bulkOperationId\n )).data;\n const initialState = { bulkOperation };\n this.modalService.show(BulkOperationWrapperComponent, {\n initialState,\n class: 'modal-lg'\n });\n }\n}\n","import { Component, ViewContainerRef, ViewChild, ComponentFactoryResolver } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { OperationType } from '@c8y/ngx-components/operations/bulk-operations-service';\n\n@Component({\n selector: 'c8y-bulk-operations-modal',\n templateUrl: 'bulk-operations-modal.component.html'\n})\nexport class BulkOperationsModalComponent {\n @ViewChild('container', { static: false, read: ViewContainerRef }) container;\n showComponent: boolean = false;\n constructor(private bsModalRef: BsModalRef, private resolver: ComponentFactoryResolver) {}\n\n cancel() {\n this.bsModalRef.hide();\n }\n\n createComponent(item: OperationType) {\n if (item && item.component) {\n this.showComponent = true;\n const factory = this.resolver.resolveComponentFactory(item.component);\n this.container.createComponent(factory);\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BsModalRef, BsModalService } from 'ngx-bootstrap/modal';\nimport { BulkOperationsModalComponent } from './bulk-operations-modal.component';\n\n@Injectable()\nexport class BulkOperationModalsService {\n private bsModalRef: BsModalRef;\n\n constructor(private bsModalService: BsModalService) {}\n\n showNewBulkOperationModal() {\n this.bsModalRef = this.bsModalService.show(BulkOperationsModalComponent, {\n backdrop: 'static',\n class: 'modal-sm'\n });\n }\n\n hideNewBulkOperationModal() {\n if (this.bsModalRef) {\n this.bsModalRef.hide();\n }\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { IOperationBulk } from '@c8y/client';\nimport { AlertService, gettext } from '@c8y/ngx-components';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { Subject } from 'rxjs';\nimport { OperationSchedule } from '@c8y/ngx-components/operations/bulk-operation-scheduler';\nimport { BulkOperationsService } from '@c8y/ngx-components/operations/bulk-operations-service';\n\n@Component({\n selector: 'c8y-bulk-operations-reschedule-modal',\n templateUrl: 'bulk-operations-reschedule-modal.component.html'\n})\nexport class BulkOperationsRescheduleModalComponent implements OnInit {\n closeSubject: Subject<IOperationBulk> = new Subject();\n dateAndDelay: OperationSchedule;\n bulkOperation: Partial<IOperationBulk>;\n isRetryOperation: boolean;\n modalTitle: string;\n\n constructor(\n public bsModalRef: BsModalRef,\n private bulkOperationsService: BulkOperationsService,\n private alert: AlertService\n ) {}\n\n ngOnInit() {\n this.modalTitle = this.getTitle();\n }\n\n onDateAndDelaySelect($event) {\n this.dateAndDelay = $event;\n }\n\n getTitle() {\n return this.isRetryOperation ? gettext('Retry operation') : gettext('Edit schedule');\n }\n\n onCancel() {\n this.bsModalRef.hide();\n }\n\n async onSave() {\n let newBulkOperation;\n this.bulkOperation.startDate = this.dateAndDelay.scheduledDate.toISOString();\n this.bulkOperation.creationRamp = this.dateAndDelay.delayInSeconds;\n\n if (this.isRetryOperation) {\n try {\n newBulkOperation = await this.bulkOperationsService.createBulkOperation(this.bulkOperation);\n this.alert.success(gettext('Successfully rescheduled for a retry.'));\n } catch (er) {\n this.alert.addServerFailure(er);\n }\n } else {\n try {\n newBulkOperation = await this.bulkOperationsService.updateBulkOperation(this.bulkOperation);\n this.alert.success(gettext('Successfully rescheduled.'));\n } catch (er) {\n this.alert.addServerFailure(er);\n }\n }\n\n // send back to component from which modal was called\n this.closeSubject.next(newBulkOperation.data);\n this.bsModalRef.hide();\n }\n}\n","import { OperationBulkGeneralStatus } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components';\nimport { IStatusOption } from '@c8y/ngx-components/operations/status-filter';\n\nexport const BULK_OPERATION_STATUS_LABELS = {\n SCHEDULED: gettext('Scheduled'),\n EXECUTING: gettext('Executing'),\n CANCELED: gettext('Canceled'),\n FAILED: gettext('Completed with failures'),\n SUCCESSFUL: gettext('Completed successfully'),\n DELETED: gettext('Deleted'),\n};\n\nexport const BULK_OPERATION_STATUS_OPTIONS: IStatusOption[] = [\n {\n label: BULK_OPERATION_STATUS_LABELS.SCHEDULED,\n generalStatus: [OperationBulkGeneralStatus.SCHEDULED],\n iconClass: 'dlt-c8y-icon-calendar text-info',\n },\n {\n label: BULK_OPERATION_STATUS_LABELS.EXECUTING,\n generalStatus: [\n OperationBulkGeneralStatus.EXECUTING,\n OperationBulkGeneralStatus.EXECUTING_WITH_ERROR,\n ],\n iconClass: 'dlt-c8y-icon-refresh text-primary',\n },\n {\n label: BULK_OPERATION_STATUS_LABELS.DELETED,\n generalStatus: [OperationBulkGeneralStatus.DELETED],\n iconClass: 'dlt-c8y-icon-delete-document text-muted',\n },\n {\n label: BULK_OPERATION_STATUS_LABELS.CANCELED,\n generalStatus: [OperationBulkGeneralStatus.CANCELED],\n iconClass: 'dlt-c8y-icon-ban text-muted',\n },\n {\n label: BULK_OPERATION_STATUS_LABELS.FAILED,\n generalStatus: [OperationBulkGeneralStatus.FAILED],\n iconClass: 'dlt-c8y-icon-exclamation-triangle text-danger',\n },\n {\n label: BULK_OPERATION_STATUS_LABELS.SUCCESSFUL,\n generalStatus: [OperationBulkGeneralStatus.SUCCESSFUL],\n iconClass: 'dlt-c8y-icon-check-circle text-success',\n },\n];\n\nexport const BULK_OPERATION_FALLBACK_STATUS_ICON = 'dlt-c8y-icon-ask-question text-muted';\n","import {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport { IOperationBulk, OperationBulkGeneralStatus } from '@c8y/client';\nimport {\n AlertService,\n gettext,\n ListItemComponent,\n ModalService,\n Status\n} from '@c8y/ngx-components';\nimport { assign, cloneDeep } from 'lodash-es';\nimport { BsModalRef, BsModalService, ModalOptions } from 'ngx-bootstrap/modal';\nimport { BulkOperationsService } from '@c8y/ngx-components/operations/bulk-operations-service';\nimport { IStatusOption } from '@c8y/ngx-components/operations/status-filter';\nimport { BulkOperationsRescheduleModalComponent } from './modals/bulk-operations-reschedule-modal.component';\nimport { BULK_OPERATION_FALLBACK_STATUS_ICON, BULK_OPERATION_STATUS_OPTIONS } from './bulk-operation-list-item.model';\n\n@Component({\n selector: 'c8y-bulk-operation-list-item',\n templateUrl: './bulk-operation-list-item.component.html'\n})\nexport class BulkOperationListItemComponent implements OnInit, OnChanges {\n @Input()\n bulkOperation: Partial<IOperationBulk>;\n @Input()\n detailsCollapsed: boolean = true;\n @Input()\n readOnly: boolean = false;\n @Output() showFailedOperation = new EventEmitter();\n @Output() reload: EventEmitter<any> = new EventEmitter();\n @ViewChild('listItem', { static: true }) listItem: ListItemComponent;\n iconClass: string;\n finishDate: number;\n refreshLoading = false;\n bulkOperationGeneralStatus = OperationBulkGeneralStatus;\n bulkOperationStatusOptions: IStatusOption[] = BULK_OPERATION_STATUS_OPTIONS;\n bsModalRef: BsModalRef;\n finishDatePopoverText: string = gettext(\n 'Approximate date, estimated based on the bulk operation settings.'\n );\n progressBarClass: string = 'progress';\n progressBarColor: string;\n progressBarStatus: number = 0;\n\n constructor(\n private bulkOperationsService: BulkOperationsService,\n private modal: ModalService,\n private alert: AlertService,\n private bsModalService: BsModalService\n ) {}\n\n ngOnInit() {\n this.iconClass = this.getIconClass();\n this.finishDate = this.calculateFinishDateMs();\n this.setProgressBar();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.bulkOperation && !changes.bulkOperation.firstChange) {\n this.iconClass = this.getIconClass();\n this.setProgressBar();\n }\n }\n\n getIconClass() {\n const statusOptions = this.bulkOperationStatusOptions.find(statusOption =>\n statusOption.generalStatus.includes(this.bulkOperation.generalStatus)\n );\n return statusOptions ? statusOptions.iconClass : BULK_OPERATION_FALLBACK_STATUS_ICON;\n }\n\n calculateFinishDateMs(): number {\n const startDateMs: number = new Date(this.bulkOperation.startDate).getTime();\n const creationRampMs: number = this.bulkOperation.creationRamp * 1000;\n\n return startDateMs + creationRampMs * this.bulkOperation.progress.all;\n }\n\n progressBarProgressFn() {\n return (\n ((this.bulkOperation.progress.successful + this.bulkOperation.progress.failed) /\n this.bulkOperation.progress.all) *\n 100\n );\n }\n\n setProgressBar() {\n const staticContentOfClass = 'progress-bar progress-striped active progress-bar';\n\n const progressBarState = {\n EXECUTING: {\n progressBarClass: 'progress progress-striped active',\n progressBarColor: `${staticContentOfClass}-primary`,\n progressBarStatus: this.progressBarProgressFn()\n },\n EXECUTING_WITH_ERROR: {\n progressBarClass: 'progress progress-striped active',\n progressBarColor: `${staticContentOfClass}-danger`,\n progressBarStatus: this.progressBarProgressFn()\n },\n FAILED: {\n progressBarClass: 'progress',\n progressBarColor: `${staticContentOfClass}-danger`,\n progressBarStatus: 100\n },\n SUCCESSFUL: {\n progressBarClass: 'progress',\n progressBarColor: `${staticContentOfClass}-success`,\n progressBarStatus: 100\n }\n };\n\n assign(this, progressBarState[this.bulkOperation.generalStatus]);\n }\n\n editSchedule() {\n const rescheduledOperation = cloneDeep(this.bulkOperation);\n const initialState = {\n bulkOperation: rescheduledOperation\n };\n const modalOptions = { initialState, class: 'modal-sm', backdrop: 'static' } as ModalOptions;\n this.bsModalRef = this.bsModalService.show(\n BulkOperationsRescheduleModalComponent,\n modalOptions\n );\n }\n\n async cancelBulkOperation() {\n try {\n await this.modal.confirm(\n gettext('Cancel bulk operation'),\n gettext('You are about to cancel the bulk operation. Do you want to proceed?'),\n Status.DANGER\n );\n await this.bulkOperationsService.deleteBulkOperation(this.bulkOperation.id);\n this.reload.emit();\n this.alert.success(gettext('Operation canceled.'));\n } catch (er) {\n this.alert.addServerFailure(er);\n }\n }\n\n retryFailedOperation() {\n const clonedBulk = cloneDeep(this.bulkOperation);\n\n // change the id to failedparentId similar to the logic in deviceBulkControl.service.js\n delete clonedBulk.groupId;\n clonedBulk.failedParentId = this.bulkOperation.id;\n\n // show reschdedule modal:\n const initialState = {\n bulkOperation: clonedBulk,\n isRetryOperation: true\n };\n const modalOptions = { initialState, class: 'modal-sm', backdrop: 'static' } as ModalOptions;\n this.bsModalRef = this.bsModalService.show(\n BulkOperationsRescheduleModalComponent,\n modalOptions\n );\n this.bsModalRef.content.closeSubject.subscribe(() => {\n this.reload.emit();\n });\n }\n\n async setToSuccessful() {\n try {\n await this.modal.confirm(\n gettext('Set manually bulk operation to SUCCESSFUL'),\n gettext(\n 'You are about to change the bulk operation status to SUCCESSFUL. Do you want to proceed?'\n ),\n Status.DANGER\n );\n\n await this.bulkOperationsService.updateBulkOperation({\n id: this.bulkOperation.id,\n generalStatus: OperationBulkGeneralStatus.SUCCESSFUL\n });\n this.reload.emit();\n this.alert.success(gettext('Operation status changed to SUCCESSFUL.'));\n } catch (er) {\n this.alert.addServerFailure(er);\n }\n }\n\n openFailedOperation(failedParentId) {\n this.showFailedOperation.emit(failedParentId);\n }\n\n isStatusScheduled() {\n return this.bulkOperation.generalStatus === this.bulkOperationGeneralStatus.SCHEDULED;\n }\n\n isStatusExecutingOrExecutingWithError() {\n return (\n this.bulkOperation.generalStatus === this.bulkOperationGeneralStatus.EXECUTING ||\n this.bulkOperation.generalStatus === this.bulkOperationGeneralStatus.EXECUTING_WITH_ERROR\n );\n }\n\n allOperationsCreated() {\n return (\n this.bulkOperation.progress.all ===\n this.bulkOperation.progress.executing +\n this.bulkOperation.progress.failed +\n this.bulkOperation.progress.pending +\n this.bulkOperation.progress.successful\n );\n }\n\n isStatusCanceled() {\n return this.bulkOperation.generalStatus === this.bulkOperationGeneralStatus.CANCELED;\n }\n\n isStatusFailed() {\n return this.bulkOperation.generalStatus === this.bulkOperationGeneralStatus.FAILED;\n }\n}\n","import { Component, OnInit, QueryList, ViewChild, ViewChildren } from '@angular/core';\nimport { IOperationBulk, IResultList } from '@c8y/client';\nimport { OperationBulkRealtimeService, DatePickerComponent } from '@c8y/ngx-components';\nimport { flatten } from 'lodash-es';\nimport { BehaviorSubject, Observable, combineLatest, pipe } from 'rxjs';\nimport { map, tap, switchMap, withLatestFrom, shareReplay } from 'rxjs/operators';\nimport { StatusFilterComponent, IStatusOption } from '@c8y/ngx-components/operations/status-filter';\nimport {\n BulkOperationsService,\n OperationType\n} from '@c8y/ngx-components/operations/bulk-operations-service';\nimport { BulkOperationModalsService } from './modals/bulk-operation-modals.service';\nimport { BulkOperationListItemComponent } from './bulk-operation-list-item.component';\nimport { BULK_OPERATION_STATUS_OPTIONS } from './bulk-operation-list-item.model';\n@Component({\n selector: 'c8y-bulk-operations',\n templateUrl: './bulk-operations-list.component.html',\n providers: [OperationBulkRealtimeService]\n})\nexport class BulkOperationsListComponent implements OnInit {\n bulkTypes: OperationType[] = [];\n selectedTypeFilters = this.getTypeFilters();\n bulkOperationStatusOptions: IStatusOption[] = BULK_OPERATION_STATUS_OPTIONS;\n\n filterPipe;\n refreshLoading: boolean = false;\n statusFilter$: BehaviorSubject<IStatusOption[]> = new BehaviorSubject(null);\n typeFilter$: BehaviorSubject<OperationType[]> = new BehaviorSubject(null);\n timeFilter$: BehaviorSubject<any> = new BehaviorSubject(null);\n reload$: BehaviorSubject<void> = new BehaviorSubject(null);\n @ViewChildren(BulkOperationListItemComponent) listItems: QueryList<\n BulkOperationListItemComponent\n >;\n @ViewChild('statusFilter', { static: true }) statusFilter: StatusFilterComponent;\n @ViewChild(DatePickerComponent, { static: true }) datePicker: DatePickerComponent;\n\n bulkOperations$: Observable<IResultList<IOperationBulk>> = combineLatest(\n this.statusFilter$,\n this.timeFilter$,\n this.typeFilter$,\n this.reload$\n ).pipe(\n tap(() => {\n this.refreshLoading = true;\n }),\n switchMap(([statusFilters, timeFilters]) => this.filter(statusFilters, timeFilters)),\n withLatestFrom(this.typeFilter$),\n map(([result, typeFilter]: [IResultList<IOperationBulk>, OperationType[]]) => {\n this.filterPipe = pipe(map((data: []) => this.filterByType(data, typeFilter)));\n return { ...result, data: this.filterByType(result.data, typeFilter) };\n }),\n tap(() => {\n this.refreshLoading = false;\n }),\n shareReplay(1)\n );\n\n private allFilterFragments: string[];\n\n constructor(\n public realtime: OperationBulkRealtimeService,\n private bulkOperationsService: BulkOperationsService,\n private bulkOperationModalsService: BulkOperationModalsService\n ) {\n this.allFilterFragments = this.flattenFilterFragments(this.getTypeFilters());\n }\n\n ngOnInit() {\n this.bulkTypes = this.bulkOperationsService.getBulkTypes();\n }\n\n filterByType(bulkOperations: IOperationBulk[], typeFilter) {\n const flattenedFragments: string[] = this.flattenFilterFragments(typeFilter);\n if (\n // return data unfiltered if no filters selected...\n !flattenedFragments.length ||\n // ...or when all filters are selected\n this.allFilterFragments.every(fragment => flattenedFragments.includes(fragment))\n ) {\n return bulkOperations;\n }\n\n const filteredData = bulkOperations.filter(item => {\n return Object.keys(item.operationPrototype).some(key => flattenedFragments.includes(key));\n });\n\n return filteredData;\n }\n\n resetFilter() {\n this.statusFilter$.next(null);\n this.timeFilter$.next(null);\n this.typeFilter$.next(null);\n\n this.datePicker.clearFilter();\n this.selectedTypeFilters = this.getTypeFilters();\n this.statusFilter.reset();\n }\n\n isFilterApplied() {\n return (\n this.statusFilter$.getValue() || this.typeFilter$.getValue() || this.timeFilter$.getValue()\n );\n }\n\n filter(statusFilters, timeFilter) {\n const status =\n statusFilters && statusFilters.length > 0\n ? {\n generalStatus: flatten(statusFilters.map(statusFilter => statusFilter.generalStatus))\n }\n : {};\n\n const time = timeFilter\n ? {\n ...(timeFilter.dateFrom && {\n dateFrom: timeFilter.dateFrom.toISOString()\n }),\n ...(timeFilter.dateTo && {\n dateTo: timeFilter.dateTo.toISOString()\n })\n }\n : {};\n return this.getBulkOperations({ ...status, ...time });\n }\n\n getBulkOperations(filter?) {\n return this.bulkOperationsService.getBulkOperations(filter);\n }\n\n getTypeFilters() {\n return this.bulkOperationsService.getBulkTypes();\n }\n\n addBulkOperation() {\n this.bulkOperationModalsService.showNewBulkOperationModal();\n }\n\n openFailedOperation(failedParentId) {\n this.listItems.forEach(item => {\n if (item.bulkOperation.id === failedParentId) {\n item.listItem.collapsed = false;\n item.listItem.element.nativeElement.scrollIntoView({ behavior: 'smooth', block: 'center' });\n }\n });\n }\n\n compareOperations(operationA: IOperationBulk, operationB: IOperationBulk): number {\n return new Date(operationA.startDate).getTime() - new Date(operationB.startDate).getTime();\n }\n\n private flattenFilterFragments(filters: OperationType[]): string[] {\n return (filters || []).reduce((flattened, current) => flattened.concat(current.fragments), []);\n }\n}\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n ViewChild,\n ViewContainerRef\n} from '@angular/core';\nimport { IOperationBulk } from '@c8y/client';\nimport { gettext, Tab } from '@c8y/ngx-components';\n\n@Component({\n selector: 'c8y-bulk-operation-details-tabs',\n templateUrl: './bulk-operation-details-tabs.component.html'\n})\nexport class BulkOperationDetailsTabsComponent implements OnInit {\n @Input()\n bulkOperation: Partial<IOperationBulk>;\n @Input()\n readOnly: boolean = false;\n @Output() onRetryFailedOperations: EventEmitter<Partial<IOperationBulk>> = new EventEmitter();\n @Output() showFailedOperation: EventEmitter<number> = new EventEmitter();\n\n @ViewChild('details', { static: true }) detailsTemplate: any;\n @ViewChild('audit', { static: true }) auditTemplate: any;\n\n tabs: Tab[] = [];\n template: ViewContainerRef;\n\n ngOnInit(): void {\n this.template = this.detailsTemplate;\n\n this.tabs = [\n {\n label: gettext('Details'),\n path: null,\n icon: 'asterisk',\n template: this.detailsTemplate\n },\n {\n label: gettext('History of changes'),\n path: null,\n icon: 'archive',\n template: this.auditTemplate\n }\n ];\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { IManagedObject, IOperationBulk } from '@c8y/client';\n\n@Component({\n selector: 'c8y-bulk-operation-details',\n templateUrl: './bulk-operation-details.component.html'\n})\nexport class BulkOperationDetailsComponent {\n allFilterIsSelected: boolean = false;\n collapsed: boolean;\n device: IManagedObject;\n\n @Input()\n bulkOperation: Partial<IOperationBulk>;\n @Input()\n readOnly: boolean = false;\n @Output() showFailedOperation: EventEmitter<number> = new EventEmitter();\n\n scrollToRetriedFromOperation(failedOperationId) {\n this.showFailedOperation.emit(failedOperationId);\n }\n}\n","import { gettext } from '@c8y/ngx-components';\n\nexport const SINGLE_OP_STATUS_NAMES = {\n PENDING: gettext('Pending'),\n EXECUTING: gettext('Executing'),\n FAILED: gettext('Failed'),\n SUCCESSFUL: gettext('Successful'),\n ALL: gettext('All')\n};\n\nexport const SINGLE_OP_STATUS_PROPERTIES = [\n {\n label: SINGLE_OP_STATUS_NAMES.PENDING,\n iconClass: 'dlt-c8y-icon-clock-o text-info',\n selected: false\n },\n {\n label: SINGLE_OP_STATUS_NAMES.EXECUTING,\n iconClass: 'dlt-c8y-icon-refresh text-info',\n selected: false\n },\n {\n label: SINGLE_OP_STATUS_NAMES.SUCCESSFUL,\n iconClass: 'dlt-c8y-icon-check-circle text-success',\n selected: false\n },\n {\n label: SINGLE_OP_STATUS_NAMES.FAILED,\n iconClass: 'dlt-c8y-icon-exclamation-circle text-danger',\n selected: false\n }\n];\n","import {\n AfterViewInit,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport { IOperation, IOperationBulk, IResultList } from '@c8y/client';\nimport { StatusFilterComponent, IStatusOption } from '@c8y/ngx-components/operations/status-filter';\nimport { BulkOperationsService } from '@c8y/ngx-components/operations/bulk-operations-service';\nimport { SINGLE_OP_STATUS_NAMES, SINGLE_OP_STATUS_PROPERTIES } from './single-operation-item.model';\n\n@Component({\n selector: 'c8y-single-operations-list',\n templateUrl: './single-operations-list.component.html'\n})\nexport class SingleOperationsListComponent implements AfterViewInit, OnChanges {\n @Input()\n bulkOperation: Partial<IOperationBulk>;\n @Input()\n readOnly: boolean = false;\n @Output() onRetryFailedOperations: EventEmitter<Partial<IOperationBulk>> = new EventEmitter();\n\n @ViewChild(StatusFilterComponent, { static: false })\n statusFilter: StatusFilterComponent;\n\n singleOperationStatusProperties = SINGLE_OP_STATUS_PROPERTIES;\n singleOperationStatusNames = SINGLE_OP_STATUS_NAMES;\n singleOperations: IResultList<IOperation>;\n\n constructor(private bulkOperationsService: BulkOperationsService) {}\n\n async ngAfterViewInit() {\n if (this.statusFilter) {\n this.filterOperationsByType();\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.bulkOperation && !changes.bulkOperation.firstChange) {\n this.filterOperationsByType();\n }\n }\n\n filterOperationsByType() {\n if (this.statusFilter) {\n const typeFilter = this.getFilterTypeOfSingleOperations();\n\n this.statusFilter.preset(\n typeFilter === this.singleOperationStatusNames.ALL\n ? []\n : [{ label: typeFilter } as IStatusOption]\n );\n } else {\n setTimeout(this.filterOperationsByType.bind(this));\n }\n }\n\n getFilterTypeOfSingleOperations() {\n const progress = this.bulkOperation.progress;\n\n if (progress.failed > 0) {\n return this.singleOperationStatusNames.FAILED;\n } else if (progress.failed === 0 && progress.successful === 0 && progress.pending === 0) {\n return this.singleOperationStatusNames.EXECUTING;\n } else if (progress.failed === 0 && progress.successful === 0 && progress.executing === 0) {\n return this.singleOperationStatusNames.PENDING;\n } else if (progress.failed === 0 && progress.pending === 0 && progress.executing === 0) {\n return this.singleOperationStatusNames.SUCCESSFUL;\n }\n\n return this.singleOperationStatusNames.ALL;\n }\n\n async getOperationsByStatus(filter: IStatusOption[]) {\n this.singleOperations = await this.bulkOperationsService.getSingleOperationsByStatus(\n filter[0] && filter[0].label,\n this.bulkOperation.id\n );\n }\n\n retryBulkOperation() {\n this.onRetryFailedOperations.emit(this.bulkOperation);\n }\n}\n","import { Component, ElementRef, Input, ViewChild } from '@angular/core';\nimport { IOperation } from '@c8y/client';\nimport { AlertService, gettext } from '@c8y/ngx-components';\nimport { BulkOperationsService } from '@c8y/ngx-components/operations/bulk-operations-service';\nimport { omit } from 'lodash-es';\nimport { SINGLE_OP_STATUS_NAMES, SINGLE_OP_STATUS_PROPERTIES } from './single-operation-item.model';\n\n@Component({\n selector: 'c8y-single-operation-item',\n templateUrl: './single-operation-item.component.html'\n})\nexport class SingleOperationItemComponent {\n device = {};\n showIfTextTruncated = false;\n singleOperationStatusNames = SINGLE_OP_STATUS_NAMES;\n singleOperationsStatusProperties = SINGLE_OP_STATUS_PROPERTIES;\n iconClass: string;\n @Input()\n operation: IOperation;\n @Input()\n readOnly: boolean = false;\n @ViewChild('failureReason', { static: true }) failureReasonRef: ElementRef;\n\n constructor(\n private bulkOperationsService: BulkOperationsService,\n private alertService: AlertService\n ) {}\n\n async ngOnInit() {\n this.iconClass = this.getIconClass();\n this.device = await this.getDeviceMO(this.operation.deviceId);\n }\n\n ngAfterViewInit() {\n this.isTextTruncated();\n }\n\n async retrySingleOperation(singleOperation) {\n const operationToCreate = omit(singleOperation, [\n 'id',\n 'self',\n 'status',\n 'failureReason',\n 'creationTime',\n 'delivery'\n ]);\n\n try {\n await this.bulkOperationsService.createSingleOperation(operationToCreate);\n this.alertService.success(gettext('Operation created.'));\n } catch (er) {\n this.alertService.addServerFailure(er);\n }\n }\n\n getIconClass() {\n return this.singleOperationsStatusProperties.find(\n operationProperties => operationProperties.label.toUpperCase() === this.operation.status\n ).iconClass;\n }\n\n private async getDeviceMO(deviceId) {\n const inventoryMO = await this.bulkOperationsService.getManagedObject(deviceId);\n if (inventoryMO) {\n return inventoryMO.data;\n }\n }\n\n private isTextTruncated() {\n if (this.operation.failureReason) {\n const el = this.failureReasonRef.nativeElement;\n this.showIfTextTruncated = el.offsetWidth < el.scrollWidth ? true : false;\n }\n }\n}\n","import { Component, EventEmitter, Output, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\nimport {\n BulkOperationsService,\n OperationType\n} from '@c8y/ngx-components/operations/bulk-operations-service';\nimport { BulkOperationModalsService } from '../modals/bulk-operation-modals.service';\n\n@Component({\n selector: 'c8y-bulk-operation-type-list',\n templateUrl: './bulk-operation-type-list.component.html'\n})\nexport class BulkOperationTypeListComponent implements OnInit {\n @Output() onCustomType: EventEmitter<OperationType> = new EventEmitter();\n bulkList: OperationType[] = [];\n\n constructor(\n private router: Router,\n private bulkOperationsService: BulkOperationsService,\n private bulkOperationModalsService: BulkOperationModalsService\n ) {}\n\n ngOnInit() {\n this.bulkList = this.bulkOperationsService.getBulkTypes();\n }\n\n handleClick(item: OperationType) {\n if (item.path) {\n this.bulkOperationModalsService.hideNewBulkOperationModal();\n this.router.navigateByUrl(item.path);\n } else if (item.component) {\n this.onCustomType.emit(item);\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\n\nimport { CoreModule, Route } from '@c8y/ngx-components';\nimport { StatusFilterModule } from '@c8y/ngx-components/operations/status-filter';\nimport { OperationSummaryModule } from '@c8y/ngx-components/operations/operation-summary';\nimport { BulkOperationSchedulerModule } from '@c8y/ngx-components/operations/bulk-operation-scheduler';\n\nimport { BulkOperationDetailsService } from './bulk-operation-details.service';\nimport { BulkOperationsListComponent } from './bulk-operations-list.component';\nimport { BulkOperationListItemComponent } from './bulk-operation-list-item.component';\nimport { BulkOperationDetailsTabsComponent } from './bulk-operation-details-tabs.component';\nimport { BulkOperationDetailsComponent } from './bulk-operation-details.component';\nimport { SingleOperationsListComponent } from './single-operations-list.component';\nimport { SingleOperationItemComponent } from './single-operation-item.component';\nimport { BulkOperationWrapperComponent } from './bulk-operation-wrapper.component';\nimport { BulkOperationTypeListComponent } from './type-list/bulk-operation-type-list.component';\nimport { BulkOperationModalsService } from './modals/bulk-operation-modals.service';\nimport { BulkOperationsModalComponent } from './modals/bulk-operations-modal.component';\nimport { BulkOperationsRescheduleModalComponent } from './modals/bulk-operations-reschedule-modal.component';\n\nexport const bulkOperationListRoutes: Route[] = [\n {\n path: 'devicecontrol/bulk',\n component: BulkOperationsListComponent\n }\n];\n\n/**\n * This module allows for displaying the list of bulk operations and their details.\n */\n@NgModule({\n imports: [\n CoreModule,\n PopoverModule,\n TooltipModule,\n StatusFilterModule,\n OperationSummaryModule,\n BulkOperationSchedulerModule,\n RouterModule.forChild(bulkOperationListRoutes)\n ],\n providers: [BulkOperationDetailsService, BulkOperationModalsService],\n declarations: [\n BulkOperationsListComponent,\n BulkOperationListItemComponent,\n BulkOperationDetailsTabsComponent,\n BulkOperationDetailsComponent,\n SingleOperationsListComponent,\n SingleOperationItemComponent,\n BulkOperationWrapperComponent,\n BulkOperationTypeListComponent,\n BulkOperationsModalComponent,\n BulkOperationsRescheduleModalComponent\n ],\n entryComponents: [\n BulkOperationsListComponent,\n BulkOperationListItemComponent,\n BulkOperationDetailsTabsComponent,\n BulkOperationDetailsComponent,\n SingleOperationsListComponent,\n SingleOperationItemComponent,\n BulkOperationWrapperComponent,\n BulkOperationTypeListComponent,\n BulkOperationsModalComponent,\n BulkOperationsRescheduleModalComponent\n ],\n exports: [\n BulkOperationsListComponent,\n BulkOperationListItemComponent,\n BulkOperationDetailsTabsComponent,\n BulkOperationDetailsComponent,\n SingleOperationsListComponent,\n SingleOperationItemComponent,\n BulkOperationWrapperComponent,\n BulkOperationTypeListComponent,\n BulkOperationsModalComponent,\n BulkOperationsRescheduleModalComponent\n ]\n})\nexport class BulkOperationsListModule {}\n"]}
@@ -1535,6 +1535,7 @@
1535
1535
  };
1536
1536
  this.saving = false;
1537
1537
  this.firmwarePreselected = false;
1538
+ this.textForFirmwareUrlPopover = ngxComponents.gettext("Path for binaries can vary depending on device agent implementation, e.g.:\n /firmware/binaries/firmware1.bin\n https://firmware/binary/123\n ftp://firmware/binary/123.tar.gz\n ");
1538
1539
  }
1539
1540
  AddFirmwareModalComponent.prototype.ngOnInit = function () {
1540
1541
  this.setInitialState();
@@ -1640,7 +1641,7 @@
1640
1641
  AddFirmwareModalComponent = __decorate([
1641
1642
  core.Component({
1642
1643
  selector: 'c8y-add-firmware-software-modal',
1643
- template: "<div class=\"viewport-modal\">\n <div class=\"modal-header dialog-header\">\n <i [c8yIcon]=\"'c8y-firmware'\"></i>\n <h4 translate>\n Add firmware\n </h4>\n </div>\n <div class=\"p-16 text-center separator-bottom\" *ngIf=\"!firmwarePreselected\">\n <p class=\"lead m-0\" translate>\n Select or create new firmware\n </p>\n </div>\n <form\n class=\"d-contents\"\n autocomplete=\"off\"\n #firmwareForm=\"ngForm\"\n (ngSubmit)=\"firmwareForm.form.valid && save()\"\n >\n <div class=\"modal-inner-scroll\">\n <div class=\"modal-body\">\n <div [hidden]=\"firmwarePreselected\">\n <c8y-form-group>\n <label for=\"firmwareName\" translate>Firmware</label>\n <c8y-typeahead\n [(ngModel)]=\"model.selected\"\n name=\"firmwareName\"\n placeholder=\"{{ 'Select or enter' | translate }}\"\n (onSearch)=\"onInput.next($event)\"\n [required]=\"true\"\n >\n <c8y-li\n *c8yFor=\"\n let firmware of firmwaresResult;\n loadMore: 'auto';\n notFound: notFoundTemplate\n \"\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n (click)=\"onFirmwareSelect(firmware)\"\n [active]=\"model.selected === firmware\"\n >\n <c8y-highlight\n [text]=\"firmware.name || '--'\"\n [pattern]=\"onInput | async\"\n ></c8y-highlight>\n </c8y-li>\n <ng-template #notFoundTemplate>\n <c8y-li class=\"bg-gray-lighter p-8\" *ngIf=\"(onInput | async)?.length > 0\">\n <span translate>No match found, add new`firmware`? </span>\n <button\n title=\"{{ 'Create new`firmware`' | translate }}\"\n type=\"button\"\n class=\"btn btn-primary btn-xs m-l-16\"\n translate\n >\n Create new`firmware`\n </button>\n </c8y-li>\n </ng-template>\n </c8y-typeahead>\n </c8y-form-group>\n\n <c8y-form-group>\n <label for=\"firmwareDescription\" translate>Description</label>\n <input\n id=\"firmwareDescription\"\n class=\"form-control\"\n autocomplete=\"off\"\n name=\"description\"\n [(ngModel)]=\"model.description\"\n placeholder=\"{{ 'e.g. Firmware for hardware revision b' | translate }}\"\n [disabled]=\"model.selected?.id\"\n [required]=\"true\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label for=\"firmwareDeviceTypeFilter\" translate>Device type filter</label>\n <input\n id=\"firmwareDeviceTypeFilter\"\n class=\"form-control\"\n name=\"firmwareDeviceTypeFilter\"\n popover=\"{{\n 'If the filter is set, the firmware will show up for installation only for devices of that type. If no filter is set, it will be available for all devices.'\n | translate\n }}\"\n [(ngModel)]=\"model.deviceType\"\n placeholder=\"{{ 'e.g.' | translate }} c8y_Linux\"\n [disabled]=\"model.selected?.id\"\n />\n </c8y-form-group>\n </div>\n\n <c8y-form-group>\n <label for=\"firmwareVersion\" translate>Version</label>\n <input\n id=\"firmwareVersion\"\n class=\"form-control\"\n autocomplete=\"off\"\n name=\"version\"\n [(ngModel)]=\"model.version\"\n placeholder=\"{{ 'e.g.' | translate }} 1.0.0\"\n [required]=\"true\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <div class=\"legend form-block m-t-40\" translate>Firmware file</div>\n <c8y-file-picker [maxAllowedFiles]=\"1\" (onFilesPicked)=\"onFile($event)\">\n </c8y-file-picker>\n </c8y-form-group>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button\n title=\"{{ 'Cancel' | translate }}\"\n class=\"btn btn-default\"\n type=\"button\"\n (click)=\"cancel()\"\n [disabled]=\"saving\"\n translate\n >\n Cancel\n </button>\n\n <button\n title=\"{{ 'Add firmware' | translate }}\"\n class=\"btn btn-primary\"\n type=\"submit\"\n [ngClass]=\"{ 'btn-pending': saving }\"\n [disabled]=\"\n !firmwareForm.form.valid ||\n firmwareForm.form.pristine ||\n saving ||\n (!model.binary?.url && !model.binary?.file)\n \"\n translate\n >\n Add firmware\n </button>\n </div>\n </form>\n</div>\n"
1644
+ template: "<div class=\"viewport-modal\">\n <div class=\"modal-header dialog-header\">\n <i [c8yIcon]=\"'c8y-firmware'\"></i>\n <h4 translate>\n Add firmware\n </h4>\n </div>\n <div class=\"p-16 text-center separator-bottom\" *ngIf=\"!firmwarePreselected\">\n <p class=\"lead m-0\" translate>\n Select or create new firmware\n </p>\n </div>\n <form\n class=\"d-contents\"\n autocomplete=\"off\"\n #firmwareForm=\"ngForm\"\n (ngSubmit)=\"firmwareForm.form.valid && save()\"\n >\n <div class=\"modal-inner-scroll\">\n <div class=\"modal-body\">\n <div [hidden]=\"firmwarePreselected\">\n <c8y-form-group>\n <label for=\"firmwareName\" translate>Firmware</label>\n <c8y-typeahead\n [(ngModel)]=\"model.selected\"\n name=\"firmwareName\"\n placeholder=\"{{ 'Select or enter' | translate }}\"\n (onSearch)=\"onInput.next($event)\"\n [required]=\"true\"\n >\n <c8y-li\n *c8yFor=\"\n let firmware of firmwaresResult;\n loadMore: 'auto';\n notFound: notFoundTemplate\n \"\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n (click)=\"onFirmwareSelect(firmware)\"\n [active]=\"model.selected === firmware\"\n >\n <c8y-highlight\n [text]=\"firmware.name || '--'\"\n [pattern]=\"onInput | async\"\n ></c8y-highlight>\n </c8y-li>\n <ng-template #notFoundTemplate>\n <c8y-li class=\"bg-gray-lighter p-8\" *ngIf=\"(onInput | async)?.length > 0\">\n <span translate>No match found, add new`firmware`? </span>\n <button\n title=\"{{ 'Create new`firmware`' | translate }}\"\n type=\"button\"\n class=\"btn btn-primary btn-xs m-l-16\"\n translate\n >\n Create new`firmware`\n </button>\n </c8y-li>\n </ng-template>\n </c8y-typeahead>\n </c8y-form-group>\n\n <c8y-form-group>\n <label for=\"firmwareDescription\" translate>Description</label>\n <input\n id=\"firmwareDescription\"\n class=\"form-control\"\n autocomplete=\"off\"\n name=\"description\"\n [(ngModel)]=\"model.description\"\n placeholder=\"{{ 'e.g. Firmware for hardware revision b' | translate }}\"\n [disabled]=\"model.selected?.id\"\n [required]=\"true\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label for=\"firmwareDeviceTypeFilter\" translate>Device type filter</label>\n <input\n id=\"firmwareDeviceTypeFilter\"\n class=\"form-control\"\n name=\"firmwareDeviceTypeFilter\"\n popover=\"{{\n 'If the filter is set, the firmware will show up for installation only for devices of that type. If no filter is set, it will be available for all devices.'\n | translate\n }}\"\n [(ngModel)]=\"model.deviceType\"\n placeholder=\"{{ 'e.g.' | translate }} c8y_Linux\"\n [disabled]=\"model.selected?.id\"\n />\n </c8y-form-group>\n </div>\n\n <c8y-form-group>\n <label for=\"firmwareVersion\" translate>Version</label>\n <input\n id=\"firmwareVersion\"\n class=\"form-control\"\n autocomplete=\"off\"\n name=\"version\"\n [(ngModel)]=\"model.version\"\n placeholder=\"{{ 'e.g.' | translate }} 1.0.0\"\n [required]=\"true\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <div class=\"legend form-block m-t-40\" translate>Firmware file</div>\n <c8y-file-picker [maxAllowedFiles]=\"1\" (onFilesPicked)=\"onFile($event)\" [fileUrlPopover]=\"textForFirmwareUrlPopover\">\n </c8y-file-picker>\n </c8y-form-group>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button\n title=\"{{ 'Cancel' | translate }}\"\n class=\"btn btn-default\"\n type=\"button\"\n (click)=\"cancel()\"\n [disabled]=\"saving\"\n translate\n >\n Cancel\n </button>\n\n <button\n title=\"{{ 'Add firmware' | translate }}\"\n class=\"btn btn-primary\"\n type=\"submit\"\n [ngClass]=\"{ 'btn-pending': saving }\"\n [disabled]=\"\n !firmwareForm.form.valid ||\n firmwareForm.form.pristine ||\n saving ||\n (!model.binary?.url && !model.binary?.file)\n \"\n translate\n >\n Add firmware\n </button>\n </div>\n </form>\n</div>\n"
1644
1645
  })
1645
1646
  ], AddFirmwareModalComponent);
1646
1647
  return AddFirmwareModalComponent;
@@ -1653,6 +1654,7 @@
1653
1654
  this.repository = repository;
1654
1655
  this.alert = alert;
1655
1656
  this.saved = new core.EventEmitter();
1657
+ this.textForFirmwareUrlPopover = ngxComponents.gettext("Path for binaries can vary depending on device agent implementation, e.g.:\n /firmware/binaries/firmware1.bin\n https://firmware/binary/123\n ftp://firmware/binary/123.tar.gz\n ");
1656
1658
  this.model = {
1657
1659
  selected: undefined,
1658
1660
  dependency: null,
@@ -1771,7 +1773,7 @@
1771
1773
  AddFirmwarePatchModalComponent = __decorate([
1772
1774
  core.Component({
1773
1775
  selector: 'c8y-add-firmware-patch-modal.component',
1774
- template: "<div class=\"viewport-modal\">\n <div class=\"modal-header dialog-header\">\n <i [c8yIcon]=\"'c8y-firmware'\"></i>\n <h4 translate>\n Add firmware patch\n </h4>\n </div>\n <div class=\"p-16 text-center separator-bottom\">\n <p class=\"lead m-0\" translate>\n Select a firmware version\n </p>\n </div>\n\n <form class=\"d-contents\" autocomplete=\"off\" #firmwarePatchForm=\"ngForm\" (ngSubmit)=\"save()\">\n <div class=\"modal-inner-scroll\">\n <div class=\"modal-body\">\n <div [hidden]=\"firmwarePreselected\">\n <c8y-form-group>\n <label for=\"firmwareName\" translate>Firmware</label>\n <c8y-typeahead\n [ngModel]=\"model.selected\"\n name=\"firmwareName\"\n placeholder=\"{{ 'Select or enter' | translate }}\"\n (onSearch)=\"firmwareInput$.next($event)\"\n [allowFreeEntries]=\"false\"\n [required]=\"true\"\n >\n <c8y-li\n *c8yFor=\"let firmware of firmwares$ | async; loadMore: 'auto'\"\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n (click)=\"model.selected = firmware; firmwareSelected$.next(firmware)\"\n [active]=\"model.selected === firmware\"\n >\n <c8y-highlight\n [text]=\"firmware.name || '--'\"\n [pattern]=\"firmwareInput$ | async\"\n ></c8y-highlight>\n </c8y-li>\n </c8y-typeahead>\n <c8y-messages\n ><c8y-message\n name=\"notExisting\"\n [text]=\"'Select one of the existing firmwares.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n\n <c8y-form-group>\n <label for=\"patchDependency\" class=\"m-r-8\" translate>Version</label>\n <c8y-typeahead\n [ngModel]=\"model.dependency\"\n name=\"patchDependency\"\n placeholder=\"{{ 'Select or enter' | translate }}\"\n (onSearch)=\"patchDependencyInput$.next($event)\"\n [displayProperty]=\"'c8y_Firmware.version'\"\n [allowFreeEntries]=\"false\"\n [disabled]=\"\n (baseVersions$ | async) === null || (baseVersions$ | async)?.data.length === 0\n \"\n [required]=\"true\"\n >\n <c8y-li\n *c8yFor=\"\n let baseVersion of baseVersions$;\n loadMore: 'auto';\n pipe: baseVersionsFilterPipe\n \"\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n (click)=\"model.dependency = baseVersion\"\n [active]=\"model.dependency === baseVersion\"\n >\n <c8y-highlight\n [text]=\"baseVersion.c8y_Firmware.version || '--'\"\n [pattern]=\"patchDependencyInput$ | async\"\n ></c8y-highlight>\n </c8y-li>\n </c8y-typeahead>\n <c8y-messages\n ><c8y-message\n name=\"notExisting\"\n [text]=\"'Select one of the existing versions.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n\n <c8y-form-group>\n <label for=\"patchVersion\" translate>Patch</label>\n <input\n id=\"patchVersion\"\n class=\"form-control\"\n autocomplete=\"off\"\n name=\"patchVersion\"\n [(ngModel)]=\"model.patchVersion\"\n placeholder=\"{{ 'e.g.' | translate }} 1.0.0\"\n required\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <div class=\"legend form-block m-t-40\" translate>Patch file</div>\n <c8y-file-picker [maxAllowedFiles]=\"1\" (onFilesPicked)=\"onFile($event)\">\n </c8y-file-picker>\n </c8y-form-group>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button\n title=\"{{ 'Cancel' | translate }}\"\n class=\"btn btn-default\"\n type=\"button\"\n (click)=\"cancel()\"\n [disabled]=\"saving\"\n translate\n >\n Cancel\n </button>\n <button\n title=\"{{ 'Add firmware patch' | translate }}\"\n class=\"btn btn-primary\"\n [ngClass]=\"{ 'btn-pending': saving }\"\n type=\"submit\"\n [disabled]=\"\n !firmwarePatchForm.form.valid ||\n firmwarePatchForm.form.pristine ||\n (!model.binary?.url && !model.binary?.file) ||\n saving\n \"\n translate\n >\n Add firmware patch\n </button>\n </div>\n </form>\n</div>\n"
1776
+ template: "<div class=\"viewport-modal\">\n <div class=\"modal-header dialog-header\">\n <i [c8yIcon]=\"'c8y-firmware'\"></i>\n <h4 translate>\n Add firmware patch\n </h4>\n </div>\n <div class=\"p-16 text-center separator-bottom\">\n <p class=\"lead m-0\" translate>\n Select a firmware version\n </p>\n </div>\n\n <form\n class=\"d-contents\"\n autocomplete=\"off\"\n #firmwarePatchForm=\"ngForm\"\n (ngSubmit)=\"firmwarePatchForm.form.valid && save()\"\n >\n <div class=\"modal-inner-scroll\">\n <div class=\"modal-body\">\n <div [hidden]=\"firmwarePreselected\">\n <c8y-form-group>\n <label for=\"firmwareName\" translate>Firmware</label>\n <c8y-typeahead\n [ngModel]=\"model.selected\"\n name=\"firmwareName\"\n placeholder=\"{{ 'Select or enter' | translate }}\"\n (onSearch)=\"firmwareInput$.next($event)\"\n [allowFreeEntries]=\"false\"\n [required]=\"true\"\n >\n <c8y-li\n *c8yFor=\"let firmware of firmwares$ | async; loadMore: 'auto'\"\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n (click)=\"model.selected = firmware; firmwareSelected$.next(firmware)\"\n [active]=\"model.selected === firmware\"\n >\n <c8y-highlight\n [text]=\"firmware.name || '--'\"\n [pattern]=\"firmwareInput$ | async\"\n ></c8y-highlight>\n </c8y-li>\n </c8y-typeahead>\n <c8y-messages\n ><c8y-message\n name=\"notExisting\"\n [text]=\"'Select one of the existing firmwares.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n\n <c8y-form-group>\n <label for=\"patchDependency\" class=\"m-r-8\" translate>Version</label>\n <c8y-typeahead\n [ngModel]=\"model.dependency\"\n name=\"patchDependency\"\n placeholder=\"{{ 'Select or enter' | translate }}\"\n (onSearch)=\"patchDependencyInput$.next($event)\"\n [displayProperty]=\"'c8y_Firmware.version'\"\n [allowFreeEntries]=\"false\"\n [disabled]=\"\n (baseVersions$ | async) === null || (baseVersions$ | async)?.data.length === 0\n \"\n [required]=\"true\"\n >\n <c8y-li\n *c8yFor=\"\n let baseVersion of baseVersions$;\n loadMore: 'auto';\n pipe: baseVersionsFilterPipe\n \"\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n (click)=\"model.dependency = baseVersion\"\n [active]=\"model.dependency === baseVersion\"\n >\n <c8y-highlight\n [text]=\"baseVersion.c8y_Firmware.version || '--'\"\n [pattern]=\"patchDependencyInput$ | async\"\n ></c8y-highlight>\n </c8y-li>\n </c8y-typeahead>\n <c8y-messages\n ><c8y-message\n name=\"notExisting\"\n [text]=\"'Select one of the existing versions.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n\n <c8y-form-group>\n <label for=\"patchVersion\" translate>Patch</label>\n <input\n id=\"patchVersion\"\n class=\"form-control\"\n autocomplete=\"off\"\n name=\"patchVersion\"\n [(ngModel)]=\"model.patchVersion\"\n placeholder=\"{{ 'e.g.' | translate }} 1.0.0\"\n required\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <div class=\"legend form-block m-t-40\" translate>Patch file</div>\n <c8y-file-picker [maxAllowedFiles]=\"1\" (onFilesPicked)=\"onFile($event)\" [fileUrlPopover]=\"textForFirmwareUrlPopover\">\n </c8y-file-picker>\n </c8y-form-group>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button\n title=\"{{ 'Cancel' | translate }}\"\n class=\"btn btn-default\"\n type=\"button\"\n (click)=\"cancel()\"\n [disabled]=\"saving\"\n translate\n >\n Cancel\n </button>\n <button\n title=\"{{ 'Add firmware patch' | translate }}\"\n class=\"btn btn-primary\"\n type=\"submit\"\n [ngClass]=\"{ 'btn-pending': saving }\"\n [disabled]=\"\n !firmwarePatchForm.form.valid ||\n firmwarePatchForm.form.pristine ||\n (!model.binary?.url && !model.binary?.file) ||\n saving\n \"\n translate\n >\n Add firmware patch\n </button>\n </div>\n </form>\n</div>\n"
1775
1777
  })
1776
1778
  ], AddFirmwarePatchModalComponent);
1777
1779
  return AddFirmwarePatchModalComponent;
@@ -2093,6 +2095,7 @@
2093
2095
  };
2094
2096
  this.saving = false;
2095
2097
  this.softwarePreselected = false;
2098
+ this.textForSoftwareUrlPopover = ngxComponents.gettext("Path for binaries can vary depending on device agent implementation, e.g.:\n /software/binaries/software1.bin\n https://software/binary/123\n ftp://software/binary/123.tar.gz\n ");
2096
2099
  }
2097
2100
  AddSoftwareModalComponent.prototype.ngOnInit = function () {
2098
2101
  this.setInitialState();
@@ -2198,7 +2201,7 @@
2198
2201
  AddSoftwareModalComponent = __decorate([
2199
2202
  core.Component({
2200
2203
  selector: 'c8y-add-software-software-modal',
2201
- template: "<div class=\"viewport-modal\">\n <div class=\"modal-header dialog-header\">\n <i [c8yIcon]=\"'c8y-tools'\"></i>\n <h4 translate>\n Add software\n </h4>\n </div>\n <div class=\"p-16 text-center separator-bottom\" *ngIf=\"!softwarePreselected\">\n <p class=\"lead m-0\" translate>\n Select or create new software\n </p>\n </div>\n <form\n class=\"d-contents\"\n autocomplete=\"off\"\n #softwareForm=\"ngForm\"\n (ngSubmit)=\"softwareForm.form.valid && save()\"\n >\n <div class=\"modal-inner-scroll\">\n <div class=\"modal-body\">\n <div [hidden]=\"softwarePreselected\">\n <c8y-form-group>\n <label for=\"softwareName\" translate>Software</label>\n <c8y-typeahead\n [(ngModel)]=\"model.selected\"\n name=\"softwareName\"\n placeholder=\"{{ 'Select or enter' | translate }}\"\n (onSearch)=\"onInput.next($event)\"\n [required]=\"true\"\n >\n <c8y-li\n *c8yFor=\"\n let software of softwaresResult;\n loadMore: 'auto';\n notFound: notFoundTemplate\n \"\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n (click)=\"onSoftwareSelect(software)\"\n [active]=\"model.selected === software\"\n >\n <c8y-highlight\n [text]=\"software.name || '--'\"\n [pattern]=\"onInput | async\"\n ></c8y-highlight>\n </c8y-li>\n <ng-template #notFoundTemplate>\n <c8y-li class=\"bg-gray-lighter p-8\" *ngIf=\"(onInput | async)?.length > 0\">\n <span translate>No match found, add new`software`? </span>\n <button\n title=\"{{ 'Create new`software`' | translate }}\"\n type=\"button\"\n class=\"btn btn-primary btn-xs m-l-16\"\n translate\n >\n Create new`software`\n </button>\n </c8y-li>\n </ng-template>\n </c8y-typeahead>\n </c8y-form-group>\n\n <c8y-form-group>\n <label for=\"softwareDescription\" translate>Description</label>\n <input\n id=\"softwareDescription\"\n class=\"form-control\"\n autocomplete=\"off\"\n name=\"description\"\n [(ngModel)]=\"model.description\"\n placeholder=\"{{ 'e.g. Cloud connectivity software' | translate }}\"\n [disabled]=\"model.selected?.id\"\n [required]=\"true\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label for=\"softwareDeviceTypeFilter\" translate>Device type filter</label>\n <input\n id=\"softwareDeviceTypeFilter\"\n class=\"form-control\"\n name=\"softwareDeviceTypeFilter\"\n popover=\"{{\n 'If the filter is set, the firmware will show up for installation only for devices of that type. If no filter is set, it will be available for all devices.'\n | translate\n }}\"\n [(ngModel)]=\"model.deviceType\"\n placeholder=\"{{ 'e.g.' | translate }} c8y_Linux\"\n [disabled]=\"model.selected?.id\"\n />\n </c8y-form-group>\n </div>\n\n <c8y-form-group>\n <label for=\"softwareVersion\" translate>Version</label>\n <input\n id=\"softwareVersion\"\n class=\"form-control\"\n autocomplete=\"off\"\n name=\"version\"\n [(ngModel)]=\"model.version\"\n placeholder=\"{{ 'e.g.' | translate }} 1.0.0\"\n [required]=\"true\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <div class=\"legend form-block m-t-40\" translate>Software file</div>\n <c8y-file-picker [maxAllowedFiles]=\"1\" (onFilesPicked)=\"onFile($event)\">\n </c8y-file-picker>\n </c8y-form-group>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button\n title=\"{{ 'Cancel' | translate }}\"\n class=\"btn btn-default\"\n type=\"button\"\n (click)=\"cancel()\"\n [disabled]=\"saving\"\n translate\n >\n Cancel\n </button>\n\n <button\n title=\"{{ 'Add software' | translate }}\"\n class=\"btn btn-primary\"\n type=\"submit\"\n [ngClass]=\"{ 'btn-pending': saving }\"\n [disabled]=\"\n !softwareForm.form.valid ||\n softwareForm.form.pristine ||\n saving ||\n (!model.binary?.url && !model.binary?.file)\n \"\n translate\n >\n Add software\n </button>\n </div>\n </form>\n</div>\n"
2204
+ template: "<div class=\"viewport-modal\">\n <div class=\"modal-header dialog-header\">\n <i [c8yIcon]=\"'c8y-tools'\"></i>\n <h4 translate>\n Add software\n </h4>\n </div>\n <div class=\"p-16 text-center separator-bottom\" *ngIf=\"!softwarePreselected\">\n <p class=\"lead m-0\" translate>\n Select or create new software\n </p>\n </div>\n <form\n class=\"d-contents\"\n autocomplete=\"off\"\n #softwareForm=\"ngForm\"\n (ngSubmit)=\"softwareForm.form.valid && save()\"\n >\n <div class=\"modal-inner-scroll\">\n <div class=\"modal-body\">\n <div [hidden]=\"softwarePreselected\">\n <c8y-form-group>\n <label for=\"softwareName\" translate>Software</label>\n <c8y-typeahead\n [(ngModel)]=\"model.selected\"\n name=\"softwareName\"\n placeholder=\"{{ 'Select or enter' | translate }}\"\n (onSearch)=\"onInput.next($event)\"\n [required]=\"true\"\n >\n <c8y-li\n *c8yFor=\"\n let software of softwaresResult;\n loadMore: 'auto';\n notFound: notFoundTemplate\n \"\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n (click)=\"onSoftwareSelect(software)\"\n [active]=\"model.selected === software\"\n >\n <c8y-highlight\n [text]=\"software.name || '--'\"\n [pattern]=\"onInput | async\"\n ></c8y-highlight>\n </c8y-li>\n <ng-template #notFoundTemplate>\n <c8y-li class=\"bg-gray-lighter p-8\" *ngIf=\"(onInput | async)?.length > 0\">\n <span translate>No match found, add new`software`? </span>\n <button\n title=\"{{ 'Create new`software`' | translate }}\"\n type=\"button\"\n class=\"btn btn-primary btn-xs m-l-16\"\n translate\n >\n Create new`software`\n </button>\n </c8y-li>\n </ng-template>\n </c8y-typeahead>\n </c8y-form-group>\n\n <c8y-form-group>\n <label for=\"softwareDescription\" translate>Description</label>\n <input\n id=\"softwareDescription\"\n class=\"form-control\"\n autocomplete=\"off\"\n name=\"description\"\n [(ngModel)]=\"model.description\"\n placeholder=\"{{ 'e.g. Cloud connectivity software' | translate }}\"\n [disabled]=\"model.selected?.id\"\n [required]=\"true\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label for=\"softwareDeviceTypeFilter\" translate>Device type filter</label>\n <input\n id=\"softwareDeviceTypeFilter\"\n class=\"form-control\"\n name=\"softwareDeviceTypeFilter\"\n popover=\"{{\n 'If the filter is set, the firmware will show up for installation only for devices of that type. If no filter is set, it will be available for all devices.'\n | translate\n }}\"\n [(ngModel)]=\"model.deviceType\"\n placeholder=\"{{ 'e.g.' | translate }} c8y_Linux\"\n [disabled]=\"model.selected?.id\"\n />\n </c8y-form-group>\n </div>\n\n <c8y-form-group>\n <label for=\"softwareVersion\" translate>Version</label>\n <input\n id=\"softwareVersion\"\n class=\"form-control\"\n autocomplete=\"off\"\n name=\"version\"\n [(ngModel)]=\"model.version\"\n placeholder=\"{{ 'e.g.' | translate }} 1.0.0\"\n [required]=\"true\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <div class=\"legend form-block m-t-40\" translate>Software file</div>\n <c8y-file-picker [maxAllowedFiles]=\"1\" (onFilesPicked)=\"onFile($event)\" [fileUrlPopover]=\"textForSoftwareUrlPopover\">\n </c8y-file-picker>\n </c8y-form-group>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button\n title=\"{{ 'Cancel' | translate }}\"\n class=\"btn btn-default\"\n type=\"button\"\n (click)=\"cancel()\"\n [disabled]=\"saving\"\n translate\n >\n Cancel\n </button>\n\n <button\n title=\"{{ 'Add software' | translate }}\"\n class=\"btn btn-primary\"\n type=\"submit\"\n [ngClass]=\"{ 'btn-pending': saving }\"\n [disabled]=\"\n !softwareForm.form.valid ||\n softwareForm.form.pristine ||\n saving ||\n (!model.binary?.url && !model.binary?.file)\n \"\n translate\n >\n Add software\n </button>\n </div>\n </form>\n</div>\n"
2202
2205
  })
2203
2206
  ], AddSoftwareModalComponent);
2204
2207
  return AddSoftwareModalComponent;
@@ -2430,6 +2433,7 @@
2430
2433
  this.mo = {};
2431
2434
  this.saving = false;
2432
2435
  this.uploadChoice = 'uploadBinary';
2436
+ this.textForConfigurationUrlPopover = ngxComponents.gettext("Path for binaries can vary depending on device agent implementation, e.g.:\n /configuration/binaries/configuration1.bin\n https://configuration/binary/123\n ftp://configuration/binary/123.tar.gz\n ");
2433
2437
  this.result = new Promise(function (resolve, reject) {
2434
2438
  _this._save = resolve;
2435
2439
  _this._cancel = reject;
@@ -2535,7 +2539,7 @@
2535
2539
  ConfigurationDetailComponent = __decorate([
2536
2540
  core.Component({
2537
2541
  selector: 'c8y-configuration-detail',
2538
- template: "<div class=\"viewport-modal\">\n <div class=\"modal-header dialog-header\">\n <i [c8yIcon]=\"'cogs'\"></i>\n <h4 translate *ngIf=\"mo.id\">Update configuration</h4>\n <h4 translate *ngIf=\"!mo.id\">Add configuration</h4>\n </div>\n\n <form class=\"d-contents\" #configurationForm=\"ngForm\" (ngSubmit)=\"configurationForm.form.valid && save()\">\n <div class=\"modal-inner-scroll\">\n <div class=\"modal-body\">\n <c8y-form-group>\n <label translate>Name</label>\n <input\n type=\"text\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} hosts\"\n autocomplete=\"off\"\n required\n maxlength=\"254\"\n [(ngModel)]=\"version\"\n name=\"version\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate>Device type</label>\n <input\n type=\"text\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} c8y_Linux\"\n maxlength=\"254\"\n autocomplete=\"off\"\n [(ngModel)]=\"deviceType\"\n name=\"deviceType\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate>Description</label>\n <input\n type=\"text\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g. Host configuration' | translate }} c8y_Linux\"\n maxlength=\"254\"\n autocomplete=\"off\"\n [(ngModel)]=\"description\"\n name=\"description\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate>Configuration type</label>\n <c8y-typeahead\n [(ngModel)]=\"selected\"\n name=\"confType\"\n placeholder=\"{{ 'e.g.' | translate }} ssh\"\n (onSearch)=\"setPipe($event)\"\n displayProperty=\"configurationType\"\n >\n <c8y-li\n *c8yFor=\"let config of configs; pipe: filterPipe; notFound: notFoundTemplate\"\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n (click)=\"selected = config; setPipe('')\"\n [active]=\"selected === config\"\n >\n <c8y-highlight\n [text]=\"config.configurationType || '--'\"\n [pattern]=\"pattern\"\n ></c8y-highlight>\n </c8y-li>\n <ng-template #notFoundTemplate>\n <c8y-li class=\"bg-gray-lighter p-8\" *ngIf=\"pattern.length > 0\">\n <span translate>No match found, add new`configuration`?</span>\n <button title=\"Create new`configuration`\" type=\"button\" class=\"btn btn-primary btn-xs m-l-16\" translate>\n Create new`configuration`\n </button>\n </c8y-li>\n </ng-template>\n </c8y-typeahead>\n </c8y-form-group>\n\n <c8y-form-group>\n <div class=\"legend form-block m-t-40\" translate>Configuration file</div>\n <c8y-file-picker\n [maxAllowedFiles]=\"1\"\n (onFilesPicked)=\"onFile($event)\"\n [uploadChoice]=\"uploadChoice\"\n [fileUrl]=\"binary.url\"\n [fileBinary]=\"binary.file\"\n >\n </c8y-file-picker>\n </c8y-form-group>\n </div>\n </div>\n\n <div class=\"modal-footer\">\n <button\n (click)=\"cancel()\"\n type=\"button\"\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n [disabled]=\"saving\"\n >\n <span translate>Cancel</span>\n </button>\n <button\n class=\"btn btn-primary\"\n type=\"submit\"\n title=\"{{ submitButtonTitle | translate }}\"\n [ngClass]=\"{ 'btn-pending': saving }\"\n [disabled]=\"\n !configurationForm.valid ||\n configurationForm.pristine ||\n (!binary?.url && !binary?.file) ||\n saving\n \"\n >\n {{ submitButtonTitle | translate }}\n </button>\n </div>\n </form>\n</div>\n"
2542
+ template: "<div class=\"viewport-modal\">\n <div class=\"modal-header dialog-header\">\n <i [c8yIcon]=\"'cogs'\"></i>\n <h4 translate *ngIf=\"mo.id\">Update configuration</h4>\n <h4 translate *ngIf=\"!mo.id\">Add configuration</h4>\n </div>\n\n <form class=\"d-contents\" #configurationForm=\"ngForm\" (ngSubmit)=\"configurationForm.form.valid && save()\">\n <div class=\"modal-inner-scroll\">\n <div class=\"modal-body\">\n <c8y-form-group>\n <label translate>Name</label>\n <input\n type=\"text\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} hosts\"\n autocomplete=\"off\"\n required\n maxlength=\"254\"\n [(ngModel)]=\"version\"\n name=\"version\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate>Device type</label>\n <input\n type=\"text\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} c8y_Linux\"\n maxlength=\"254\"\n autocomplete=\"off\"\n [(ngModel)]=\"deviceType\"\n name=\"deviceType\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate>Description</label>\n <input\n type=\"text\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g. Host configuration' | translate }} c8y_Linux\"\n maxlength=\"254\"\n autocomplete=\"off\"\n [(ngModel)]=\"description\"\n name=\"description\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate>Configuration type</label>\n <c8y-typeahead\n [(ngModel)]=\"selected\"\n name=\"confType\"\n placeholder=\"{{ 'e.g.' | translate }} ssh\"\n (onSearch)=\"setPipe($event)\"\n displayProperty=\"configurationType\"\n >\n <c8y-li\n *c8yFor=\"let config of configs; pipe: filterPipe; notFound: notFoundTemplate\"\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n (click)=\"selected = config; setPipe('')\"\n [active]=\"selected === config\"\n >\n <c8y-highlight\n [text]=\"config.configurationType || '--'\"\n [pattern]=\"pattern\"\n ></c8y-highlight>\n </c8y-li>\n <ng-template #notFoundTemplate>\n <c8y-li class=\"bg-gray-lighter p-8\" *ngIf=\"pattern.length > 0\">\n <span translate>No match found, add new`configuration`?</span>\n <button title=\"Create new`configuration`\" type=\"button\" class=\"btn btn-primary btn-xs m-l-16\" translate>\n Create new`configuration`\n </button>\n </c8y-li>\n </ng-template>\n </c8y-typeahead>\n </c8y-form-group>\n\n <c8y-form-group>\n <div class=\"legend form-block m-t-40\" translate>Configuration file</div>\n <c8y-file-picker\n [maxAllowedFiles]=\"1\"\n (onFilesPicked)=\"onFile($event)\"\n [uploadChoice]=\"uploadChoice\"\n [fileUrl]=\"binary.url\"\n [fileBinary]=\"binary.file\"\n [fileUrlPopover]=\"textForConfigurationUrlPopover\"\n >\n </c8y-file-picker>\n </c8y-form-group>\n </div>\n </div>\n\n <div class=\"modal-footer\">\n <button\n (click)=\"cancel()\"\n type=\"button\"\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n [disabled]=\"saving\"\n >\n <span translate>Cancel</span>\n </button>\n <button\n class=\"btn btn-primary\"\n type=\"submit\"\n title=\"{{ submitButtonTitle | translate }}\"\n [ngClass]=\"{ 'btn-pending': saving }\"\n [disabled]=\"\n !configurationForm.valid ||\n configurationForm.pristine ||\n (!binary?.url && !binary?.file) ||\n saving\n \"\n >\n {{ submitButtonTitle | translate }}\n </button>\n </div>\n </form>\n</div>\n"
2539
2543
  })
2540
2544
  ], ConfigurationDetailComponent);
2541
2545
  return ConfigurationDetailComponent;