@c8y/ngx-components 1006.6.36 → 1006.6.40

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 (105) hide show
  1. package/bundles/c8y-ngx-components-connectivity.umd.js +1 -1
  2. package/bundles/c8y-ngx-components-connectivity.umd.js.map +1 -1
  3. package/bundles/c8y-ngx-components-connectivity.umd.min.js +1 -1
  4. package/bundles/c8y-ngx-components-connectivity.umd.min.js.map +1 -1
  5. package/bundles/c8y-ngx-components-context-dashboard.umd.js +1 -1
  6. package/bundles/c8y-ngx-components-context-dashboard.umd.js.map +1 -1
  7. package/bundles/c8y-ngx-components-context-dashboard.umd.min.js +1 -1
  8. package/bundles/c8y-ngx-components-context-dashboard.umd.min.js.map +1 -1
  9. package/bundles/c8y-ngx-components-repository.umd.js +1 -1
  10. package/bundles/c8y-ngx-components-repository.umd.js.map +1 -1
  11. package/bundles/c8y-ngx-components-repository.umd.min.js +1 -1
  12. package/bundles/c8y-ngx-components-repository.umd.min.js.map +1 -1
  13. package/bundles/c8y-ngx-components-sensor-phone.umd.js +1 -1
  14. package/bundles/c8y-ngx-components-sensor-phone.umd.js.map +1 -1
  15. package/bundles/c8y-ngx-components-sensor-phone.umd.min.js +1 -1
  16. package/bundles/c8y-ngx-components-sensor-phone.umd.min.js.map +1 -1
  17. package/bundles/c8y-ngx-components.umd.js +400 -131
  18. package/bundles/c8y-ngx-components.umd.js.map +1 -1
  19. package/bundles/c8y-ngx-components.umd.min.js +2 -2
  20. package/bundles/c8y-ngx-components.umd.min.js.map +1 -1
  21. package/c8y-ngx-components.d.ts +90 -87
  22. package/c8y-ngx-components.metadata.json +1 -1
  23. package/connectivity/c8y-ngx-components-connectivity.metadata.json +1 -1
  24. package/context-dashboard/c8y-ngx-components-context-dashboard.metadata.json +1 -1
  25. package/core/authentication/new-password.component.d.ts +8 -6
  26. package/core/docs/guide-docs.component.d.ts +25 -3
  27. package/core/forms/validation-pattern.d.ts +1 -0
  28. package/core/i18n/force-html-translate.directive.d.ts +32 -0
  29. package/core/login/change-password.component.d.ts +1 -1
  30. package/core/login/login.service.d.ts +15 -2
  31. package/core/login/password-strength-validator.directive.d.ts +9 -0
  32. package/core/login/strength-validator-service.d.ts +7 -0
  33. package/core/user/user-edit.component.d.ts +4 -2
  34. package/esm2015/c8y-ngx-components.js +90 -87
  35. package/esm2015/connectivity/impact/impact-provider-settings.component.js +2 -2
  36. package/esm2015/context-dashboard/legacy-welcome/legacy-welcome.component.js +2 -2
  37. package/esm2015/core/authentication/new-password.component.js +15 -20
  38. package/esm2015/core/dashboard/widgets-dashboard.component.js +2 -2
  39. package/esm2015/core/docs/guide-docs.component.js +69 -4
  40. package/esm2015/core/forms/validation-pattern.js +2 -1
  41. package/esm2015/core/i18n/force-html-translate.directive.js +99 -0
  42. package/esm2015/core/i18n/i18n.module.js +5 -3
  43. package/esm2015/core/i18n/pattern-messages.data.js +2 -2
  44. package/esm2015/core/login/change-password.component.js +5 -5
  45. package/esm2015/core/login/credentials.component.js +2 -2
  46. package/esm2015/core/login/login.module.js +4 -2
  47. package/esm2015/core/login/login.service.js +40 -6
  48. package/esm2015/core/login/password-strength-validator.directive.js +32 -0
  49. package/esm2015/core/login/strength-validator-service.js +28 -0
  50. package/esm2015/core/user/user-edit.component.js +10 -5
  51. package/esm2015/repository/configuration/configuration-list.component.js +2 -2
  52. package/esm2015/sensor-phone/sensor-phone-modal.component.js +2 -2
  53. package/esm5/c8y-ngx-components.js +90 -87
  54. package/esm5/connectivity/impact/impact-provider-settings.component.js +2 -2
  55. package/esm5/context-dashboard/legacy-welcome/legacy-welcome.component.js +2 -2
  56. package/esm5/core/authentication/new-password.component.js +21 -25
  57. package/esm5/core/dashboard/widgets-dashboard.component.js +2 -2
  58. package/esm5/core/docs/guide-docs.component.js +72 -4
  59. package/esm5/core/forms/validation-pattern.js +2 -1
  60. package/esm5/core/i18n/force-html-translate.directive.js +105 -0
  61. package/esm5/core/i18n/i18n.module.js +5 -3
  62. package/esm5/core/i18n/pattern-messages.data.js +2 -2
  63. package/esm5/core/login/change-password.component.js +5 -5
  64. package/esm5/core/login/credentials.component.js +2 -2
  65. package/esm5/core/login/login.module.js +4 -2
  66. package/esm5/core/login/login.service.js +43 -6
  67. package/esm5/core/login/password-strength-validator.directive.js +38 -0
  68. package/esm5/core/login/strength-validator-service.js +29 -0
  69. package/esm5/core/user/user-edit.component.js +19 -9
  70. package/esm5/repository/configuration/configuration-list.component.js +2 -2
  71. package/esm5/sensor-phone/sensor-phone-modal.component.js +2 -2
  72. package/fesm2015/c8y-ngx-components-connectivity.js +1 -1
  73. package/fesm2015/c8y-ngx-components-connectivity.js.map +1 -1
  74. package/fesm2015/c8y-ngx-components-context-dashboard.js +1 -1
  75. package/fesm2015/c8y-ngx-components-context-dashboard.js.map +1 -1
  76. package/fesm2015/c8y-ngx-components-repository.js +1 -1
  77. package/fesm2015/c8y-ngx-components-repository.js.map +1 -1
  78. package/fesm2015/c8y-ngx-components-sensor-phone.js +1 -1
  79. package/fesm2015/c8y-ngx-components-sensor-phone.js.map +1 -1
  80. package/fesm2015/c8y-ngx-components.js +281 -40
  81. package/fesm2015/c8y-ngx-components.js.map +1 -1
  82. package/fesm5/c8y-ngx-components-connectivity.js +1 -1
  83. package/fesm5/c8y-ngx-components-connectivity.js.map +1 -1
  84. package/fesm5/c8y-ngx-components-context-dashboard.js +1 -1
  85. package/fesm5/c8y-ngx-components-context-dashboard.js.map +1 -1
  86. package/fesm5/c8y-ngx-components-repository.js +1 -1
  87. package/fesm5/c8y-ngx-components-repository.js.map +1 -1
  88. package/fesm5/c8y-ngx-components-sensor-phone.js +1 -1
  89. package/fesm5/c8y-ngx-components-sensor-phone.js.map +1 -1
  90. package/fesm5/c8y-ngx-components.js +315 -49
  91. package/fesm5/c8y-ngx-components.js.map +1 -1
  92. package/locales/de.po +71 -60
  93. package/locales/es.po +120 -85
  94. package/locales/fr.po +107 -72
  95. package/locales/ja_JP.po +89 -78
  96. package/locales/ko.po +92 -57
  97. package/locales/locales.pot +9 -9
  98. package/locales/nl.po +95 -60
  99. package/locales/pl.po +88 -53
  100. package/locales/pt_BR.po +174 -138
  101. package/locales/ru.po +120 -85
  102. package/locales/zh_CN.po +87 -52
  103. package/package.json +2 -2
  104. package/repository/c8y-ngx-components-repository.metadata.json +1 -1
  105. 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/context-dashboard/context-dashboard.model.ts","ng://@c8y/ngx-components/context-dashboard/context-dashboard.service.ts","ng://@c8y/ngx-components/context-dashboard/device-dashboard.guard.ts","ng://@c8y/ngx-components/context-dashboard/dashboard-detail.component.ts","ng://@c8y/ngx-components/context-dashboard/widget.service.ts","ng://@c8y/ngx-components/context-dashboard/widget-config.component.ts","ng://@c8y/ngx-components/context-dashboard/context-dashboard.component.ts","ng://@c8y/ngx-components/context-dashboard/group-dashboard.guard.ts","ng://@c8y/ngx-components/context-dashboard/dashboard-actions.factory.ts","ng://@c8y/ngx-components/context-dashboard/appearance-settings.component.ts","ng://@c8y/ngx-components/context-dashboard/widget-preview.component.ts","ng://@c8y/ngx-components/context-dashboard/context-dashboard.module.ts","ng://@c8y/ngx-components/context-dashboard/cockpit-dashboard.component.ts","ng://@c8y/ngx-components/context-dashboard/welcome/welcome.component.ts","ng://@c8y/ngx-components/context-dashboard/legacy-welcome/legacy-welcome.component.ts","ng://@c8y/ngx-components/context-dashboard/cockpit-dashboard.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","__param","paramIndex","decorator","__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","ContextDashboardType","CONTEXT_DASHBOARD_CONFIG","InjectionToken","WIDGET_HEADER_CLASSES","gettext","class","description","WIDGET_CONTENT_CLASSES","DASHBOARD_THEME_CLASSES","ContextDashboardService","inventory","tabs","modal","translateService","router","user","appState","permissions","cache","Map","DEFAULT_PAGESIZE","FRAGMENT_NAME","DASHBOARD_ROUTE_PATH","INDEX_SPLIT","_formDisabled","create","dashboardCfg","contextOrName","id","dashboardType","Named","contextData","getDashboardTypeFromViewContext","dashboard","c8y_Dashboard","DeviceType","deviceTypeValue","fragmentKey","createFragmentKey","shouldSetGlobal","c8y_Global","Group","Device","childAdditionsCreate","_a","_b","data","detail","dashboardMO","set","update","cleanedDashboard","clean","pick","delete","msg","isDeviceType","confirm","instant","dashboardName","name","deviceType","Status","DANGER","ok","cancel","tabToRemove","Array","from","state","find","tab","path","endsWith","_this","remove","refresh","activateDashboards","route","types","dashboardId","params","getDashboard$","parent","pipe","tap","map","catchError","of","getTabs$","getNamedDashboardOrCreate","defaultWidgets","children","mapWidgets","throwIfEmpty","refreshTabs","isNamed","tabToUpdate","icon","priority","name_1","navigateToDashboard","test","url","navigate","relativeTo","getActivatedRoute","canEditDashboard","mo","canEdit","some","keys","prop","RegExp","getStyling","styleList","styleName","defaultValue","styling","style","widgets","keyBy","widget","String","Math","random","substr","dashboardIdOrName","get","dashboards","getContextDashboards","getNamedDashboard","cacheRefresh","getContextDashboards$","cacheDashboard","filter","has","setBaseContextRoute","removeDashboardMoProperty","createDashboardTab","toArray","requests","mergeAll","mergeMap","response","type","includes","currentContextRoute","dashboardCopy","cloneDeep","updateDashboard","forEach","child","componentTransformConfigWithContext","config","dashboardMo","_dashboard","jsonString","JSON","stringify","parse","list","fragmentType","pageSize","context","ViewContext","contextDashboardType","join","InventoryService","TabsService","ModalService","TranslateService","Router","UserService","AppStateService","Permissions","Injectable","DeviceDashboardGuard","contextDashboardService","canActivate","DashboardDetailComponent","iconList","themeClass","headerClass","possibleStyling","_save","_cancel","DEFAULT_DASHBOARD_MARGIN","DEFAULT_DASHBOARD_ICON","DEFAULT_DASHBOARD_PRIORITY","DEFAULT_DASHBOARD_NAME","icons","filteredIcons","ngAfterContentInit","defaultDashboardCfg","current","clone","setDashboardStyle","dashboardDetailForm","form","markAsDirty","save","classes","widgetClasses","close","hide","getDashboardPreviewStyle","cssClasses","selectIcon","updateFiltered","term","search_1","val","allClasses","split","BsModalRef","Inject","args","ICON_LIST","tslib_1.__decorate","ViewChild","static","Component","selector","template","tslib_1.__param","WidgetService","dynamicComponentService","moduleConfig","getWidgetDefinition","componentId","getById$","toPromise","getWidgetDefinitions","translatedComponents","cmp","sortBy","widgetFilter","DynamicComponentService","providedIn","WidgetConfigComponent","widgetService","mode","searchChange$","Subject","searchTerm","contentClass","defaultStyling","isUpgrade","components","selected","select","isEdit","searchSub","switchMap","event","iif","which","timer","subscribe","search","setDefaultStyle","_x","_y","_width","_height","widgetConfig","device","tslib_1.__assign","omit","title","getStyle","settings","widgetDefaults","formDisabled","composeWidgetConfig","componentLabel","searchResult","escapeRegExp","trim","resetSearch","undefined","changeMode","isPreview","isDashboardDefaultStyle","ngOnDestroy","unsubscribe","className","styles","cssClass","setClasses","selectedComponent","setting","applyTargetIfDeviceDashboard","hideTarget","ng1","options","noDeviceTarget","ContextDashboardComponent","alert","renderer","bsModal","childrenClasses","setTitle","disabled","canDelete","isLoading","ngOnInit","loadNamedDashboard","loadContextDashboard","applyDeviceTarget","dataSub","restore","onLoad","updateDashboardChildren","mappedChildren","componentToWidget","deleteDashboard","snapshot","segment","navigateByUrl","editDashboard","initialState","isNamedDashboard","show","ignoreBackdropClick","content","editWidget","change","source","x","width","height","component","addWidget","newWidget","mergeWidgetClasses","updateWidget","index","findIndex","isNew","mapLegacy","mappedWidget","splice","deleteWidget","removed","indexOf","setTimeout","DashboardChildChange","collapseUpAll","addDashboardClassToBody","addClass","document","removeDashboardClassFromBody","removeClass","toggleFreeze","toggleIsFrozenFlag","isFrozen","success","addServerFailure","ex_3","dashboardChildren","dashboardClasses","c8y-grid-dashboard","all","values","el","card","card-dashboard","widgetComponent","configComponent","templateUrl","configTemplateUrl","transformConfigWithContext","ActivatedRoute","AlertService","Renderer2","BsModalService","Input","HostBinding","host","GroupDashboardGuard","DashboardActionsFactory","activatedRoute","isEnabled","action","addDashboard","hasAnyRole","AppearanceSettingsComponent","themeClassChange","EventEmitter","headerClassChange","possibleStylingTheme","possibleStylingHeader","themeClassClick","resetToDefault","defaultThemeClass","emit","headerClassClick","defaultHeaderClass","compareTo","Output","viewProviders","provide","ControlContainer","useExisting","NgForm","WidgetPreviewComponent","previewClasses","dashboard-theme-light","panel-title-regular","defaultConfig","allowFullscreen","noNewWidgets","routes","ContextDashboardModule","ngModule","ContextDashboardModule_1","providers","useValue","HOOK_ONCE_ROUTE","multi","HOOK_ACTION","useClass","NgModule","declarations","imports","CoreModule","TooltipModule","PopoverModule","BsDropdownModule","forRoot","exports","entryComponents","CockpitDashboardComponent","DEFAULT_HOME_WIDGETS","panel-title-hidden","WelcomeToCockpit","tenantService","docs","navigator","applicationService","quickLinks","REPORT_NODE","CONFIGURATION_NODE","TRIAL","currentTenantType","tenantType","setMessage","navSubscription","items$","nodes","navNodes","docsSubscription","links","createConnectSmartphoneQuickLink","createQuicklinkRegisterDevice","createQuicklinkUserGuide","createQuicklinkAddGroup","createQuickLinkReports","createQuicklinkDataPointLibrary","createQuicklinkSmartRules","closed","welcomeMessage","addGroup","link","connectSmartphone","reports","reportsNode","findNavigatorNode","click","open","dataPointLib","configurationNode","smartRules","listByUser","deviceManagement","app","contextPath","deviceMgmtUrl_1","getHref","registerDevice","window","userGuide","userGuideURL","getUserGuideLink","nodeRealName","node","realName","TenantService","DocsService","NavigatorService","ApplicationService","LegacyWelcomeComponent","Host","previewImage","require","ex","ɵ1","groupsSelectable","ɵ2","CockpitDashboardModule","DocsModule","QuickLinkModule","TranslateModule","HOOK_NAVIGATOR_NODES","ɵ0","HOOK_COMPONENTS"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\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 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) : new P(function (resolve) { resolve(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 __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n 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}\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","import { InjectionToken } from '@angular/core';\nimport { IManagedObject } from '@c8y/client';\nimport { Widget, DynamicComponentDefinition, Route, gettext } from '@c8y/ngx-components';\n\nexport const CONTEXT_DASHBOARD_CONFIG = new InjectionToken<any>('ContextDashboardConfig');\n\nexport interface ContextDashboardConfig {\n widgetFilter?: (component: DynamicComponentDefinition) => boolean;\n allowFullscreen?: boolean;\n routes?: Route[];\n}\n\nexport interface ContextWidgetConfig {\n /**\n * Settings that define how the default config component is\n * displayed.\n */\n settings?: {\n /**\n * Avoids to show the widget in the \"add widget\" modal\n */\n noNewWidgets?: boolean;\n ng1?: {\n options: {\n /**\n * Set this to false, to hide the device/group selector\n * @deprecated: This is currently only implemented in angularjs and will be exported to a separate component.\n */\n noDeviceTarget?: boolean;\n /**\n * Set this to false to only select devices\n * @deprecated: This is currently only implemented in angularjs and will be exported to a separate component.\n */\n groupsSelectable?: boolean;\n };\n /**\n * The context from the device selector.\n */\n context?: {\n id?: string;\n name?: string;\n };\n };\n /**\n * Any other information you want to pass to the config template\n */\n [key: string]: any;\n };\n /**\n * The selected device or group (note: naming is inconsistent as group was added later\n * but must stay for already implemented widgets)\n */\n device?: {\n id?: string;\n name?: string;\n };\n /**\n * Any other information that should be stored here.\n */\n [key: string]: any;\n}\n\nexport interface ContextDashboardManagedObject extends IManagedObject {\n c8y_Dashboard?: ContextDashboard;\n}\n\nexport interface ContextDashboard {\n icon?: string;\n name?: string;\n priority?: number;\n deviceType?: boolean;\n deviceTypeValue?: string;\n isFrozen?: boolean;\n classes?: { [key: string]: boolean };\n widgetClasses?: { [key: string]: boolean };\n widgetMargin?: number;\n translateWidgetTitle?: boolean;\n global?: boolean;\n children?: {\n [id: string]: Widget;\n };\n}\n\nexport enum ContextDashboardType {\n Device = 'device',\n DeviceType = 'type',\n Group = 'group',\n Named = 'name'\n}\n\nexport const WIDGET_HEADER_CLASSES = [\n {\n label: gettext('Regular`style`'),\n class: 'panel-title-regular',\n description: gettext('The widget has no border between header and content.')\n },\n {\n label: gettext('Border`style`'),\n class: 'panel-title-border',\n description: gettext('The widget has a small separation border between header and content.')\n },\n {\n label: gettext('Overlay`style`'),\n class: 'panel-title-overlay',\n description: gettext('The widget content overlays the header.')\n },\n {\n label: gettext('Hidden`style`'),\n class: 'panel-title-hidden',\n description: gettext('The widget header is not shown.')\n }\n];\n\nexport const WIDGET_CONTENT_CLASSES = [\n {\n label: gettext('Light`style`'),\n class: 'panel-content-light',\n description: gettext('The widget is styled with a light background and has low contrast.')\n },\n {\n label: gettext('Dark`style`'),\n class: 'panel-content-dark',\n description: gettext('The widget is styled with a dark background and has high contrast.')\n },\n {\n label: gettext('Transparent`style`'),\n class: 'panel-content-transparent',\n description: gettext(\n 'The widget is styled with a transparent background and therefore is border-less.'\n )\n },\n {\n label: gettext('Branded`style`'),\n class: 'panel-content-branded',\n description: gettext('The widget is styled with the main brand color.')\n }\n];\n\nexport const DASHBOARD_THEME_CLASSES = [\n {\n label: gettext('Light`theme`'),\n class: 'dashboard-theme-light',\n description: gettext('The dashboard is styled with a light background and has low contrast.')\n },\n {\n label: gettext('Dark`theme`'),\n class: 'dashboard-theme-dark',\n description: gettext('The dashboard is styled with a dark background and has high contrast.')\n },\n {\n label: gettext('Transparent`theme`'),\n class: 'dashboard-theme-transparent',\n description: gettext(\n 'The dashboard is styled with a transparent background and therefore is border-less.'\n )\n },\n {\n label: gettext('Branded`theme`'),\n class: 'dashboard-theme-branded',\n description: gettext('The dashboard is styled with the main brand color.')\n }\n];\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, Router } from '@angular/router';\nimport { IManagedObject, InventoryService, IResultList, UserService } from '@c8y/client';\nimport {\n AppStateService,\n getActivatedRoute,\n gettext,\n ModalService,\n Status,\n TabsService,\n ViewContext,\n Widget,\n Permissions\n} from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { assign, pick, some, keys, keyBy, has, get, forEach, cloneDeep } from 'lodash-es';\nimport { from, of } from 'rxjs';\nimport {\n catchError,\n filter,\n map,\n mergeAll,\n mergeMap,\n tap,\n toArray,\n throwIfEmpty\n} from 'rxjs/operators';\nimport {\n ContextDashboard,\n ContextDashboardManagedObject,\n ContextDashboardType\n} from './context-dashboard.model';\n\n@Injectable()\nexport class ContextDashboardService {\n private cache = new Map<string, ContextDashboardManagedObject>();\n private readonly DEFAULT_PAGESIZE = 1000;\n private readonly FRAGMENT_NAME = 'c8y_Dashboard';\n private readonly DASHBOARD_ROUTE_PATH = 'dashboard';\n private readonly INDEX_SPLIT = '!';\n private currentContextRoute: string;\n private _formDisabled = true;\n\n get formDisabled() {\n return this._formDisabled;\n }\n\n set formDisabled(value) {\n this._formDisabled = value;\n }\n\n constructor(\n private inventory: InventoryService,\n private tabs: TabsService,\n private modal: ModalService,\n private translateService: TranslateService,\n private router: Router,\n private user: UserService,\n private appState: AppStateService,\n private permissions: Permissions\n ) {}\n\n async create(dashboardCfg: ContextDashboard, contextOrName: { contextData: any } | string) {\n let id;\n let dashboardType;\n if (typeof contextOrName === 'string') {\n id = contextOrName as string;\n dashboardType = ContextDashboardType.Named;\n } else {\n id = contextOrName.contextData.id as string;\n dashboardType = this.getDashboardTypeFromViewContext(dashboardCfg, contextOrName);\n }\n\n const dashboard: Partial<IManagedObject> = {};\n assign(dashboard, { c8y_Dashboard: dashboardCfg });\n\n const value =\n dashboardType === ContextDashboardType.DeviceType ? dashboardCfg.deviceTypeValue : id;\n\n const fragmentKey = this.createFragmentKey(dashboardType, value);\n dashboard[fragmentKey] = {};\n\n if (this.shouldSetGlobal(dashboard)) {\n assign(dashboard, { c8y_Global: {} });\n }\n const { data } = dashboardType === ContextDashboardType.Group || dashboardType === ContextDashboardType.Device\n ? await this.inventory.childAdditionsCreate(dashboard, id)\n : await this.inventory.create(dashboard);\n return data as ContextDashboardManagedObject;\n }\n\n async detail(dashboardMO: ContextDashboardManagedObject) {\n const { data } = await this.inventory.detail(dashboardMO);\n this.cache.set(dashboardMO.id, data);\n return data;\n }\n\n async update(dashboard: ContextDashboardManagedObject) {\n const cleanedDashboard = this.clean(pick(dashboard, [this.FRAGMENT_NAME, 'id']));\n cleanedDashboard.c8y_Global = this.shouldSetGlobal(dashboard);\n const { data } = await this.inventory.update(cleanedDashboard);\n this.cache.set(dashboard.id, data);\n return data;\n }\n\n async delete(dashboard: ContextDashboardManagedObject) {\n try {\n let msg = gettext(\n `You are about to delete the dashboard \"{{ dashboardName }}\". Do you want to proceed?`\n );\n if (this.isDeviceType(dashboard)) {\n msg = gettext(\n `You are about to delete the dashboard \"{{ dashboardName }}\" from all devices of the type \"{{ deviceType }}\".\n Do you want to proceed?`\n );\n }\n await this.modal.confirm(\n gettext('Delete dashboard'),\n this.translateService.instant(msg, {\n dashboardName: dashboard.c8y_Dashboard.name,\n deviceType: dashboard.c8y_Dashboard.deviceTypeValue\n }),\n Status.DANGER,\n {\n ok: gettext('Delete'),\n cancel: gettext('Cancel')\n }\n );\n await this.inventory.delete(dashboard);\n const tabToRemove = Array.from(this.tabs.state).find(tab =>\n tab.path.endsWith(`${this.DASHBOARD_ROUTE_PATH}/${dashboard.id}`)\n );\n this.tabs.remove(tabToRemove);\n this.tabs.refresh();\n } catch (ex) {\n // intended empty\n }\n }\n\n activateDashboards(route: ActivatedRouteSnapshot, types: ContextDashboardType[]) {\n const { dashboardId } = route.params;\n if (dashboardId) {\n return this.getDashboard$(dashboardId, types, route.parent.data.contextData).pipe(\n tap(dashboard => {\n route.data = { dashboard };\n }),\n map(() => true),\n catchError(() => {\n return of(false);\n })\n );\n }\n\n return this.getTabs$(route.data.contextData, types);\n }\n\n getNamedDashboardOrCreate(name: string, defaultWidgets: Widget[]) {\n const children = this.mapWidgets(defaultWidgets);\n return this.getDashboard$(name, [ContextDashboardType.Named]).pipe(\n throwIfEmpty(),\n catchError(() =>\n from(\n this.create({children}, name)\n )\n )\n );\n }\n\n async refreshTabs(dashboardMO: ContextDashboardManagedObject) {\n if (!this.isNamed(dashboardMO)) {\n const tabToUpdate = Array.from(this.tabs.state).find(tab =>\n tab.path.endsWith(`${this.DASHBOARD_ROUTE_PATH}/${dashboardMO.id}`)\n );\n\n const data = await this.detail(dashboardMO);\n if (tabToUpdate) {\n const { icon, priority, name } = data.c8y_Dashboard;\n tabToUpdate.icon = icon;\n tabToUpdate.priority = priority;\n tabToUpdate.label = name;\n }\n this.tabs.refresh();\n }\n }\n\n async navigateToDashboard(dashboardMO: ContextDashboardManagedObject) {\n if (/dashboard/.test(this.router.url)) {\n this.router.navigate(['..', dashboardMO.id], {\n relativeTo: getActivatedRoute(this.router)\n });\n } else {\n this.router.navigate(['..', 'dashboard', dashboardMO.id], {\n relativeTo: getActivatedRoute(this.router)\n });\n }\n }\n\n canEditDashboard(mo) {\n return this.permissions.canEdit(['ROLE_INVENTORY_ADMIN', 'ROLE_INVENTORY_CREATE'], mo);\n }\n\n isNamed(dashboard: Partial<ContextDashboardManagedObject>) {\n return some(keys(dashboard), prop =>\n new RegExp(\n `^${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${ContextDashboardType.Named}${this.INDEX_SPLIT}`\n ).test(prop)\n );\n }\n\n isDeviceType(dashboard: Partial<ContextDashboardManagedObject>) {\n return some(keys(dashboard), prop =>\n new RegExp(\n `^${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${ContextDashboardType.DeviceType}${\n this.INDEX_SPLIT\n }`\n ).test(prop)\n );\n }\n\n getStyling(styleList, styleName, defaultValue) {\n const styling = styleList.find(style => style && new RegExp(styleName, 'i').test(style.class));\n return styling ? styling.class : defaultValue;\n }\n\n mapWidgets(widgets: Widget[]) {\n return keyBy(\n widgets.map(widget => {\n widget.id = String(Math.random()).substr(2);\n return widget;\n }),\n 'id'\n );\n }\n\n private getDashboard$(\n dashboardIdOrName,\n dashboardType: ContextDashboardType[],\n mo?: IManagedObject\n ) {\n const cache = this.cache.get(dashboardIdOrName);\n\n const dashboards = mo\n ? this.getContextDashboards(mo, dashboardType)\n : [this.getNamedDashboard(dashboardIdOrName)];\n\n const cacheRefresh = this.getContextDashboards$(dashboards).pipe(\n tap((dashboard) => this.cacheDashboard(dashboard)),\n filter(\n dashboard =>\n dashboard.id === dashboardIdOrName ||\n has(\n dashboard,\n `${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${ContextDashboardType.Named}${\n this.INDEX_SPLIT\n }${dashboardIdOrName}`\n )\n )\n );\n return cache ? of(cache) : cacheRefresh;\n }\n\n private getTabs$(mo: ContextDashboardManagedObject, dashboardType: ContextDashboardType[]) {\n const dashboards = this.getContextDashboards(mo, dashboardType);\n this.setBaseContextRoute(mo, dashboardType);\n\n return this.getContextDashboards$(dashboards).pipe(\n map(dashboard => this.removeDashboardMoProperty(dashboard)),\n tap(dashboard => this.cacheDashboard(dashboard)),\n map(dashboard => this.createDashboardTab(dashboard)),\n toArray()\n );\n }\n\n private getContextDashboards$(requests: Array<Promise<IResultList<IManagedObject>>>) {\n return from(requests).pipe(\n mergeAll(),\n mergeMap(response => response.data as ContextDashboardManagedObject[]));\n }\n\n private setBaseContextRoute(mo: IManagedObject, dashboardType: ContextDashboardType[]) {\n const type = dashboardType.includes(ContextDashboardType.Device)\n ? ContextDashboardType.Device\n : ContextDashboardType.Group;\n this.currentContextRoute = `${type}/${mo.id}`;\n }\n\n /**\n * Cleans already corrupted dashboards from dashboardMo property.\n * Added to fix dashboards on the cloud instance (eu-latest).\n * @deprecated This is going to be removed after 1007.7.0.\n */\n private removeDashboardMoProperty(\n dashboard: ContextDashboardManagedObject\n ): ContextDashboardManagedObject {\n const dashboardCopy = cloneDeep(dashboard);\n const children = get(dashboardCopy, 'c8y_Dashboard.children');\n let updateDashboard = false;\n\n forEach(children, child => {\n if (get(child, 'componentTransformConfigWithContext')) {\n delete child.componentTransformConfigWithContext;\n updateDashboard = true;\n }\n if (get(child, 'config.dashboardMo')) {\n delete child.config.dashboardMo;\n updateDashboard = true;\n }\n });\n\n if (updateDashboard) {\n this.update(dashboardCopy);\n }\n return dashboardCopy;\n }\n\n private cacheDashboard(dashboard: ContextDashboardManagedObject) {\n this.cache.set(dashboard.id, dashboard);\n }\n\n private createDashboardTab(dashboard: ContextDashboardManagedObject) {\n const { c8y_Dashboard: _dashboard, id } = dashboard;\n return ({\n icon: _dashboard.icon,\n path: `${this.DASHBOARD_ROUTE_PATH}/${id}`,\n label: _dashboard.name,\n priority: _dashboard.priority\n });\n }\n\n private clean(dashboard) {\n const jsonString = JSON.stringify(dashboard, (key, value) => {\n if (key === '$$hashKey' || key === 'klasses') {\n return undefined;\n }\n\n return value;\n });\n return JSON.parse(jsonString);\n }\n\n private getNamedDashboard(name: string) {\n return this.inventory.list({\n fragmentType: `${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${ContextDashboardType.Named}${\n this.INDEX_SPLIT\n }${name}`,\n pageSize: 1\n });\n }\n\n private getContextDashboards(mo: IManagedObject, dashboardType: ContextDashboardType[]) {\n return dashboardType.map((type: ContextDashboardType) =>\n this.inventory.list({\n fragmentType: `${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${type}${this.INDEX_SPLIT}${\n type === ContextDashboardType.DeviceType ? mo.type : mo.id\n }`,\n pageSize: this.DEFAULT_PAGESIZE\n })\n );\n }\n\n private getDashboardTypeFromViewContext(dashboardCfg, context) {\n let dashboardType;\n if (context.context === ViewContext.Device) {\n dashboardType = dashboardCfg.deviceType\n ? ContextDashboardType.DeviceType\n : ContextDashboardType.Device;\n }\n if (context.context === ViewContext.Group) {\n dashboardType = ContextDashboardType.Group;\n }\n return dashboardType;\n }\n\n private createFragmentKey(contextDashboardType: ContextDashboardType, value: string) {\n return [this.FRAGMENT_NAME, contextDashboardType, value].join(this.INDEX_SPLIT);\n }\n\n private shouldSetGlobal(dashboard: Partial<ContextDashboardManagedObject>) {\n if (this.isNamed(dashboard) || this.isDeviceType(dashboard)) {\n return {};\n }\n return null;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\nimport { ContextDashboardType } from './context-dashboard.model';\nimport { ContextDashboardService } from './context-dashboard.service';\n\n@Injectable()\nexport class DeviceDashboardGuard {\n constructor(\n private contextDashboardService: ContextDashboardService\n ) {}\n\n canActivate(route: ActivatedRouteSnapshot) {\n return this.contextDashboardService.activateDashboards(route, [\n ContextDashboardType.Device,\n ContextDashboardType.DeviceType\n ]);\n }\n}\n","import { Component, Inject, ViewChild } from '@angular/core';\nimport { ICON_LIST } from '@c8y/ngx-components';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport {\n ContextDashboard,\n DASHBOARD_THEME_CLASSES,\n WIDGET_HEADER_CLASSES\n} from './context-dashboard.model';\nimport { clone } from 'lodash-es';\nimport { ContextDashboardService } from './context-dashboard.service';\nimport { NgForm } from '@angular/forms';\n\n@Component({\n selector: 'c8y-dashboard-detail',\n templateUrl: './dashboard-detail.component.html'\n})\nexport class DashboardDetailComponent {\n @ViewChild('dashboardDetailForm', { static: true }) dashboardDetailForm: NgForm;\n dashboard: ContextDashboard;\n current: ContextDashboard;\n deviceType: string;\n isNamedDashboard: boolean;\n icons: string[];\n filteredIcons: string[];\n styling = {\n themeClass: 'dashboard-theme-light',\n headerClass: 'panel-title-regular'\n };\n possibleStyling = { DASHBOARD_THEME_CLASSES, WIDGET_HEADER_CLASSES };\n result: Promise<ContextDashboard> = new Promise((resolve, reject) => {\n this._save = resolve;\n this._cancel = reject;\n });\n\n readonly DEFAULT_DASHBOARD_MARGIN = 12;\n readonly DEFAULT_DASHBOARD_ICON = 'th';\n readonly DEFAULT_DASHBOARD_PRIORITY = 10000;\n readonly DEFAULT_DASHBOARD_NAME = 'Dashboard';\n\n private _save;\n private _cancel;\n\n constructor(\n private modal: BsModalRef,\n @Inject(ICON_LIST) iconList: string[],\n private contextDashboardService: ContextDashboardService\n ) {\n this.icons = iconList;\n this.filteredIcons = iconList;\n }\n\n ngAfterContentInit(): void {\n const defaultDashboardCfg = {\n name: this.DEFAULT_DASHBOARD_NAME,\n priority: this.DEFAULT_DASHBOARD_PRIORITY,\n icon: this.DEFAULT_DASHBOARD_ICON,\n deviceTypeValue: this.deviceType\n };\n\n if (this.dashboard) {\n this.current = clone(this.dashboard);\n this.setDashboardStyle();\n } else {\n this.dashboard = defaultDashboardCfg;\n this.dashboardDetailForm.form.markAsDirty();\n }\n }\n\n save() {\n this.dashboard.classes = { [this.styling.themeClass]: true };\n this.dashboard.widgetClasses = { [this.styling.headerClass]: true };\n this._save(this.dashboard);\n }\n\n close() {\n this._cancel();\n this.modal.hide();\n }\n\n getDashboardPreviewStyle() {\n const cssClasses = {};\n cssClasses[this.styling.headerClass] = true;\n cssClasses[this.styling.themeClass] = true;\n return cssClasses;\n }\n\n selectIcon(icon) {\n this.dashboard.icon = icon;\n this.dashboardDetailForm.form.markAsDirty();\n }\n\n updateFiltered(term: string) {\n if (term) {\n const search = new RegExp(term, 'i');\n this.filteredIcons = this.icons.filter(val => search.test(val));\n } else {\n this.filteredIcons = this.icons;\n }\n }\n\n private setDashboardStyle() {\n const allClasses = {\n ...this.dashboard.classes,\n ...this.dashboard.widgetClasses\n };\n\n const styles = Object.keys(allClasses).map(c => c.split('-').pop());\n styles.forEach(styleName => {\n this.styling.themeClass = this.contextDashboardService.getStyling(\n DASHBOARD_THEME_CLASSES,\n styleName,\n this.styling.themeClass\n );\n this.styling.headerClass = this.contextDashboardService.getStyling(\n WIDGET_HEADER_CLASSES,\n styleName,\n this.styling.headerClass\n );\n });\n }\n}\n","import { Injectable, Inject } from '@angular/core';\nimport { sortBy, cloneDeep } from 'lodash-es';\nimport { DynamicComponentService, DynamicComponentDefinition } from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ContextDashboardConfig, CONTEXT_DASHBOARD_CONFIG } from './context-dashboard.model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class WidgetService {\n constructor(\n private dynamicComponentService: DynamicComponentService,\n private translateService: TranslateService,\n @Inject(CONTEXT_DASHBOARD_CONFIG) public moduleConfig: ContextDashboardConfig\n ) {}\n\n async getWidgetDefinition(componentId): Promise<DynamicComponentDefinition> {\n return this.dynamicComponentService.getById$(componentId).toPromise();\n }\n\n getWidgetDefinitions() {\n const translatedComponents = Array.from(this.dynamicComponentService.state).map(cmp => ({\n ...cmp,\n label: this.translateService.instant(cmp.label)\n }));\n\n return cloneDeep(sortBy(translatedComponents, 'label').filter(this.moduleConfig.widgetFilter));\n }\n}\n","import { Component, OnDestroy } from '@angular/core';\nimport { DynamicComponentDefinition, Widget } from '@c8y/ngx-components';\nimport { clone, cloneDeep, escapeRegExp, get, omit } from 'lodash-es';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { iif, Subject, Subscription, timer } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\nimport {\n ContextDashboardManagedObject,\n WIDGET_CONTENT_CLASSES,\n WIDGET_HEADER_CLASSES,\n ContextWidgetConfig\n} from './context-dashboard.model';\nimport { WidgetService } from './widget.service';\nimport { ContextDashboardService } from './context-dashboard.service';\n\n@Component({\n selector: 'c8y-widget-config',\n templateUrl: './widget-config.component.html'\n})\nexport class WidgetConfigComponent implements OnDestroy {\n mode: 'config' | 'select' | 'style' = 'select';\n searchResult: DynamicComponentDefinition[];\n components: DynamicComponentDefinition[];\n selected: DynamicComponentDefinition;\n searchChange$ = new Subject();\n searchTerm = '';\n context: any;\n componentLabel: string;\n mo: ContextDashboardManagedObject;\n styling = {\n headerClass: 'panel-title-regular',\n contentClass: 'panel-content-light'\n };\n defaultStyling = {\n headerClass: 'panel-title-regular',\n contentClass: 'panel-content-light'\n };\n possibleStyling = { WIDGET_HEADER_CLASSES, WIDGET_CONTENT_CLASSES };\n current: any;\n widgetConfig: ContextWidgetConfig;\n isUpgrade = false;\n\n get isEdit() {\n return !!this.current;\n }\n\n result: Promise<Widget> = new Promise((resolve, reject) => {\n this._save = resolve;\n this._cancel = reject;\n });\n\n private searchSub: Subscription;\n private _save;\n private _cancel;\n\n constructor(\n private widgetService: WidgetService,\n private modal: BsModalRef,\n public contextDashboardService: ContextDashboardService\n ) {}\n\n ngAfterContentInit(): void {\n this.components = this.widgetService.getWidgetDefinitions();\n\n if (this.selected) {\n this.current = clone(this.selected);\n this.select(this.selected, this.isEdit ? 'config' : 'select');\n }\n\n this.searchSub = this.searchChange$\n .pipe(\n switchMap((event: KeyboardEvent) => iif(() => event.which !== 13, timer(200), timer(10)))\n )\n .subscribe(() => {\n this.search();\n });\n\n if (this.mo.c8y_Dashboard.classes) {\n this.styling = this.setDefaultStyle({\n ...this.mo.c8y_Dashboard.classes,\n ...this.mo.c8y_Dashboard.widgetClasses,\n ...(this.isEdit ? this.current.data.classes : {})\n });\n this.defaultStyling = this.setDefaultStyle({\n ...this.mo.c8y_Dashboard.classes,\n ...this.mo.c8y_Dashboard.widgetClasses\n });\n }\n }\n\n save() {\n const { _x, _y, _width, _height } = this.selected.data;\n\n if (this.widgetConfig && this.widgetConfig.device) {\n const { id, name } = this.widgetConfig.device;\n this.widgetConfig.device = { id, name };\n }\n\n const widget = {\n _x,\n _y,\n _width,\n _height,\n config: omit(this.widgetConfig, 'settings'),\n title: this.selected.data.title,\n componentId: this.selected.id,\n id: this.isEdit ? this.current.data.id : String(Math.random()).substr(2),\n classes: this.getStyle(),\n ...(!this.isEdit ? this.widgetConfig.settings.widgetDefaults : {})\n } as Widget;\n\n this._save(widget);\n }\n\n select(cmp, mode: 'select' | 'config' = 'config') {\n cmp.data = cmp.data || {};\n this.selected = cmp;\n\n this.isUpgrade = !!get(cmp, 'data.settings.upgrade');\n this.contextDashboardService.formDisabled = this.isUpgrade;\n\n if (this.isEdit) {\n const { _x, _y, _width, _height, classes, title } = this.current.data;\n this.selected.data = { ...this.selected.data, _x, _y, _width, _height, classes, title };\n }\n\n this.widgetConfig = cloneDeep(this.composeWidgetConfig(this.selected, this.context));\n\n this.selected.data.title = this.selected.data.title || cmp.label;\n this.componentLabel = cmp.label;\n this.mode = mode;\n }\n\n search() {\n if (this.searchTerm.length > 0) {\n this.searchResult = this.components.filter(cmp =>\n new RegExp(escapeRegExp(this.searchTerm.trim()), 'i').test(cmp.label)\n );\n } else {\n this.resetSearch();\n }\n }\n\n resetSearch() {\n this.searchTerm = '';\n this.searchResult = undefined;\n }\n\n changeMode(mode: 'config' | 'select' | 'style') {\n this.mode = mode;\n }\n\n close() {\n this._cancel();\n this.modal.hide();\n }\n\n getStyle(isPreview = false) {\n const cssClasses = {};\n if (isPreview || !this.isDashboardDefaultStyle(this.styling.headerClass)) {\n cssClasses[this.styling.headerClass] = true;\n }\n\n if (isPreview || !this.isDashboardDefaultStyle(this.styling.contentClass)) {\n cssClasses[this.styling.contentClass] = true;\n }\n\n if (isPreview) {\n cssClasses[`dashboard-theme-${this.defaultStyling.contentClass.split('-').pop()}`] = true;\n }\n\n return cssClasses;\n }\n\n ngOnDestroy(): void {\n this.contextDashboardService.formDisabled = true;\n if (this.searchSub) {\n this.searchSub.unsubscribe();\n }\n }\n\n private isDashboardDefaultStyle(className) {\n const allClasses = {\n ...this.mo.c8y_Dashboard.classes,\n ...this.mo.c8y_Dashboard.widgetClasses\n };\n const styles = Object.keys(allClasses).map(cssClass => ({ class: cssClass }));\n const style = this.contextDashboardService.getStyling(\n styles,\n className.split('-').pop(),\n undefined\n );\n return !!style;\n }\n\n private setDefaultStyle(setClasses) {\n let contentClass = this.styling.contentClass;\n let headerClass = this.styling.headerClass;\n\n const styles = Object.keys(setClasses).map(c => c.split('-').pop());\n styles.forEach(styleName => {\n contentClass = this.contextDashboardService.getStyling(\n WIDGET_CONTENT_CLASSES,\n styleName,\n contentClass\n );\n headerClass = this.contextDashboardService.getStyling(\n WIDGET_HEADER_CLASSES,\n styleName,\n headerClass\n );\n });\n\n return { headerClass, contentClass };\n }\n\n private composeWidgetConfig(selectedComponent, context = {}) {\n const setting = {\n settings: {\n ...selectedComponent.data.settings,\n ...get(selectedComponent.data.settings, 'ng1.options'),\n ...get(selectedComponent.data, 'ng1.options'),\n context,\n dashboardMo: this.mo.c8y_Dashboard\n },\n ...selectedComponent.data.config\n } as ContextWidgetConfig;\n return this.applyTargetIfDeviceDashboard(setting);\n }\n\n private applyTargetIfDeviceDashboard(widgetConfig: ContextWidgetConfig) {\n const isDeviceType = this.contextDashboardService.isDeviceType(this.mo);\n\n if (isDeviceType) {\n widgetConfig.settings.hideTarget = isDeviceType;\n\n const noDeviceTarget = widgetConfig.settings.ng1\n ? widgetConfig.settings.ng1.options.noDeviceTarget\n : widgetConfig.settings.noDeviceTarget;\n\n if (!noDeviceTarget) {\n widgetConfig.device = {\n id: this.context.id,\n name: this.context.name\n };\n }\n }\n return widgetConfig;\n }\n}\n","import { Component, HostBinding, Inject, Input, OnDestroy, OnInit, Renderer2 } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport {\n AlertService,\n DashboardChildChange,\n DashboardChildComponent,\n DashboardSettings,\n DynamicComponentDefinition,\n gettext,\n Widget,\n WidgetChange\n} from '@c8y/ngx-components';\nimport { cloneDeep, findIndex, get, keyBy, omit, values } from 'lodash-es';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { Subscription } from 'rxjs';\nimport {\n ContextDashboard,\n ContextDashboardConfig,\n ContextDashboardManagedObject,\n CONTEXT_DASHBOARD_CONFIG,\n WIDGET_HEADER_CLASSES\n} from './context-dashboard.model';\nimport { ContextDashboardService } from './context-dashboard.service';\nimport { DashboardDetailComponent } from './dashboard-detail.component';\nimport { WidgetConfigComponent } from './widget-config.component';\nimport { WidgetService } from './widget.service';\n\n/**\n * The context dashboard is a dashboard which resolves it data from the current context (device or group)\n * it is displayed on. It usually uses the route.data for it, but you can pass\n * a different managedObject to the [mo] input parameter to change that behavior.\n */\n@Component({\n selector: 'c8y-context-dashboard',\n templateUrl: './context-dashboard.component.html',\n host: {\n style: `\n display: block;\n `,\n class: 'dashboard c8y-grid-dashboard'\n }\n})\nexport class ContextDashboardComponent implements OnInit, OnDestroy {\n @Input()\n name: string;\n @Input()\n childrenClasses = '';\n @Input()\n context: any;\n @Input()\n setTitle: boolean = false;\n @Input()\n disabled: boolean = false;\n @Input()\n defaultWidgets: Widget[] = [];\n @Input()\n canDelete: boolean = true;\n @Input()\n isLoading: boolean = true;\n\n @HostBinding('class')\n class = '';\n\n widgets: Widget[] = [];\n mo: ContextDashboardManagedObject;\n dashboard: ContextDashboard;\n\n private dataSub: Subscription;\n\n constructor(\n private route: ActivatedRoute,\n private router: Router,\n private contextDashboardService: ContextDashboardService,\n private alert: AlertService,\n private renderer: Renderer2,\n @Inject(CONTEXT_DASHBOARD_CONFIG) public moduleConfig: ContextDashboardConfig,\n private widgetService: WidgetService,\n private bsModal: BsModalService\n ) {}\n\n ngOnInit() {\n if (!this.name) {\n this.loadContextDashboard();\n return;\n }\n this.loadNamedDashboard();\n }\n\n /**\n * Applies the current context to the widget\n * @param widget The widget to apply the context to.\n */\n applyDeviceTarget(widget) {\n if (widget.config.device) {\n widget.config.device = { id: this.context.id, name: this.context.name };\n }\n }\n\n /**\n * Removes the route listener.\n */\n ngOnDestroy(): void {\n if (this.dataSub) {\n this.dataSub.unsubscribe();\n }\n }\n\n /**\n * Restores the dashboard widgets to the default widgets.\n */\n async restore() {\n this.isLoading = true;\n this.mo.c8y_Dashboard.children = this.contextDashboardService.mapWidgets(this.defaultWidgets);\n await this.contextDashboardService.update(this.mo);\n this.onLoad();\n }\n\n /**\n * Updates all dashboards children's. Useful for position changes on the dashboard.\n * @param child The child to change.\n */\n async updateDashboardChildren(child: DashboardChildChange) {\n const { children } = child;\n const dashboardMO: ContextDashboardManagedObject = this.mo;\n const mappedChildren: { [id: string]: Widget } = keyBy(\n children.map(c => this.componentToWidget(c)),\n 'id'\n );\n dashboardMO.c8y_Dashboard.children = mappedChildren;\n return this.contextDashboardService.update(dashboardMO);\n }\n\n /**\n * Remove the complete dashboard and navigate away.\n */\n async deleteDashboard() {\n await this.contextDashboardService.delete(this.mo);\n if (this.route.parent) {\n const route = this.route.parent.snapshot.url.map(segment => segment.path).join('/');\n this.router.navigateByUrl(route);\n }\n }\n\n /**\n * Edits the current dashboard\n */\n async editDashboard() {\n const initialState = {\n dashboard: this.dashboard,\n deviceType: this.context.type,\n isNamedDashboard: this.contextDashboardService.isNamed(this.mo)\n };\n const modal = this.bsModal.show(DashboardDetailComponent, {\n class: 'modal-lg',\n initialState,\n ignoreBackdropClick: true\n }).content as DashboardDetailComponent;\n try {\n const dashboardMO = cloneDeep(this.mo);\n dashboardMO.c8y_Dashboard = await modal.result;\n await this.contextDashboardService.update(dashboardMO);\n await this.contextDashboardService.refreshTabs(dashboardMO);\n this.onLoad();\n modal.close();\n } catch (ex) {\n // intended empty\n }\n }\n\n /**\n * Edits a widget on the dashboard.\n * @param change The widget change event.\n */\n async editWidget(change: WidgetChange) {\n const { x, y, width, height } = change.source;\n const component = await this.widgetService.getWidgetDefinition(\n change.widget.name || change.widget.componentId\n );\n if (!component) {\n this.addWidget();\n return;\n }\n await this.addWidget({\n ...component,\n data: { ...component.data, ...change.widget, _x: x, _y: y, _width: width, _height: height }\n });\n }\n\n /**\n * Adds a widget to the dashboard.\n * @param selected Define a selected component to switch to edit mode directly.\n */\n async addWidget(selected?: DynamicComponentDefinition) {\n const initialState = {\n mo: this.mo,\n context: this.context,\n selected: cloneDeep(selected)\n };\n\n const modal = this.bsModal.show(WidgetConfigComponent, {\n class: 'modal-lg',\n initialState,\n ignoreBackdropClick: true\n }).content as WidgetConfigComponent;\n\n try {\n const newWidget = await modal.result;\n if (!this.mo.c8y_Dashboard.children) {\n this.mo.c8y_Dashboard.children = {};\n }\n this.mo.c8y_Dashboard.children[newWidget.id] = newWidget;\n this.contextDashboardService.update(this.mo);\n newWidget.classes = this.mergeWidgetClasses(newWidget);\n await this.updateWidget(newWidget);\n modal.close();\n } catch (ex) {\n // intended empty\n }\n }\n\n /**\n * Updates a widget or adds a new one if it doesn't exist on\n * the dashboard.\n * @param widget The new widget\n */\n async updateWidget(widget) {\n const index = findIndex(this.widgets, { id: widget.id });\n const isNew = index === -1;\n const mappedWidget = await this.mapLegacy(widget);\n if (isNew) {\n this.widgets.push(mappedWidget);\n } else {\n this.widgets.splice(index, 1, mappedWidget);\n }\n }\n\n /**\n * Removes a widget and rearranges the remaining ones\n * if necessary.\n * @param change The change event.\n */\n deleteWidget(change: WidgetChange) {\n const { widget, source } = change;\n delete this.mo.c8y_Dashboard.children[widget.id];\n const removed = this.widgets.find(({ id }) => id === widget.id);\n this.widgets.splice(this.widgets.indexOf(removed), 1);\n\n // using setTimeout to give the component the chance to remove it.\n setTimeout(() => {\n const child = new DashboardChildChange(source);\n child.collapseUpAll();\n this.updateDashboardChildren(child);\n });\n }\n\n /**\n * This is a workaround to ensure that the dragged-element\n * (which is attached to the body) has the right styling.\n */\n addDashboardClassToBody() {\n this.class.split(' ').forEach(cssClass => {\n this.renderer.addClass(document.body, cssClass);\n });\n }\n\n /**\n * This is a workaround to ensure that the dragged-element\n * (which is attached to the body) has the right styling.\n */\n removeDashboardClassFromBody() {\n this.class.split(' ').forEach(cssClass => {\n this.renderer.removeClass(document.body, cssClass);\n });\n }\n\n /**\n * Changes the dashboard settings to frozen or vice versa.\n * @param settings The current settings of the dashboard.\n */\n async toggleFreeze(settings: DashboardSettings) {\n this.toggleIsFrozenFlag(settings);\n try {\n await this.contextDashboardService.update(this.mo);\n if (this.dashboard.isFrozen) {\n this.alert.success(gettext('Your dashboard is locked now.'));\n } else {\n this.alert.success(gettext('Your dashboard is unlocked now.'));\n }\n } catch (ex) {\n this.alert.addServerFailure(ex);\n this.toggleIsFrozenFlag(settings);\n }\n }\n\n private toggleIsFrozenFlag(settings: DashboardSettings) {\n settings.isFrozen = !settings.isFrozen;\n this.dashboard.isFrozen = settings.isFrozen;\n }\n\n private loadContextDashboard() {\n this.dataSub = this.route.data.subscribe(({ dashboard }) => {\n this.context = this.route.parent.snapshot.data.contextData;\n this.mo = dashboard;\n this.dashboard = this.mo.c8y_Dashboard;\n this.onLoad();\n });\n }\n\n private loadNamedDashboard() {\n this.dataSub = this.contextDashboardService\n .getNamedDashboardOrCreate(this.name, this.defaultWidgets)\n .subscribe(mo => {\n this.context = this.context || {};\n this.mo = mo;\n this.dashboard = this.mo.c8y_Dashboard;\n this.onLoad();\n });\n }\n\n private async onLoad() {\n const canEditDashboard = await this.contextDashboardService.canEditDashboard(this.mo);\n this.disabled = !canEditDashboard;\n const dashboardChildren = cloneDeep(this.mo.c8y_Dashboard.children);\n const isDeviceType = this.contextDashboardService.isDeviceType(this.mo);\n const dashboardClasses = {\n 'c8y-grid-dashboard': true,\n dashboard: true,\n ...this.dashboard.classes\n };\n\n this.widgets = await Promise.all<Widget>(\n values(dashboardChildren).map(widget => {\n widget.classes = this.mergeWidgetClasses(widget);\n if (isDeviceType) {\n this.applyDeviceTarget(widget);\n }\n return this.mapLegacy(widget);\n })\n );\n this.class = Object.keys(dashboardClasses).join(' ');\n this.isLoading = false;\n }\n\n private mergeWidgetClasses(widget) {\n const hasHeaderClass = WIDGET_HEADER_CLASSES.find(\n el => widget.classes && widget.classes[el.class]\n );\n const widgetClasses = hasHeaderClass\n ? { ...widget.classes }\n : { ...this.dashboard.widgetClasses, ...widget.classes };\n return {\n card: true,\n 'card-dashboard': true,\n ...widgetClasses\n };\n }\n\n private componentToWidget(child: DashboardChildComponent) {\n return {\n ...omit(child.data, ['componentTransformConfigWithContext', 'transformConfigWithContext']), // remove legacy\n ...({\n _x: child.x,\n _y: child.y,\n _width: child.width,\n _height: child.height\n } as Widget)\n };\n }\n\n private async mapLegacy(widget): Promise<Widget> {\n const cmp = await this.widgetService.getWidgetDefinition(widget.componentId || widget.name);\n if (get(cmp, 'data.settings.upgrade')) {\n widget.widgetComponent = cmp.data.settings.widgetComponent;\n widget.configComponent = cmp.data.settings.configComponent;\n widget.templateUrl = cmp.data.settings.templateUrl;\n widget.configTemplateUrl = cmp.data.settings.configTemplateUrl;\n widget.transformConfigWithContext =\n cmp.data.settings.componentTransformConfigWithContext ||\n cmp.data.settings.transformConfigWithContext;\n } else {\n delete widget.templateUrl;\n delete widget.configTemplateUrl;\n }\n return widget;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\nimport { ContextDashboardType } from './context-dashboard.model';\nimport { ContextDashboardService } from './context-dashboard.service';\n\n@Injectable()\nexport class GroupDashboardGuard {\n constructor(\n private contextDashboardService: ContextDashboardService\n ) {}\n\n canActivate(route: ActivatedRouteSnapshot) {\n return this.contextDashboardService.activateDashboards(route, [\n ContextDashboardType.Group\n ]);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Action, ActionFactory, gettext, ViewContext, Permissions } from '@c8y/ngx-components';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { ContextDashboardService } from './context-dashboard.service';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { DashboardDetailComponent } from './dashboard-detail.component';\nimport { ContextDashboardManagedObject } from './context-dashboard.model';\n\n@Injectable()\nexport class DashboardActionsFactory implements ActionFactory {\n constructor(\n private router: Router,\n private contextDashboardService: ContextDashboardService,\n private bsModal: BsModalService,\n private permissions: Permissions\n ) {}\n\n async get(activatedRoute: ActivatedRoute): Promise<Action[]> {\n const context =\n !activatedRoute.parent || activatedRoute.snapshot.data.context\n ? activatedRoute.snapshot.data\n : activatedRoute.parent.snapshot.data;\n const canEditDashboard = await this.isEnabled(context);\n return [\n {\n label: gettext('Add dashboard'),\n priority: 2500,\n action: () => this.addDashboard(context),\n disabled: !canEditDashboard\n }\n ];\n }\n\n async addDashboard(context) {\n let initialState: { deviceType: string };\n\n if (context.context === ViewContext.Device) {\n initialState = {\n deviceType: context.contextData.type\n };\n }\n\n const modal = this.bsModal.show(DashboardDetailComponent, {\n class: 'modal-lg',\n initialState,\n ignoreBackdropClick: true\n }).content as DashboardDetailComponent;\n try {\n const dashboardCfg = await modal.result;\n const dashboardMO: ContextDashboardManagedObject = await this.contextDashboardService.create(\n dashboardCfg,\n context\n );\n await this.contextDashboardService.navigateToDashboard(dashboardMO);\n modal.close();\n } catch (ex) {\n // intended emptys\n }\n }\n\n private async isEnabled(context) {\n if (context.contextData && context.contextData.id) {\n return (\n (await this.permissions.canEdit(\n ['ROLE_INVENTORY_ADMIN', 'ROLE_INVENTORY_CREATE'],\n context.contextData\n )) && [ViewContext.Device, ViewContext.Group].includes(context.context)\n );\n }\n return (\n this.permissions.hasAnyRole(['ROLE_INVENTORY_ADMIN', 'ROLE_INVENTORY_CREATE']) &&\n [ViewContext.Device, ViewContext.Group].includes(context.context)\n );\n }\n}\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { DASHBOARD_THEME_CLASSES, WIDGET_HEADER_CLASSES } from './context-dashboard.model';\nimport { ControlContainer, NgForm } from '@angular/forms';\n\n@Component({\n selector: 'c8y-appearance-settings',\n templateUrl: './appearance-settings.component.html',\n viewProviders: [ { provide: ControlContainer, useExisting: NgForm } ]\n})\nexport class AppearanceSettingsComponent {\n @Input()\n themeClass: string = 'dashboard-theme-light';\n @Input()\n headerClass: string = 'panel-title-regular';\n @Input()\n defaultThemeClass: string;\n @Input()\n defaultHeaderClass: string;\n @Output()\n themeClassChange = new EventEmitter<string>();\n @Output()\n headerClassChange = new EventEmitter<string>();\n\n @Input()\n possibleStylingTheme = DASHBOARD_THEME_CLASSES;\n\n @Input()\n possibleStylingHeader = WIDGET_HEADER_CLASSES;\n\n themeClassClick(value) {\n value = this.resetToDefault(value, this.themeClass, this.defaultThemeClass);\n this.themeClass = value;\n this.themeClassChange.emit(value);\n }\n\n headerClassClick(value) {\n value = this.resetToDefault(value, this.headerClass, this.defaultHeaderClass);\n this.headerClass = value;\n this.headerClassChange.emit(value);\n }\n\n private resetToDefault(value: string, compareTo: string, defaultValue: string) {\n if (defaultValue && value === compareTo) {\n value = defaultValue;\n }\n return value;\n }\n}\n","import { Input, Component } from '@angular/core';\n\n@Component({\n selector: 'c8y-widget-preview',\n templateUrl: './widget-preview.component.html'\n})\nexport class WidgetPreviewComponent {\n @Input()\n previewClasses: { [key: string]: boolean } = {\n 'dashboard-theme-light': true,\n 'panel-title-regular': true\n };\n\n @Input()\n tab: { name: string; icon: string };\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport {\n HOOK_ONCE_ROUTE,\n ViewContext,\n CoreModule,\n HOOK_ACTION\n} from '@c8y/ngx-components';\nimport { ContextDashboardService } from './context-dashboard.service';\nimport { DeviceDashboardGuard } from './device-dashboard.guard';\nimport { ContextDashboardComponent } from './context-dashboard.component';\nimport { GroupDashboardGuard } from './group-dashboard.guard';\nimport { CONTEXT_DASHBOARD_CONFIG, ContextDashboardConfig } from './context-dashboard.model';\nimport { DashboardDetailComponent } from './dashboard-detail.component';\nimport { WidgetConfigComponent } from './widget-config.component';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { DashboardActionsFactory } from './dashboard-actions.factory';\nimport { AppearanceSettingsComponent } from './appearance-settings.component';\nimport { WidgetPreviewComponent } from './widget-preview.component';\n\nconst defaultConfig = {\n allowFullscreen: true,\n widgetFilter({ data }) {\n return !(data && data.settings && data.settings.noNewWidgets);\n },\n routes: [\n {\n path: 'dashboard/:dashboardId',\n component: ContextDashboardComponent,\n canActivate: [DeviceDashboardGuard],\n context: ViewContext.Device\n },\n {\n path: 'dashboard/:dashboardId',\n component: ContextDashboardComponent,\n canActivate: [GroupDashboardGuard],\n context: ViewContext.Group\n }\n ]\n};\n\n@NgModule({\n declarations: [\n AppearanceSettingsComponent,\n ContextDashboardComponent,\n WidgetConfigComponent,\n WidgetPreviewComponent,\n DashboardDetailComponent\n ],\n imports: [CoreModule, TooltipModule, PopoverModule, BsDropdownModule.forRoot()],\n exports: [ContextDashboardComponent, WidgetConfigComponent],\n entryComponents: [ContextDashboardComponent, WidgetConfigComponent, DashboardDetailComponent]\n})\nexport class ContextDashboardModule {\n static config(config: ContextDashboardConfig = {}): ModuleWithProviders {\n return {\n ngModule: ContextDashboardModule,\n providers: [\n {\n provide: CONTEXT_DASHBOARD_CONFIG,\n useValue: { ...defaultConfig, ...config }\n },\n ContextDashboardService,\n DeviceDashboardGuard,\n GroupDashboardGuard,\n {\n provide: HOOK_ONCE_ROUTE,\n useValue: { ...defaultConfig, ...config }.routes,\n multi: true\n },\n {\n provide: HOOK_ACTION,\n useClass: DashboardActionsFactory,\n multi: true\n }\n ]\n };\n }\n}\n","import { Component } from '@angular/core';\nimport { gettext, Widget } from '@c8y/ngx-components';\n\n@Component({\n selector: 'c8y-cockpit-dashboard',\n templateUrl: './cockpit-dashboard.component.html'\n})\nexport class CockpitDashboardComponent {\n DEFAULT_HOME_WIDGETS = [\n {\n name: 'cockpit.welcome.widget',\n title: gettext(''),\n _x: 0,\n _y: 0,\n _height: 5,\n _width: 12,\n classes: { 'panel-title-hidden': true }\n },\n {\n name: 'Asset Alarms',\n title: gettext('Active, critical alarms'),\n _x: 0,\n _y: 5,\n _height: 4,\n _width: 6\n },\n {\n name: 'Recent Alarms',\n title: gettext('Recent alarms'),\n _x: 0,\n _y: 9,\n _height: 4,\n _width: 6\n },\n {\n name: 'Map',\n title: gettext('Map'),\n _x: 6,\n _y: 5,\n _height: 8,\n _width: 6\n }\n ] as Widget[];\n}\n","import { Component, Input, OnInit, OnDestroy } from '@angular/core';\nimport { gettext, DocsService, DocLink, NavigatorService } from '@c8y/ngx-components';\nimport { Router } from '@angular/router';\nimport { Subscription } from 'rxjs';\nimport { TenantService, ApplicationService, IApplication } from '@c8y/client';\n\n@Component({\n selector: 'c8y-welcome-to-cockpit',\n templateUrl: './welcome.component.html'\n})\nexport class WelcomeToCockpit implements OnInit, OnDestroy {\n @Input() config;\n welcomeMessage;\n quickLinks = [];\n\n private readonly REPORT_NODE: string = 'Reports';\n private readonly CONFIGURATION_NODE: string = 'Configuration';\n private readonly TRIAL: string = 'TRIAL';\n private tenantType: string;\n private navNodes: any[];\n private links: DocLink[];\n private docsSubscription: Subscription;\n private navSubscription: Subscription;\n\n constructor(\n private tenantService: TenantService,\n private docs: DocsService,\n private router: Router,\n private navigator: NavigatorService,\n private applicationService: ApplicationService\n ) {}\n\n async ngOnInit() {\n this.tenantType = await this.tenantService.currentTenantType();\n this.setMessage();\n this.navSubscription = this.navigator.items$.subscribe(nodes => {\n this.navNodes = nodes;\n });\n this.docsSubscription = this.docs.items$.subscribe(links => {\n this.links = links;\n });\n\n // <---TRIAL & REGULAR TENANT --->\n this.createConnectSmartphoneQuickLink();\n await this.createQuicklinkRegisterDevice();\n\n // <--- TRIAL TENANT --->\n if (this.tenantType === this.TRIAL) {\n this.createQuicklinkUserGuide();\n return;\n }\n\n // <--- REGULAR TENANT --->\n this.createQuicklinkAddGroup();\n this.createQuickLinkReports();\n this.createQuicklinkDataPointLibrary();\n this.createQuicklinkSmartRules();\n }\n\n ngOnDestroy() {\n if (this.docsSubscription && !this.docsSubscription.closed) {\n this.docsSubscription.unsubscribe();\n }\n\n if (this.navSubscription && !this.navSubscription.closed) {\n this.navSubscription.unsubscribe();\n }\n }\n\n private setMessage() {\n if (this.tenantType === this.TRIAL) {\n this.welcomeMessage = gettext(`\n The Cockpit application allows you to build IoT applications in minutes.\n To get started, connect any device to the platform.\n If you do not have an IoT device to hand, you can start by connecting your smartphone.\n Click below to be guided through the process.\n `);\n } else {\n this.welcomeMessage = gettext(`\n The Cockpit application provides you with options to manage\n and monitor Internet of Things assets and data from business perspective.\n `);\n }\n }\n\n private createQuicklinkAddGroup() {\n // comes from angularJS factory c8yQuickLinks\n const addGroup: Partial<DocLink> = this.links.find(link => link.label === 'Add group');\n if (addGroup) {\n this.quickLinks.push(addGroup);\n }\n }\n\n private createConnectSmartphoneQuickLink() {\n // Provider in SensorPhoneModule defines the\n // 'Connect smartphone' quicklink.\n const connectSmartphone = this.links.find(link => link.label === 'Connect smartphone');\n if (connectSmartphone) {\n this.quickLinks.push(connectSmartphone);\n }\n }\n\n private createQuickLinkReports() {\n const reports: Partial<DocLink> = {\n icon: 'c8y-reports',\n label: gettext('Reports'),\n url: '/export'\n };\n\n const reportsNode = this.findNavigatorNode(this.REPORT_NODE);\n if (reportsNode && reportsNode.show) {\n reports.click = () => {\n reportsNode.open = true;\n this.router.navigateByUrl(reports.url);\n };\n this.quickLinks.push(reports);\n }\n }\n\n private createQuicklinkDataPointLibrary() {\n const dataPointLib: Partial<DocLink> = {\n icon: 'c8y-data-points',\n label: gettext('Data point library'),\n url: '/datapointlibrary'\n };\n\n const configurationNode = this.findNavigatorNode(this.CONFIGURATION_NODE);\n if (configurationNode && configurationNode.show) {\n dataPointLib.click = () => {\n configurationNode.open = true;\n this.router.navigateByUrl(dataPointLib.url);\n };\n this.quickLinks.push(dataPointLib);\n }\n }\n\n private createQuicklinkSmartRules() {\n const smartRules: Partial<DocLink> = {\n icon: 'c8y-smart-rules',\n label: gettext('Smart rules'),\n url: '/rules'\n };\n const configurationNode = this.findNavigatorNode(this.CONFIGURATION_NODE);\n if (configurationNode && configurationNode.show) {\n smartRules.click = () => {\n configurationNode.open = true;\n this.router.navigateByUrl(smartRules.url);\n };\n this.quickLinks.push(smartRules);\n }\n }\n\n private async createQuicklinkRegisterDevice() {\n const { data } = await this.applicationService.listByUser();\n if (data) {\n const deviceManagement: IApplication = data.find(\n app => app.contextPath === 'devicemanagement'\n );\n if (deviceManagement) {\n const deviceMgmtUrl = this.applicationService.getHref(deviceManagement);\n const registerDevice: Partial<DocLink> = {\n icon: 'c8y-device-connect',\n label: gettext('Register device'),\n click: () => window.open(`${deviceMgmtUrl}/#/deviceregistration`, '_self')\n };\n this.quickLinks.push(registerDevice);\n }\n }\n }\n\n private createQuicklinkUserGuide() {\n const userGuide: Partial<DocLink> = {\n icon: 'c8y-user',\n label: gettext('User guide'),\n url: '/users-guide/getting-started',\n click: () => {\n const userGuideURL = this.docs.getUserGuideLink(userGuide.url) as string;\n window.open(userGuideURL);\n }\n };\n this.quickLinks.push(userGuide);\n }\n\n private findNavigatorNode(nodeRealName: string) {\n if (this.navNodes && this.navNodes.length > 0) {\n return this.navNodes.find((node: any) => node.realName === nodeRealName);\n }\n return undefined;\n }\n}\n","import { Component, Host } from '@angular/core';\r\nimport { ContextDashboardComponent } from '../context-dashboard.component';\r\n\r\n@Component({\r\n selector: 'c8y-legacy-welcome-widget',\r\n templateUrl: './legacy-welcome.component.html'\r\n})\r\nexport class LegacyWelcomeComponent {\r\n constructor(@Host() private dashboard: ContextDashboardComponent) {}\r\n\r\n restore() {\r\n this.dashboard.restore();\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\nimport { ContextDashboardModule } from './context-dashboard.module';\nimport { ContextDashboardComponent } from './context-dashboard.component';\nimport { DeviceDashboardGuard } from './device-dashboard.guard';\nimport { GroupDashboardGuard } from './group-dashboard.guard';\nimport {\n ViewContext,\n HOOK_NAVIGATOR_NODES,\n gettext,\n CoreModule,\n HOOK_COMPONENTS,\n DynamicComponentDefinition,\n QuickLinkModule,\n DocsModule\n} from '@c8y/ngx-components';\nimport { CockpitDashboardComponent } from './cockpit-dashboard.component';\nimport { ContextWidgetConfig } from './context-dashboard.model';\nimport { WelcomeToCockpit } from './welcome/welcome.component';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { LegacyWelcomeComponent } from './legacy-welcome/legacy-welcome.component';\n\n// import for the preview img to get into the build.\nlet previewImage = '';\ntry {\n // tslint:disable-next-line: no-var-requires\n previewImage = require('./welcome/img/welcome-widget-pr.png');\n} catch (ex) {\n // intended empty\n}\n\n@NgModule({\n entryComponents: [CockpitDashboardComponent, WelcomeToCockpit, LegacyWelcomeComponent],\n imports: [\n DocsModule,\n CoreModule,\n ContextDashboardModule.config({\n routes: [\n {\n path: 'dashboard/:dashboardId',\n component: ContextDashboardComponent,\n canActivate: [DeviceDashboardGuard],\n context: ViewContext.Device\n },\n {\n path: 'dashboard/:dashboardId',\n component: ContextDashboardComponent,\n canActivate: [GroupDashboardGuard],\n context: ViewContext.Group\n },\n {\n path: '',\n component: CockpitDashboardComponent\n }\n ]\n }),\n QuickLinkModule,\n TranslateModule\n ],\n declarations: [CockpitDashboardComponent, WelcomeToCockpit, LegacyWelcomeComponent],\n providers: [\n {\n provide: HOOK_NAVIGATOR_NODES,\n useValue: [{ label: gettext('Home'), icon: 'home', priority: 10000, path: '/' }],\n multi: true\n },\n {\n provide: HOOK_COMPONENTS,\n multi: true,\n useValue: [\n {\n id: 'cockpit.welcome.widget',\n label: gettext('Welcome to Cockpit'),\n description: gettext('Displays a welcome message for Cockpit'),\n component: WelcomeToCockpit,\n previewImage,\n data: {\n settings: {\n noNewWidgets: false,\n widgetDefaults: {\n _width: 12,\n _height: 6\n },\n ng1: {\n options: {\n noDeviceTarget: true,\n groupsSelectable: false\n }\n }\n }\n } as ContextWidgetConfig\n }\n ] as DynamicComponentDefinition[]\n },\n {\n provide: HOOK_COMPONENTS,\n multi: true,\n useValue: [\n {\n id: 'Cockpit Welcome',\n label: gettext('Welcome to Cockpit'),\n description: gettext('Displays a welcome message for Cockpit'),\n component: LegacyWelcomeComponent,\n data: {\n settings: {\n noNewWidgets: true,\n ng1: {\n options: {\n noDeviceTarget: true,\n groupsSelectable: false\n }\n }\n }\n } as ContextWidgetConfig\n }\n ] as DynamicComponentDefinition[]\n }\n ]\n})\nexport class CockpitDashboardModule {}\n"]}
1
+ {"version":3,"sources":["../../../../node_modules/tslib/tslib.es6.js","ng://@c8y/ngx-components/context-dashboard/context-dashboard.model.ts","ng://@c8y/ngx-components/context-dashboard/context-dashboard.service.ts","ng://@c8y/ngx-components/context-dashboard/device-dashboard.guard.ts","ng://@c8y/ngx-components/context-dashboard/dashboard-detail.component.ts","ng://@c8y/ngx-components/context-dashboard/widget.service.ts","ng://@c8y/ngx-components/context-dashboard/widget-config.component.ts","ng://@c8y/ngx-components/context-dashboard/context-dashboard.component.ts","ng://@c8y/ngx-components/context-dashboard/group-dashboard.guard.ts","ng://@c8y/ngx-components/context-dashboard/dashboard-actions.factory.ts","ng://@c8y/ngx-components/context-dashboard/appearance-settings.component.ts","ng://@c8y/ngx-components/context-dashboard/widget-preview.component.ts","ng://@c8y/ngx-components/context-dashboard/context-dashboard.module.ts","ng://@c8y/ngx-components/context-dashboard/cockpit-dashboard.component.ts","ng://@c8y/ngx-components/context-dashboard/welcome/welcome.component.ts","ng://@c8y/ngx-components/context-dashboard/legacy-welcome/legacy-welcome.component.ts","ng://@c8y/ngx-components/context-dashboard/cockpit-dashboard.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","__param","paramIndex","decorator","__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","ContextDashboardType","CONTEXT_DASHBOARD_CONFIG","InjectionToken","WIDGET_HEADER_CLASSES","gettext","class","description","WIDGET_CONTENT_CLASSES","DASHBOARD_THEME_CLASSES","ContextDashboardService","inventory","tabs","modal","translateService","router","user","appState","permissions","cache","Map","DEFAULT_PAGESIZE","FRAGMENT_NAME","DASHBOARD_ROUTE_PATH","INDEX_SPLIT","_formDisabled","create","dashboardCfg","contextOrName","id","dashboardType","Named","contextData","getDashboardTypeFromViewContext","dashboard","c8y_Dashboard","DeviceType","deviceTypeValue","fragmentKey","createFragmentKey","shouldSetGlobal","c8y_Global","Group","Device","childAdditionsCreate","_a","_b","data","detail","dashboardMO","set","update","cleanedDashboard","clean","pick","delete","msg","isDeviceType","confirm","instant","dashboardName","name","deviceType","Status","DANGER","ok","cancel","tabToRemove","Array","from","state","find","tab","path","endsWith","_this","remove","refresh","activateDashboards","route","types","dashboardId","params","getDashboard$","parent","pipe","tap","map","catchError","of","getTabs$","getNamedDashboardOrCreate","defaultWidgets","children","mapWidgets","throwIfEmpty","refreshTabs","isNamed","tabToUpdate","icon","priority","name_1","navigateToDashboard","test","url","navigate","relativeTo","getActivatedRoute","canEditDashboard","mo","canEdit","some","keys","prop","RegExp","getStyling","styleList","styleName","defaultValue","styling","style","widgets","keyBy","widget","String","Math","random","substr","dashboardIdOrName","get","dashboards","getContextDashboards","getNamedDashboard","cacheRefresh","getContextDashboards$","cacheDashboard","filter","has","setBaseContextRoute","removeDashboardMoProperty","createDashboardTab","toArray","requests","mergeAll","mergeMap","response","type","includes","currentContextRoute","dashboardCopy","cloneDeep","updateDashboard","forEach","child","componentTransformConfigWithContext","config","dashboardMo","_dashboard","jsonString","JSON","stringify","parse","list","fragmentType","pageSize","context","ViewContext","contextDashboardType","join","InventoryService","TabsService","ModalService","TranslateService","Router","UserService","AppStateService","Permissions","Injectable","DeviceDashboardGuard","contextDashboardService","canActivate","DashboardDetailComponent","iconList","themeClass","headerClass","possibleStyling","_save","_cancel","DEFAULT_DASHBOARD_MARGIN","DEFAULT_DASHBOARD_ICON","DEFAULT_DASHBOARD_PRIORITY","DEFAULT_DASHBOARD_NAME","icons","filteredIcons","ngAfterContentInit","defaultDashboardCfg","current","clone","setDashboardStyle","dashboardDetailForm","form","markAsDirty","save","classes","widgetClasses","close","hide","getDashboardPreviewStyle","cssClasses","selectIcon","updateFiltered","term","search_1","val","allClasses","split","BsModalRef","Inject","args","ICON_LIST","tslib_1.__decorate","ViewChild","static","Component","selector","template","tslib_1.__param","WidgetService","dynamicComponentService","moduleConfig","getWidgetDefinition","componentId","getById$","toPromise","getWidgetDefinitions","translatedComponents","cmp","sortBy","widgetFilter","DynamicComponentService","providedIn","WidgetConfigComponent","widgetService","mode","searchChange$","Subject","searchTerm","contentClass","defaultStyling","isUpgrade","components","selected","select","isEdit","searchSub","switchMap","event","iif","which","timer","subscribe","search","setDefaultStyle","_x","_y","_width","_height","widgetConfig","device","tslib_1.__assign","omit","title","getStyle","settings","widgetDefaults","formDisabled","composeWidgetConfig","componentLabel","searchResult","escapeRegExp","trim","resetSearch","undefined","changeMode","isPreview","isDashboardDefaultStyle","ngOnDestroy","unsubscribe","className","styles","cssClass","setClasses","selectedComponent","setting","applyTargetIfDeviceDashboard","hideTarget","ng1","options","noDeviceTarget","ContextDashboardComponent","alert","renderer","bsModal","childrenClasses","setTitle","disabled","canDelete","isLoading","ngOnInit","loadNamedDashboard","loadContextDashboard","applyDeviceTarget","dataSub","restore","onLoad","updateDashboardChildren","mappedChildren","componentToWidget","deleteDashboard","snapshot","segment","navigateByUrl","editDashboard","initialState","isNamedDashboard","show","ignoreBackdropClick","content","editWidget","change","source","x","width","height","component","addWidget","newWidget","mergeWidgetClasses","updateWidget","index","findIndex","isNew","mapLegacy","mappedWidget","splice","deleteWidget","removed","indexOf","setTimeout","DashboardChildChange","collapseUpAll","addDashboardClassToBody","addClass","document","removeDashboardClassFromBody","removeClass","toggleFreeze","toggleIsFrozenFlag","isFrozen","success","addServerFailure","ex_3","dashboardChildren","dashboardClasses","c8y-grid-dashboard","all","values","el","card","card-dashboard","widgetComponent","configComponent","templateUrl","configTemplateUrl","transformConfigWithContext","ActivatedRoute","AlertService","Renderer2","BsModalService","Input","HostBinding","host","GroupDashboardGuard","DashboardActionsFactory","activatedRoute","isEnabled","action","addDashboard","hasAnyRole","AppearanceSettingsComponent","themeClassChange","EventEmitter","headerClassChange","possibleStylingTheme","possibleStylingHeader","themeClassClick","resetToDefault","defaultThemeClass","emit","headerClassClick","defaultHeaderClass","compareTo","Output","viewProviders","provide","ControlContainer","useExisting","NgForm","WidgetPreviewComponent","previewClasses","dashboard-theme-light","panel-title-regular","defaultConfig","allowFullscreen","noNewWidgets","routes","ContextDashboardModule","ngModule","ContextDashboardModule_1","providers","useValue","HOOK_ONCE_ROUTE","multi","HOOK_ACTION","useClass","NgModule","declarations","imports","CoreModule","TooltipModule","PopoverModule","BsDropdownModule","forRoot","exports","entryComponents","CockpitDashboardComponent","DEFAULT_HOME_WIDGETS","panel-title-hidden","WelcomeToCockpit","tenantService","docs","navigator","applicationService","quickLinks","REPORT_NODE","CONFIGURATION_NODE","TRIAL","currentTenantType","tenantType","setMessage","navSubscription","items$","nodes","navNodes","docsSubscription","links","createConnectSmartphoneQuickLink","createQuicklinkRegisterDevice","createQuicklinkUserGuide","createQuicklinkAddGroup","createQuickLinkReports","createQuicklinkDataPointLibrary","createQuicklinkSmartRules","closed","welcomeMessage","addGroup","link","connectSmartphone","reports","reportsNode","findNavigatorNode","click","open","dataPointLib","configurationNode","smartRules","listByUser","deviceManagement","app","contextPath","deviceMgmtUrl_1","getHref","registerDevice","window","userGuide","userGuideURL","getUserGuideLink","nodeRealName","node","realName","TenantService","DocsService","NavigatorService","ApplicationService","LegacyWelcomeComponent","Host","previewImage","require","ex","ɵ1","groupsSelectable","ɵ2","CockpitDashboardModule","DocsModule","QuickLinkModule","TranslateModule","HOOK_NAVIGATOR_NODES","ɵ0","HOOK_COMPONENTS"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\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 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) : new P(function (resolve) { resolve(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 __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n 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}\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","import { InjectionToken } from '@angular/core';\nimport { IManagedObject } from '@c8y/client';\nimport { Widget, DynamicComponentDefinition, Route, gettext } from '@c8y/ngx-components';\n\nexport const CONTEXT_DASHBOARD_CONFIG = new InjectionToken<any>('ContextDashboardConfig');\n\nexport interface ContextDashboardConfig {\n widgetFilter?: (component: DynamicComponentDefinition) => boolean;\n allowFullscreen?: boolean;\n routes?: Route[];\n}\n\nexport interface ContextWidgetConfig {\n /**\n * Settings that define how the default config component is\n * displayed.\n */\n settings?: {\n /**\n * Avoids to show the widget in the \"add widget\" modal\n */\n noNewWidgets?: boolean;\n ng1?: {\n options: {\n /**\n * Set this to false, to hide the device/group selector\n * @deprecated: This is currently only implemented in angularjs and will be exported to a separate component.\n */\n noDeviceTarget?: boolean;\n /**\n * Set this to false to only select devices\n * @deprecated: This is currently only implemented in angularjs and will be exported to a separate component.\n */\n groupsSelectable?: boolean;\n };\n /**\n * The context from the device selector.\n */\n context?: {\n id?: string;\n name?: string;\n };\n };\n /**\n * Any other information you want to pass to the config template\n */\n [key: string]: any;\n };\n /**\n * The selected device or group (note: naming is inconsistent as group was added later\n * but must stay for already implemented widgets)\n */\n device?: {\n id?: string;\n name?: string;\n };\n /**\n * Any other information that should be stored here.\n */\n [key: string]: any;\n}\n\nexport interface ContextDashboardManagedObject extends IManagedObject {\n c8y_Dashboard?: ContextDashboard;\n}\n\nexport interface ContextDashboard {\n icon?: string;\n name?: string;\n priority?: number;\n deviceType?: boolean;\n deviceTypeValue?: string;\n isFrozen?: boolean;\n classes?: { [key: string]: boolean };\n widgetClasses?: { [key: string]: boolean };\n widgetMargin?: number;\n translateWidgetTitle?: boolean;\n global?: boolean;\n children?: {\n [id: string]: Widget;\n };\n}\n\nexport enum ContextDashboardType {\n Device = 'device',\n DeviceType = 'type',\n Group = 'group',\n Named = 'name'\n}\n\nexport const WIDGET_HEADER_CLASSES = [\n {\n label: gettext('Regular`style`'),\n class: 'panel-title-regular',\n description: gettext('The widget has no border between header and content.')\n },\n {\n label: gettext('Border`style`'),\n class: 'panel-title-border',\n description: gettext('The widget has a small separation border between header and content.')\n },\n {\n label: gettext('Overlay`style`'),\n class: 'panel-title-overlay',\n description: gettext('The widget content overlays the header.')\n },\n {\n label: gettext('Hidden`style`'),\n class: 'panel-title-hidden',\n description: gettext('The widget header is not shown.')\n }\n];\n\nexport const WIDGET_CONTENT_CLASSES = [\n {\n label: gettext('Light`style`'),\n class: 'panel-content-light',\n description: gettext('The widget is styled with a light background and has low contrast.')\n },\n {\n label: gettext('Dark`style`'),\n class: 'panel-content-dark',\n description: gettext('The widget is styled with a dark background and has high contrast.')\n },\n {\n label: gettext('Transparent`style`'),\n class: 'panel-content-transparent',\n description: gettext(\n 'The widget is styled with a transparent background and therefore is border-less.'\n )\n },\n {\n label: gettext('Branded`style`'),\n class: 'panel-content-branded',\n description: gettext('The widget is styled with the main brand color.')\n }\n];\n\nexport const DASHBOARD_THEME_CLASSES = [\n {\n label: gettext('Light`theme`'),\n class: 'dashboard-theme-light',\n description: gettext('The dashboard is styled with a light background and has low contrast.')\n },\n {\n label: gettext('Dark`theme`'),\n class: 'dashboard-theme-dark',\n description: gettext('The dashboard is styled with a dark background and has high contrast.')\n },\n {\n label: gettext('Transparent`theme`'),\n class: 'dashboard-theme-transparent',\n description: gettext(\n 'The dashboard is styled with a transparent background and therefore is border-less.'\n )\n },\n {\n label: gettext('Branded`theme`'),\n class: 'dashboard-theme-branded',\n description: gettext('The dashboard is styled with the main brand color.')\n }\n];\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, Router } from '@angular/router';\nimport { IManagedObject, InventoryService, IResultList, UserService } from '@c8y/client';\nimport {\n AppStateService,\n getActivatedRoute,\n gettext,\n ModalService,\n Status,\n TabsService,\n ViewContext,\n Widget,\n Permissions\n} from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { assign, pick, some, keys, keyBy, has, get, forEach, cloneDeep } from 'lodash-es';\nimport { from, of } from 'rxjs';\nimport {\n catchError,\n filter,\n map,\n mergeAll,\n mergeMap,\n tap,\n toArray,\n throwIfEmpty\n} from 'rxjs/operators';\nimport {\n ContextDashboard,\n ContextDashboardManagedObject,\n ContextDashboardType\n} from './context-dashboard.model';\n\n@Injectable()\nexport class ContextDashboardService {\n private cache = new Map<string, ContextDashboardManagedObject>();\n private readonly DEFAULT_PAGESIZE = 1000;\n private readonly FRAGMENT_NAME = 'c8y_Dashboard';\n private readonly DASHBOARD_ROUTE_PATH = 'dashboard';\n private readonly INDEX_SPLIT = '!';\n private currentContextRoute: string;\n private _formDisabled = true;\n\n get formDisabled() {\n return this._formDisabled;\n }\n\n set formDisabled(value) {\n this._formDisabled = value;\n }\n\n constructor(\n private inventory: InventoryService,\n private tabs: TabsService,\n private modal: ModalService,\n private translateService: TranslateService,\n private router: Router,\n private user: UserService,\n private appState: AppStateService,\n private permissions: Permissions\n ) {}\n\n async create(dashboardCfg: ContextDashboard, contextOrName: { contextData: any } | string) {\n let id;\n let dashboardType;\n if (typeof contextOrName === 'string') {\n id = contextOrName as string;\n dashboardType = ContextDashboardType.Named;\n } else {\n id = contextOrName.contextData.id as string;\n dashboardType = this.getDashboardTypeFromViewContext(dashboardCfg, contextOrName);\n }\n\n const dashboard: Partial<IManagedObject> = {};\n assign(dashboard, { c8y_Dashboard: dashboardCfg });\n\n const value =\n dashboardType === ContextDashboardType.DeviceType ? dashboardCfg.deviceTypeValue : id;\n\n const fragmentKey = this.createFragmentKey(dashboardType, value);\n dashboard[fragmentKey] = {};\n\n if (this.shouldSetGlobal(dashboard)) {\n assign(dashboard, { c8y_Global: {} });\n }\n const { data } = dashboardType === ContextDashboardType.Group || dashboardType === ContextDashboardType.Device\n ? await this.inventory.childAdditionsCreate(dashboard, id)\n : await this.inventory.create(dashboard);\n return data as ContextDashboardManagedObject;\n }\n\n async detail(dashboardMO: ContextDashboardManagedObject) {\n const { data } = await this.inventory.detail(dashboardMO);\n this.cache.set(dashboardMO.id, data);\n return data;\n }\n\n async update(dashboard: ContextDashboardManagedObject) {\n const cleanedDashboard = this.clean(pick(dashboard, [this.FRAGMENT_NAME, 'id']));\n cleanedDashboard.c8y_Global = this.shouldSetGlobal(dashboard);\n const { data } = await this.inventory.update(cleanedDashboard);\n this.cache.set(dashboard.id, data);\n return data;\n }\n\n async delete(dashboard: ContextDashboardManagedObject) {\n try {\n let msg = gettext(\n `You are about to delete the dashboard \"{{ dashboardName }}\". Do you want to proceed?`\n );\n if (this.isDeviceType(dashboard)) {\n msg = gettext(\n `You are about to delete the dashboard \"{{ dashboardName }}\" from all devices of the type \"{{ deviceType }}\".\n Do you want to proceed?`\n );\n }\n await this.modal.confirm(\n gettext('Delete dashboard'),\n this.translateService.instant(msg, {\n dashboardName: dashboard.c8y_Dashboard.name,\n deviceType: dashboard.c8y_Dashboard.deviceTypeValue\n }),\n Status.DANGER,\n {\n ok: gettext('Delete'),\n cancel: gettext('Cancel')\n }\n );\n await this.inventory.delete(dashboard);\n const tabToRemove = Array.from(this.tabs.state).find(tab =>\n tab.path.endsWith(`${this.DASHBOARD_ROUTE_PATH}/${dashboard.id}`)\n );\n this.tabs.remove(tabToRemove);\n this.tabs.refresh();\n } catch (ex) {\n // intended empty\n }\n }\n\n activateDashboards(route: ActivatedRouteSnapshot, types: ContextDashboardType[]) {\n const { dashboardId } = route.params;\n if (dashboardId) {\n return this.getDashboard$(dashboardId, types, route.parent.data.contextData).pipe(\n tap(dashboard => {\n route.data = { dashboard };\n }),\n map(() => true),\n catchError(() => {\n return of(false);\n })\n );\n }\n\n return this.getTabs$(route.data.contextData, types);\n }\n\n getNamedDashboardOrCreate(name: string, defaultWidgets: Widget[]) {\n const children = this.mapWidgets(defaultWidgets);\n return this.getDashboard$(name, [ContextDashboardType.Named]).pipe(\n throwIfEmpty(),\n catchError(() =>\n from(\n this.create({children}, name)\n )\n )\n );\n }\n\n async refreshTabs(dashboardMO: ContextDashboardManagedObject) {\n if (!this.isNamed(dashboardMO)) {\n const tabToUpdate = Array.from(this.tabs.state).find(tab =>\n tab.path.endsWith(`${this.DASHBOARD_ROUTE_PATH}/${dashboardMO.id}`)\n );\n\n const data = await this.detail(dashboardMO);\n if (tabToUpdate) {\n const { icon, priority, name } = data.c8y_Dashboard;\n tabToUpdate.icon = icon;\n tabToUpdate.priority = priority;\n tabToUpdate.label = name;\n }\n this.tabs.refresh();\n }\n }\n\n async navigateToDashboard(dashboardMO: ContextDashboardManagedObject) {\n if (/dashboard/.test(this.router.url)) {\n this.router.navigate(['..', dashboardMO.id], {\n relativeTo: getActivatedRoute(this.router)\n });\n } else {\n this.router.navigate(['..', 'dashboard', dashboardMO.id], {\n relativeTo: getActivatedRoute(this.router)\n });\n }\n }\n\n canEditDashboard(mo) {\n return this.permissions.canEdit(['ROLE_INVENTORY_ADMIN', 'ROLE_INVENTORY_CREATE'], mo);\n }\n\n isNamed(dashboard: Partial<ContextDashboardManagedObject>) {\n return some(keys(dashboard), prop =>\n new RegExp(\n `^${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${ContextDashboardType.Named}${this.INDEX_SPLIT}`\n ).test(prop)\n );\n }\n\n isDeviceType(dashboard: Partial<ContextDashboardManagedObject>) {\n return some(keys(dashboard), prop =>\n new RegExp(\n `^${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${ContextDashboardType.DeviceType}${\n this.INDEX_SPLIT\n }`\n ).test(prop)\n );\n }\n\n getStyling(styleList, styleName, defaultValue) {\n const styling = styleList.find(style => style && new RegExp(styleName, 'i').test(style.class));\n return styling ? styling.class : defaultValue;\n }\n\n mapWidgets(widgets: Widget[]) {\n return keyBy(\n widgets.map(widget => {\n widget.id = String(Math.random()).substr(2);\n return widget;\n }),\n 'id'\n );\n }\n\n private getDashboard$(\n dashboardIdOrName,\n dashboardType: ContextDashboardType[],\n mo?: IManagedObject\n ) {\n const cache = this.cache.get(dashboardIdOrName);\n\n const dashboards = mo\n ? this.getContextDashboards(mo, dashboardType)\n : [this.getNamedDashboard(dashboardIdOrName)];\n\n const cacheRefresh = this.getContextDashboards$(dashboards).pipe(\n tap((dashboard) => this.cacheDashboard(dashboard)),\n filter(\n dashboard =>\n dashboard.id === dashboardIdOrName ||\n has(\n dashboard,\n `${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${ContextDashboardType.Named}${\n this.INDEX_SPLIT\n }${dashboardIdOrName}`\n )\n )\n );\n return cache ? of(cache) : cacheRefresh;\n }\n\n private getTabs$(mo: ContextDashboardManagedObject, dashboardType: ContextDashboardType[]) {\n const dashboards = this.getContextDashboards(mo, dashboardType);\n this.setBaseContextRoute(mo, dashboardType);\n\n return this.getContextDashboards$(dashboards).pipe(\n map(dashboard => this.removeDashboardMoProperty(dashboard)),\n tap(dashboard => this.cacheDashboard(dashboard)),\n map(dashboard => this.createDashboardTab(dashboard)),\n toArray()\n );\n }\n\n private getContextDashboards$(requests: Array<Promise<IResultList<IManagedObject>>>) {\n return from(requests).pipe(\n mergeAll(),\n mergeMap(response => response.data as ContextDashboardManagedObject[]));\n }\n\n private setBaseContextRoute(mo: IManagedObject, dashboardType: ContextDashboardType[]) {\n const type = dashboardType.includes(ContextDashboardType.Device)\n ? ContextDashboardType.Device\n : ContextDashboardType.Group;\n this.currentContextRoute = `${type}/${mo.id}`;\n }\n\n /**\n * Cleans already corrupted dashboards from dashboardMo property.\n * Added to fix dashboards on the cloud instance (eu-latest).\n * @deprecated This is going to be removed after 1007.7.0.\n */\n private removeDashboardMoProperty(\n dashboard: ContextDashboardManagedObject\n ): ContextDashboardManagedObject {\n const dashboardCopy = cloneDeep(dashboard);\n const children = get(dashboardCopy, 'c8y_Dashboard.children');\n let updateDashboard = false;\n\n forEach(children, child => {\n if (get(child, 'componentTransformConfigWithContext')) {\n delete child.componentTransformConfigWithContext;\n updateDashboard = true;\n }\n if (get(child, 'config.dashboardMo')) {\n delete child.config.dashboardMo;\n updateDashboard = true;\n }\n });\n\n if (updateDashboard) {\n this.update(dashboardCopy);\n }\n return dashboardCopy;\n }\n\n private cacheDashboard(dashboard: ContextDashboardManagedObject) {\n this.cache.set(dashboard.id, dashboard);\n }\n\n private createDashboardTab(dashboard: ContextDashboardManagedObject) {\n const { c8y_Dashboard: _dashboard, id } = dashboard;\n return ({\n icon: _dashboard.icon,\n path: `${this.DASHBOARD_ROUTE_PATH}/${id}`,\n label: _dashboard.name,\n priority: _dashboard.priority\n });\n }\n\n private clean(dashboard) {\n const jsonString = JSON.stringify(dashboard, (key, value) => {\n if (key === '$$hashKey' || key === 'klasses') {\n return undefined;\n }\n\n return value;\n });\n return JSON.parse(jsonString);\n }\n\n private getNamedDashboard(name: string) {\n return this.inventory.list({\n fragmentType: `${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${ContextDashboardType.Named}${\n this.INDEX_SPLIT\n }${name}`,\n pageSize: 1\n });\n }\n\n private getContextDashboards(mo: IManagedObject, dashboardType: ContextDashboardType[]) {\n return dashboardType.map((type: ContextDashboardType) =>\n this.inventory.list({\n fragmentType: `${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${type}${this.INDEX_SPLIT}${\n type === ContextDashboardType.DeviceType ? mo.type : mo.id\n }`,\n pageSize: this.DEFAULT_PAGESIZE\n })\n );\n }\n\n private getDashboardTypeFromViewContext(dashboardCfg, context) {\n let dashboardType;\n if (context.context === ViewContext.Device) {\n dashboardType = dashboardCfg.deviceType\n ? ContextDashboardType.DeviceType\n : ContextDashboardType.Device;\n }\n if (context.context === ViewContext.Group) {\n dashboardType = ContextDashboardType.Group;\n }\n return dashboardType;\n }\n\n private createFragmentKey(contextDashboardType: ContextDashboardType, value: string) {\n return [this.FRAGMENT_NAME, contextDashboardType, value].join(this.INDEX_SPLIT);\n }\n\n private shouldSetGlobal(dashboard: Partial<ContextDashboardManagedObject>) {\n if (this.isNamed(dashboard) || this.isDeviceType(dashboard)) {\n return {};\n }\n return null;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\nimport { ContextDashboardType } from './context-dashboard.model';\nimport { ContextDashboardService } from './context-dashboard.service';\n\n@Injectable()\nexport class DeviceDashboardGuard {\n constructor(\n private contextDashboardService: ContextDashboardService\n ) {}\n\n canActivate(route: ActivatedRouteSnapshot) {\n return this.contextDashboardService.activateDashboards(route, [\n ContextDashboardType.Device,\n ContextDashboardType.DeviceType\n ]);\n }\n}\n","import { Component, Inject, ViewChild } from '@angular/core';\nimport { ICON_LIST } from '@c8y/ngx-components';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport {\n ContextDashboard,\n DASHBOARD_THEME_CLASSES,\n WIDGET_HEADER_CLASSES\n} from './context-dashboard.model';\nimport { clone } from 'lodash-es';\nimport { ContextDashboardService } from './context-dashboard.service';\nimport { NgForm } from '@angular/forms';\n\n@Component({\n selector: 'c8y-dashboard-detail',\n templateUrl: './dashboard-detail.component.html'\n})\nexport class DashboardDetailComponent {\n @ViewChild('dashboardDetailForm', { static: true }) dashboardDetailForm: NgForm;\n dashboard: ContextDashboard;\n current: ContextDashboard;\n deviceType: string;\n isNamedDashboard: boolean;\n icons: string[];\n filteredIcons: string[];\n styling = {\n themeClass: 'dashboard-theme-light',\n headerClass: 'panel-title-regular'\n };\n possibleStyling = { DASHBOARD_THEME_CLASSES, WIDGET_HEADER_CLASSES };\n result: Promise<ContextDashboard> = new Promise((resolve, reject) => {\n this._save = resolve;\n this._cancel = reject;\n });\n\n readonly DEFAULT_DASHBOARD_MARGIN = 12;\n readonly DEFAULT_DASHBOARD_ICON = 'th';\n readonly DEFAULT_DASHBOARD_PRIORITY = 10000;\n readonly DEFAULT_DASHBOARD_NAME = 'Dashboard';\n\n private _save;\n private _cancel;\n\n constructor(\n private modal: BsModalRef,\n @Inject(ICON_LIST) iconList: string[],\n private contextDashboardService: ContextDashboardService\n ) {\n this.icons = iconList;\n this.filteredIcons = iconList;\n }\n\n ngAfterContentInit(): void {\n const defaultDashboardCfg = {\n name: this.DEFAULT_DASHBOARD_NAME,\n priority: this.DEFAULT_DASHBOARD_PRIORITY,\n icon: this.DEFAULT_DASHBOARD_ICON,\n deviceTypeValue: this.deviceType\n };\n\n if (this.dashboard) {\n this.current = clone(this.dashboard);\n this.setDashboardStyle();\n } else {\n this.dashboard = defaultDashboardCfg;\n this.dashboardDetailForm.form.markAsDirty();\n }\n }\n\n save() {\n this.dashboard.classes = { [this.styling.themeClass]: true };\n this.dashboard.widgetClasses = { [this.styling.headerClass]: true };\n this._save(this.dashboard);\n }\n\n close() {\n this._cancel();\n this.modal.hide();\n }\n\n getDashboardPreviewStyle() {\n const cssClasses = {};\n cssClasses[this.styling.headerClass] = true;\n cssClasses[this.styling.themeClass] = true;\n return cssClasses;\n }\n\n selectIcon(icon) {\n this.dashboard.icon = icon;\n this.dashboardDetailForm.form.markAsDirty();\n }\n\n updateFiltered(term: string) {\n if (term) {\n const search = new RegExp(term, 'i');\n this.filteredIcons = this.icons.filter(val => search.test(val));\n } else {\n this.filteredIcons = this.icons;\n }\n }\n\n private setDashboardStyle() {\n const allClasses = {\n ...this.dashboard.classes,\n ...this.dashboard.widgetClasses\n };\n\n const styles = Object.keys(allClasses).map(c => c.split('-').pop());\n styles.forEach(styleName => {\n this.styling.themeClass = this.contextDashboardService.getStyling(\n DASHBOARD_THEME_CLASSES,\n styleName,\n this.styling.themeClass\n );\n this.styling.headerClass = this.contextDashboardService.getStyling(\n WIDGET_HEADER_CLASSES,\n styleName,\n this.styling.headerClass\n );\n });\n }\n}\n","import { Injectable, Inject } from '@angular/core';\nimport { sortBy, cloneDeep } from 'lodash-es';\nimport { DynamicComponentService, DynamicComponentDefinition } from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ContextDashboardConfig, CONTEXT_DASHBOARD_CONFIG } from './context-dashboard.model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class WidgetService {\n constructor(\n private dynamicComponentService: DynamicComponentService,\n private translateService: TranslateService,\n @Inject(CONTEXT_DASHBOARD_CONFIG) public moduleConfig: ContextDashboardConfig\n ) {}\n\n async getWidgetDefinition(componentId): Promise<DynamicComponentDefinition> {\n return this.dynamicComponentService.getById$(componentId).toPromise();\n }\n\n getWidgetDefinitions() {\n const translatedComponents = Array.from(this.dynamicComponentService.state).map(cmp => ({\n ...cmp,\n label: this.translateService.instant(cmp.label)\n }));\n\n return cloneDeep(sortBy(translatedComponents, 'label').filter(this.moduleConfig.widgetFilter));\n }\n}\n","import { Component, OnDestroy } from '@angular/core';\nimport { DynamicComponentDefinition, Widget } from '@c8y/ngx-components';\nimport { clone, cloneDeep, escapeRegExp, get, omit } from 'lodash-es';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { iif, Subject, Subscription, timer } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\nimport {\n ContextDashboardManagedObject,\n WIDGET_CONTENT_CLASSES,\n WIDGET_HEADER_CLASSES,\n ContextWidgetConfig\n} from './context-dashboard.model';\nimport { WidgetService } from './widget.service';\nimport { ContextDashboardService } from './context-dashboard.service';\n\n@Component({\n selector: 'c8y-widget-config',\n templateUrl: './widget-config.component.html'\n})\nexport class WidgetConfigComponent implements OnDestroy {\n mode: 'config' | 'select' | 'style' = 'select';\n searchResult: DynamicComponentDefinition[];\n components: DynamicComponentDefinition[];\n selected: DynamicComponentDefinition;\n searchChange$ = new Subject();\n searchTerm = '';\n context: any;\n componentLabel: string;\n mo: ContextDashboardManagedObject;\n styling = {\n headerClass: 'panel-title-regular',\n contentClass: 'panel-content-light'\n };\n defaultStyling = {\n headerClass: 'panel-title-regular',\n contentClass: 'panel-content-light'\n };\n possibleStyling = { WIDGET_HEADER_CLASSES, WIDGET_CONTENT_CLASSES };\n current: any;\n widgetConfig: ContextWidgetConfig;\n isUpgrade = false;\n\n get isEdit() {\n return !!this.current;\n }\n\n result: Promise<Widget> = new Promise((resolve, reject) => {\n this._save = resolve;\n this._cancel = reject;\n });\n\n private searchSub: Subscription;\n private _save;\n private _cancel;\n\n constructor(\n private widgetService: WidgetService,\n private modal: BsModalRef,\n public contextDashboardService: ContextDashboardService\n ) {}\n\n ngAfterContentInit(): void {\n this.components = this.widgetService.getWidgetDefinitions();\n\n if (this.selected) {\n this.current = clone(this.selected);\n this.select(this.selected, this.isEdit ? 'config' : 'select');\n }\n\n this.searchSub = this.searchChange$\n .pipe(\n switchMap((event: KeyboardEvent) => iif(() => event.which !== 13, timer(200), timer(10)))\n )\n .subscribe(() => {\n this.search();\n });\n\n if (this.mo.c8y_Dashboard.classes) {\n this.styling = this.setDefaultStyle({\n ...this.mo.c8y_Dashboard.classes,\n ...this.mo.c8y_Dashboard.widgetClasses,\n ...(this.isEdit ? this.current.data.classes : {})\n });\n this.defaultStyling = this.setDefaultStyle({\n ...this.mo.c8y_Dashboard.classes,\n ...this.mo.c8y_Dashboard.widgetClasses\n });\n }\n }\n\n save() {\n const { _x, _y, _width, _height } = this.selected.data;\n\n if (this.widgetConfig && this.widgetConfig.device) {\n const { id, name } = this.widgetConfig.device;\n this.widgetConfig.device = { id, name };\n }\n\n const widget = {\n _x,\n _y,\n _width,\n _height,\n config: omit(this.widgetConfig, 'settings'),\n title: this.selected.data.title,\n componentId: this.selected.id,\n id: this.isEdit ? this.current.data.id : String(Math.random()).substr(2),\n classes: this.getStyle(),\n ...(!this.isEdit ? this.widgetConfig.settings.widgetDefaults : {})\n } as Widget;\n\n this._save(widget);\n }\n\n select(cmp, mode: 'select' | 'config' = 'config') {\n cmp.data = cmp.data || {};\n this.selected = cmp;\n\n this.isUpgrade = !!get(cmp, 'data.settings.upgrade');\n this.contextDashboardService.formDisabled = this.isUpgrade;\n\n if (this.isEdit) {\n const { _x, _y, _width, _height, classes, title } = this.current.data;\n this.selected.data = { ...this.selected.data, _x, _y, _width, _height, classes, title };\n }\n\n this.widgetConfig = cloneDeep(this.composeWidgetConfig(this.selected, this.context));\n\n this.selected.data.title = this.selected.data.title || cmp.label;\n this.componentLabel = cmp.label;\n this.mode = mode;\n }\n\n search() {\n if (this.searchTerm.length > 0) {\n this.searchResult = this.components.filter(cmp =>\n new RegExp(escapeRegExp(this.searchTerm.trim()), 'i').test(cmp.label)\n );\n } else {\n this.resetSearch();\n }\n }\n\n resetSearch() {\n this.searchTerm = '';\n this.searchResult = undefined;\n }\n\n changeMode(mode: 'config' | 'select' | 'style') {\n this.mode = mode;\n }\n\n close() {\n this._cancel();\n this.modal.hide();\n }\n\n getStyle(isPreview = false) {\n const cssClasses = {};\n if (isPreview || !this.isDashboardDefaultStyle(this.styling.headerClass)) {\n cssClasses[this.styling.headerClass] = true;\n }\n\n if (isPreview || !this.isDashboardDefaultStyle(this.styling.contentClass)) {\n cssClasses[this.styling.contentClass] = true;\n }\n\n if (isPreview) {\n cssClasses[`dashboard-theme-${this.defaultStyling.contentClass.split('-').pop()}`] = true;\n }\n\n return cssClasses;\n }\n\n ngOnDestroy(): void {\n this.contextDashboardService.formDisabled = true;\n if (this.searchSub) {\n this.searchSub.unsubscribe();\n }\n }\n\n private isDashboardDefaultStyle(className) {\n const allClasses = {\n ...this.mo.c8y_Dashboard.classes,\n ...this.mo.c8y_Dashboard.widgetClasses\n };\n const styles = Object.keys(allClasses).map(cssClass => ({ class: cssClass }));\n const style = this.contextDashboardService.getStyling(\n styles,\n className.split('-').pop(),\n undefined\n );\n return !!style;\n }\n\n private setDefaultStyle(setClasses) {\n let contentClass = this.styling.contentClass;\n let headerClass = this.styling.headerClass;\n\n const styles = Object.keys(setClasses).map(c => c.split('-').pop());\n styles.forEach(styleName => {\n contentClass = this.contextDashboardService.getStyling(\n WIDGET_CONTENT_CLASSES,\n styleName,\n contentClass\n );\n headerClass = this.contextDashboardService.getStyling(\n WIDGET_HEADER_CLASSES,\n styleName,\n headerClass\n );\n });\n\n return { headerClass, contentClass };\n }\n\n private composeWidgetConfig(selectedComponent, context = {}) {\n const setting = {\n settings: {\n ...selectedComponent.data.settings,\n ...get(selectedComponent.data.settings, 'ng1.options'),\n ...get(selectedComponent.data, 'ng1.options'),\n context,\n dashboardMo: this.mo.c8y_Dashboard\n },\n ...selectedComponent.data.config\n } as ContextWidgetConfig;\n return this.applyTargetIfDeviceDashboard(setting);\n }\n\n private applyTargetIfDeviceDashboard(widgetConfig: ContextWidgetConfig) {\n const isDeviceType = this.contextDashboardService.isDeviceType(this.mo);\n\n if (isDeviceType) {\n widgetConfig.settings.hideTarget = isDeviceType;\n\n const noDeviceTarget = widgetConfig.settings.ng1\n ? widgetConfig.settings.ng1.options.noDeviceTarget\n : widgetConfig.settings.noDeviceTarget;\n\n if (!noDeviceTarget) {\n widgetConfig.device = {\n id: this.context.id,\n name: this.context.name\n };\n }\n }\n return widgetConfig;\n }\n}\n","import { Component, HostBinding, Inject, Input, OnDestroy, OnInit, Renderer2 } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport {\n AlertService,\n DashboardChildChange,\n DashboardChildComponent,\n DashboardSettings,\n DynamicComponentDefinition,\n gettext,\n Widget,\n WidgetChange\n} from '@c8y/ngx-components';\nimport { cloneDeep, findIndex, get, keyBy, omit, values } from 'lodash-es';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { Subscription } from 'rxjs';\nimport {\n ContextDashboard,\n ContextDashboardConfig,\n ContextDashboardManagedObject,\n CONTEXT_DASHBOARD_CONFIG,\n WIDGET_HEADER_CLASSES\n} from './context-dashboard.model';\nimport { ContextDashboardService } from './context-dashboard.service';\nimport { DashboardDetailComponent } from './dashboard-detail.component';\nimport { WidgetConfigComponent } from './widget-config.component';\nimport { WidgetService } from './widget.service';\n\n/**\n * The context dashboard is a dashboard which resolves it data from the current context (device or group)\n * it is displayed on. It usually uses the route.data for it, but you can pass\n * a different managedObject to the [mo] input parameter to change that behavior.\n */\n@Component({\n selector: 'c8y-context-dashboard',\n templateUrl: './context-dashboard.component.html',\n host: {\n style: `\n display: block;\n `,\n class: 'dashboard c8y-grid-dashboard'\n }\n})\nexport class ContextDashboardComponent implements OnInit, OnDestroy {\n @Input()\n name: string;\n @Input()\n childrenClasses = '';\n @Input()\n context: any;\n @Input()\n setTitle: boolean = false;\n @Input()\n disabled: boolean = false;\n @Input()\n defaultWidgets: Widget[] = [];\n @Input()\n canDelete: boolean = true;\n @Input()\n isLoading: boolean = true;\n\n @HostBinding('class')\n class = '';\n\n widgets: Widget[] = [];\n mo: ContextDashboardManagedObject;\n dashboard: ContextDashboard;\n\n private dataSub: Subscription;\n\n constructor(\n private route: ActivatedRoute,\n private router: Router,\n private contextDashboardService: ContextDashboardService,\n private alert: AlertService,\n private renderer: Renderer2,\n @Inject(CONTEXT_DASHBOARD_CONFIG) public moduleConfig: ContextDashboardConfig,\n private widgetService: WidgetService,\n private bsModal: BsModalService\n ) {}\n\n ngOnInit() {\n if (!this.name) {\n this.loadContextDashboard();\n return;\n }\n this.loadNamedDashboard();\n }\n\n /**\n * Applies the current context to the widget\n * @param widget The widget to apply the context to.\n */\n applyDeviceTarget(widget) {\n if (widget.config.device) {\n widget.config.device = { id: this.context.id, name: this.context.name };\n }\n }\n\n /**\n * Removes the route listener.\n */\n ngOnDestroy(): void {\n if (this.dataSub) {\n this.dataSub.unsubscribe();\n }\n }\n\n /**\n * Restores the dashboard widgets to the default widgets.\n */\n async restore() {\n this.isLoading = true;\n this.mo.c8y_Dashboard.children = this.contextDashboardService.mapWidgets(this.defaultWidgets);\n await this.contextDashboardService.update(this.mo);\n this.onLoad();\n }\n\n /**\n * Updates all dashboards children's. Useful for position changes on the dashboard.\n * @param child The child to change.\n */\n async updateDashboardChildren(child: DashboardChildChange) {\n const { children } = child;\n const dashboardMO: ContextDashboardManagedObject = this.mo;\n const mappedChildren: { [id: string]: Widget } = keyBy(\n children.map(c => this.componentToWidget(c)),\n 'id'\n );\n dashboardMO.c8y_Dashboard.children = mappedChildren;\n return this.contextDashboardService.update(dashboardMO);\n }\n\n /**\n * Remove the complete dashboard and navigate away.\n */\n async deleteDashboard() {\n await this.contextDashboardService.delete(this.mo);\n if (this.route.parent) {\n const route = this.route.parent.snapshot.url.map(segment => segment.path).join('/');\n this.router.navigateByUrl(route);\n }\n }\n\n /**\n * Edits the current dashboard\n */\n async editDashboard() {\n const initialState = {\n dashboard: this.dashboard,\n deviceType: this.context.type,\n isNamedDashboard: this.contextDashboardService.isNamed(this.mo)\n };\n const modal = this.bsModal.show(DashboardDetailComponent, {\n class: 'modal-lg',\n initialState,\n ignoreBackdropClick: true\n }).content as DashboardDetailComponent;\n try {\n const dashboardMO = cloneDeep(this.mo);\n dashboardMO.c8y_Dashboard = await modal.result;\n await this.contextDashboardService.update(dashboardMO);\n await this.contextDashboardService.refreshTabs(dashboardMO);\n this.onLoad();\n modal.close();\n } catch (ex) {\n // intended empty\n }\n }\n\n /**\n * Edits a widget on the dashboard.\n * @param change The widget change event.\n */\n async editWidget(change: WidgetChange) {\n const { x, y, width, height } = change.source;\n const component = await this.widgetService.getWidgetDefinition(\n change.widget.name || change.widget.componentId\n );\n if (!component) {\n this.addWidget();\n return;\n }\n await this.addWidget({\n ...component,\n data: { ...component.data, ...change.widget, _x: x, _y: y, _width: width, _height: height }\n });\n }\n\n /**\n * Adds a widget to the dashboard.\n * @param selected Define a selected component to switch to edit mode directly.\n */\n async addWidget(selected?: DynamicComponentDefinition) {\n const initialState = {\n mo: this.mo,\n context: this.context,\n selected: cloneDeep(selected)\n };\n\n const modal = this.bsModal.show(WidgetConfigComponent, {\n class: 'modal-lg',\n initialState,\n ignoreBackdropClick: true\n }).content as WidgetConfigComponent;\n\n try {\n const newWidget = await modal.result;\n if (!this.mo.c8y_Dashboard.children) {\n this.mo.c8y_Dashboard.children = {};\n }\n this.mo.c8y_Dashboard.children[newWidget.id] = newWidget;\n this.contextDashboardService.update(this.mo);\n newWidget.classes = this.mergeWidgetClasses(newWidget);\n await this.updateWidget(newWidget);\n modal.close();\n } catch (ex) {\n // intended empty\n }\n }\n\n /**\n * Updates a widget or adds a new one if it doesn't exist on\n * the dashboard.\n * @param widget The new widget\n */\n async updateWidget(widget) {\n const index = findIndex(this.widgets, { id: widget.id });\n const isNew = index === -1;\n const mappedWidget = await this.mapLegacy(widget);\n if (isNew) {\n this.widgets.push(mappedWidget);\n } else {\n this.widgets.splice(index, 1, mappedWidget);\n }\n }\n\n /**\n * Removes a widget and rearranges the remaining ones\n * if necessary.\n * @param change The change event.\n */\n deleteWidget(change: WidgetChange) {\n const { widget, source } = change;\n delete this.mo.c8y_Dashboard.children[widget.id];\n const removed = this.widgets.find(({ id }) => id === widget.id);\n this.widgets.splice(this.widgets.indexOf(removed), 1);\n\n // using setTimeout to give the component the chance to remove it.\n setTimeout(() => {\n const child = new DashboardChildChange(source);\n child.collapseUpAll();\n this.updateDashboardChildren(child);\n });\n }\n\n /**\n * This is a workaround to ensure that the dragged-element\n * (which is attached to the body) has the right styling.\n */\n addDashboardClassToBody() {\n this.class.split(' ').forEach(cssClass => {\n this.renderer.addClass(document.body, cssClass);\n });\n }\n\n /**\n * This is a workaround to ensure that the dragged-element\n * (which is attached to the body) has the right styling.\n */\n removeDashboardClassFromBody() {\n this.class.split(' ').forEach(cssClass => {\n this.renderer.removeClass(document.body, cssClass);\n });\n }\n\n /**\n * Changes the dashboard settings to frozen or vice versa.\n * @param settings The current settings of the dashboard.\n */\n async toggleFreeze(settings: DashboardSettings) {\n this.toggleIsFrozenFlag(settings);\n try {\n await this.contextDashboardService.update(this.mo);\n if (this.dashboard.isFrozen) {\n this.alert.success(gettext('Your dashboard is locked now.'));\n } else {\n this.alert.success(gettext('Your dashboard is unlocked now.'));\n }\n } catch (ex) {\n this.alert.addServerFailure(ex);\n this.toggleIsFrozenFlag(settings);\n }\n }\n\n private toggleIsFrozenFlag(settings: DashboardSettings) {\n settings.isFrozen = !settings.isFrozen;\n this.dashboard.isFrozen = settings.isFrozen;\n }\n\n private loadContextDashboard() {\n this.dataSub = this.route.data.subscribe(({ dashboard }) => {\n this.context = this.route.parent.snapshot.data.contextData;\n this.mo = dashboard;\n this.dashboard = this.mo.c8y_Dashboard;\n this.onLoad();\n });\n }\n\n private loadNamedDashboard() {\n this.dataSub = this.contextDashboardService\n .getNamedDashboardOrCreate(this.name, this.defaultWidgets)\n .subscribe(mo => {\n this.context = this.context || {};\n this.mo = mo;\n this.dashboard = this.mo.c8y_Dashboard;\n this.onLoad();\n });\n }\n\n private async onLoad() {\n const canEditDashboard = await this.contextDashboardService.canEditDashboard(this.mo);\n this.disabled = !canEditDashboard;\n const dashboardChildren = cloneDeep(this.mo.c8y_Dashboard.children);\n const isDeviceType = this.contextDashboardService.isDeviceType(this.mo);\n const dashboardClasses = {\n 'c8y-grid-dashboard': true,\n dashboard: true,\n ...this.dashboard.classes\n };\n\n this.widgets = await Promise.all<Widget>(\n values(dashboardChildren).map(widget => {\n widget.classes = this.mergeWidgetClasses(widget);\n if (isDeviceType) {\n this.applyDeviceTarget(widget);\n }\n return this.mapLegacy(widget);\n })\n );\n this.class = Object.keys(dashboardClasses).join(' ');\n this.isLoading = false;\n }\n\n private mergeWidgetClasses(widget) {\n const hasHeaderClass = WIDGET_HEADER_CLASSES.find(\n el => widget.classes && widget.classes[el.class]\n );\n const widgetClasses = hasHeaderClass\n ? { ...widget.classes }\n : { ...this.dashboard.widgetClasses, ...widget.classes };\n return {\n card: true,\n 'card-dashboard': true,\n ...widgetClasses\n };\n }\n\n private componentToWidget(child: DashboardChildComponent) {\n return {\n ...omit(child.data, ['componentTransformConfigWithContext', 'transformConfigWithContext']), // remove legacy\n ...({\n _x: child.x,\n _y: child.y,\n _width: child.width,\n _height: child.height\n } as Widget)\n };\n }\n\n private async mapLegacy(widget): Promise<Widget> {\n const cmp = await this.widgetService.getWidgetDefinition(widget.componentId || widget.name);\n if (get(cmp, 'data.settings.upgrade')) {\n widget.widgetComponent = cmp.data.settings.widgetComponent;\n widget.configComponent = cmp.data.settings.configComponent;\n widget.templateUrl = cmp.data.settings.templateUrl;\n widget.configTemplateUrl = cmp.data.settings.configTemplateUrl;\n widget.transformConfigWithContext =\n cmp.data.settings.componentTransformConfigWithContext ||\n cmp.data.settings.transformConfigWithContext;\n } else {\n delete widget.templateUrl;\n delete widget.configTemplateUrl;\n }\n return widget;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\nimport { ContextDashboardType } from './context-dashboard.model';\nimport { ContextDashboardService } from './context-dashboard.service';\n\n@Injectable()\nexport class GroupDashboardGuard {\n constructor(\n private contextDashboardService: ContextDashboardService\n ) {}\n\n canActivate(route: ActivatedRouteSnapshot) {\n return this.contextDashboardService.activateDashboards(route, [\n ContextDashboardType.Group\n ]);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Action, ActionFactory, gettext, ViewContext, Permissions } from '@c8y/ngx-components';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { ContextDashboardService } from './context-dashboard.service';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { DashboardDetailComponent } from './dashboard-detail.component';\nimport { ContextDashboardManagedObject } from './context-dashboard.model';\n\n@Injectable()\nexport class DashboardActionsFactory implements ActionFactory {\n constructor(\n private router: Router,\n private contextDashboardService: ContextDashboardService,\n private bsModal: BsModalService,\n private permissions: Permissions\n ) {}\n\n async get(activatedRoute: ActivatedRoute): Promise<Action[]> {\n const context =\n !activatedRoute.parent || activatedRoute.snapshot.data.context\n ? activatedRoute.snapshot.data\n : activatedRoute.parent.snapshot.data;\n const canEditDashboard = await this.isEnabled(context);\n return [\n {\n label: gettext('Add dashboard'),\n priority: 2500,\n action: () => this.addDashboard(context),\n disabled: !canEditDashboard\n }\n ];\n }\n\n async addDashboard(context) {\n let initialState: { deviceType: string };\n\n if (context.context === ViewContext.Device) {\n initialState = {\n deviceType: context.contextData.type\n };\n }\n\n const modal = this.bsModal.show(DashboardDetailComponent, {\n class: 'modal-lg',\n initialState,\n ignoreBackdropClick: true\n }).content as DashboardDetailComponent;\n try {\n const dashboardCfg = await modal.result;\n const dashboardMO: ContextDashboardManagedObject = await this.contextDashboardService.create(\n dashboardCfg,\n context\n );\n await this.contextDashboardService.navigateToDashboard(dashboardMO);\n modal.close();\n } catch (ex) {\n // intended emptys\n }\n }\n\n private async isEnabled(context) {\n if (context.contextData && context.contextData.id) {\n return (\n (await this.permissions.canEdit(\n ['ROLE_INVENTORY_ADMIN', 'ROLE_INVENTORY_CREATE'],\n context.contextData\n )) && [ViewContext.Device, ViewContext.Group].includes(context.context)\n );\n }\n return (\n this.permissions.hasAnyRole(['ROLE_INVENTORY_ADMIN', 'ROLE_INVENTORY_CREATE']) &&\n [ViewContext.Device, ViewContext.Group].includes(context.context)\n );\n }\n}\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { DASHBOARD_THEME_CLASSES, WIDGET_HEADER_CLASSES } from './context-dashboard.model';\nimport { ControlContainer, NgForm } from '@angular/forms';\n\n@Component({\n selector: 'c8y-appearance-settings',\n templateUrl: './appearance-settings.component.html',\n viewProviders: [ { provide: ControlContainer, useExisting: NgForm } ]\n})\nexport class AppearanceSettingsComponent {\n @Input()\n themeClass: string = 'dashboard-theme-light';\n @Input()\n headerClass: string = 'panel-title-regular';\n @Input()\n defaultThemeClass: string;\n @Input()\n defaultHeaderClass: string;\n @Output()\n themeClassChange = new EventEmitter<string>();\n @Output()\n headerClassChange = new EventEmitter<string>();\n\n @Input()\n possibleStylingTheme = DASHBOARD_THEME_CLASSES;\n\n @Input()\n possibleStylingHeader = WIDGET_HEADER_CLASSES;\n\n themeClassClick(value) {\n value = this.resetToDefault(value, this.themeClass, this.defaultThemeClass);\n this.themeClass = value;\n this.themeClassChange.emit(value);\n }\n\n headerClassClick(value) {\n value = this.resetToDefault(value, this.headerClass, this.defaultHeaderClass);\n this.headerClass = value;\n this.headerClassChange.emit(value);\n }\n\n private resetToDefault(value: string, compareTo: string, defaultValue: string) {\n if (defaultValue && value === compareTo) {\n value = defaultValue;\n }\n return value;\n }\n}\n","import { Input, Component } from '@angular/core';\n\n@Component({\n selector: 'c8y-widget-preview',\n templateUrl: './widget-preview.component.html'\n})\nexport class WidgetPreviewComponent {\n @Input()\n previewClasses: { [key: string]: boolean } = {\n 'dashboard-theme-light': true,\n 'panel-title-regular': true\n };\n\n @Input()\n tab: { name: string; icon: string };\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport {\n HOOK_ONCE_ROUTE,\n ViewContext,\n CoreModule,\n HOOK_ACTION\n} from '@c8y/ngx-components';\nimport { ContextDashboardService } from './context-dashboard.service';\nimport { DeviceDashboardGuard } from './device-dashboard.guard';\nimport { ContextDashboardComponent } from './context-dashboard.component';\nimport { GroupDashboardGuard } from './group-dashboard.guard';\nimport { CONTEXT_DASHBOARD_CONFIG, ContextDashboardConfig } from './context-dashboard.model';\nimport { DashboardDetailComponent } from './dashboard-detail.component';\nimport { WidgetConfigComponent } from './widget-config.component';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { DashboardActionsFactory } from './dashboard-actions.factory';\nimport { AppearanceSettingsComponent } from './appearance-settings.component';\nimport { WidgetPreviewComponent } from './widget-preview.component';\n\nconst defaultConfig = {\n allowFullscreen: true,\n widgetFilter({ data }) {\n return !(data && data.settings && data.settings.noNewWidgets);\n },\n routes: [\n {\n path: 'dashboard/:dashboardId',\n component: ContextDashboardComponent,\n canActivate: [DeviceDashboardGuard],\n context: ViewContext.Device\n },\n {\n path: 'dashboard/:dashboardId',\n component: ContextDashboardComponent,\n canActivate: [GroupDashboardGuard],\n context: ViewContext.Group\n }\n ]\n};\n\n@NgModule({\n declarations: [\n AppearanceSettingsComponent,\n ContextDashboardComponent,\n WidgetConfigComponent,\n WidgetPreviewComponent,\n DashboardDetailComponent\n ],\n imports: [CoreModule, TooltipModule, PopoverModule, BsDropdownModule.forRoot()],\n exports: [ContextDashboardComponent, WidgetConfigComponent],\n entryComponents: [ContextDashboardComponent, WidgetConfigComponent, DashboardDetailComponent]\n})\nexport class ContextDashboardModule {\n static config(config: ContextDashboardConfig = {}): ModuleWithProviders {\n return {\n ngModule: ContextDashboardModule,\n providers: [\n {\n provide: CONTEXT_DASHBOARD_CONFIG,\n useValue: { ...defaultConfig, ...config }\n },\n ContextDashboardService,\n DeviceDashboardGuard,\n GroupDashboardGuard,\n {\n provide: HOOK_ONCE_ROUTE,\n useValue: { ...defaultConfig, ...config }.routes,\n multi: true\n },\n {\n provide: HOOK_ACTION,\n useClass: DashboardActionsFactory,\n multi: true\n }\n ]\n };\n }\n}\n","import { Component } from '@angular/core';\nimport { gettext, Widget } from '@c8y/ngx-components';\n\n@Component({\n selector: 'c8y-cockpit-dashboard',\n templateUrl: './cockpit-dashboard.component.html'\n})\nexport class CockpitDashboardComponent {\n DEFAULT_HOME_WIDGETS = [\n {\n name: 'cockpit.welcome.widget',\n title: gettext(''),\n _x: 0,\n _y: 0,\n _height: 5,\n _width: 12,\n classes: { 'panel-title-hidden': true }\n },\n {\n name: 'Asset Alarms',\n title: gettext('Active, critical alarms'),\n _x: 0,\n _y: 5,\n _height: 4,\n _width: 6\n },\n {\n name: 'Recent Alarms',\n title: gettext('Recent alarms'),\n _x: 0,\n _y: 9,\n _height: 4,\n _width: 6\n },\n {\n name: 'Map',\n title: gettext('Map'),\n _x: 6,\n _y: 5,\n _height: 8,\n _width: 6\n }\n ] as Widget[];\n}\n","import { Component, Input, OnInit, OnDestroy } from '@angular/core';\nimport { gettext, DocsService, DocLink, NavigatorService } from '@c8y/ngx-components';\nimport { Router } from '@angular/router';\nimport { Subscription } from 'rxjs';\nimport { TenantService, ApplicationService, IApplication } from '@c8y/client';\n\n@Component({\n selector: 'c8y-welcome-to-cockpit',\n templateUrl: './welcome.component.html'\n})\nexport class WelcomeToCockpit implements OnInit, OnDestroy {\n @Input() config;\n welcomeMessage;\n quickLinks = [];\n\n private readonly REPORT_NODE: string = 'Reports';\n private readonly CONFIGURATION_NODE: string = 'Configuration';\n private readonly TRIAL: string = 'TRIAL';\n private tenantType: string;\n private navNodes: any[];\n private links: DocLink[];\n private docsSubscription: Subscription;\n private navSubscription: Subscription;\n\n constructor(\n private tenantService: TenantService,\n private docs: DocsService,\n private router: Router,\n private navigator: NavigatorService,\n private applicationService: ApplicationService\n ) {}\n\n async ngOnInit() {\n this.tenantType = await this.tenantService.currentTenantType();\n this.setMessage();\n this.navSubscription = this.navigator.items$.subscribe(nodes => {\n this.navNodes = nodes;\n });\n this.docsSubscription = this.docs.items$.subscribe(links => {\n this.links = links;\n });\n\n // <---TRIAL & REGULAR TENANT --->\n this.createConnectSmartphoneQuickLink();\n await this.createQuicklinkRegisterDevice();\n\n // <--- TRIAL TENANT --->\n if (this.tenantType === this.TRIAL) {\n this.createQuicklinkUserGuide();\n return;\n }\n\n // <--- REGULAR TENANT --->\n this.createQuicklinkAddGroup();\n this.createQuickLinkReports();\n this.createQuicklinkDataPointLibrary();\n this.createQuicklinkSmartRules();\n }\n\n ngOnDestroy() {\n if (this.docsSubscription && !this.docsSubscription.closed) {\n this.docsSubscription.unsubscribe();\n }\n\n if (this.navSubscription && !this.navSubscription.closed) {\n this.navSubscription.unsubscribe();\n }\n }\n\n private setMessage() {\n if (this.tenantType === this.TRIAL) {\n this.welcomeMessage = gettext(`\n The Cockpit application allows you to build IoT applications in minutes.\n To get started, connect any device to the platform.\n If you do not have an IoT device to hand, you can start by connecting your smartphone.\n Click below to be guided through the process.\n `);\n } else {\n this.welcomeMessage = gettext(`\n The Cockpit application provides you with options to manage\n and monitor Internet of Things assets and data from business perspective.\n `);\n }\n }\n\n private createQuicklinkAddGroup() {\n // comes from angularJS factory c8yQuickLinks\n const addGroup: Partial<DocLink> = this.links.find(link => link.label === 'Add group');\n if (addGroup) {\n this.quickLinks.push(addGroup);\n }\n }\n\n private createConnectSmartphoneQuickLink() {\n // Provider in SensorPhoneModule defines the\n // 'Connect smartphone' quicklink.\n const connectSmartphone = this.links.find(link => link.label === 'Connect smartphone');\n if (connectSmartphone) {\n this.quickLinks.push(connectSmartphone);\n }\n }\n\n private createQuickLinkReports() {\n const reports: Partial<DocLink> = {\n icon: 'c8y-reports',\n label: gettext('Reports'),\n url: '/export'\n };\n\n const reportsNode = this.findNavigatorNode(this.REPORT_NODE);\n if (reportsNode && reportsNode.show) {\n reports.click = () => {\n reportsNode.open = true;\n this.router.navigateByUrl(reports.url);\n };\n this.quickLinks.push(reports);\n }\n }\n\n private createQuicklinkDataPointLibrary() {\n const dataPointLib: Partial<DocLink> = {\n icon: 'c8y-data-points',\n label: gettext('Data point library'),\n url: '/datapointlibrary'\n };\n\n const configurationNode = this.findNavigatorNode(this.CONFIGURATION_NODE);\n if (configurationNode && configurationNode.show) {\n dataPointLib.click = () => {\n configurationNode.open = true;\n this.router.navigateByUrl(dataPointLib.url);\n };\n this.quickLinks.push(dataPointLib);\n }\n }\n\n private createQuicklinkSmartRules() {\n const smartRules: Partial<DocLink> = {\n icon: 'c8y-smart-rules',\n label: gettext('Smart rules'),\n url: '/rules'\n };\n const configurationNode = this.findNavigatorNode(this.CONFIGURATION_NODE);\n if (configurationNode && configurationNode.show) {\n smartRules.click = () => {\n configurationNode.open = true;\n this.router.navigateByUrl(smartRules.url);\n };\n this.quickLinks.push(smartRules);\n }\n }\n\n private async createQuicklinkRegisterDevice() {\n const { data } = await this.applicationService.listByUser();\n if (data) {\n const deviceManagement: IApplication = data.find(\n app => app.contextPath === 'devicemanagement'\n );\n if (deviceManagement) {\n const deviceMgmtUrl = this.applicationService.getHref(deviceManagement);\n const registerDevice: Partial<DocLink> = {\n icon: 'c8y-device-connect',\n label: gettext('Register device'),\n click: () => window.open(`${deviceMgmtUrl}/#/deviceregistration`, '_self')\n };\n this.quickLinks.push(registerDevice);\n }\n }\n }\n\n private createQuicklinkUserGuide() {\n const userGuide: Partial<DocLink> = {\n icon: 'c8y-user',\n label: gettext('User guide'),\n url: '/users-guide/getting-started',\n click: () => {\n const userGuideURL = this.docs.getUserGuideLink(userGuide.url) as string;\n window.open(userGuideURL);\n }\n };\n this.quickLinks.push(userGuide);\n }\n\n private findNavigatorNode(nodeRealName: string) {\n if (this.navNodes && this.navNodes.length > 0) {\n return this.navNodes.find((node: any) => node.realName === nodeRealName);\n }\n return undefined;\n }\n}\n","import { Component, Host } from '@angular/core';\r\nimport { ContextDashboardComponent } from '../context-dashboard.component';\r\n\r\n@Component({\r\n selector: 'c8y-legacy-welcome-widget',\r\n templateUrl: './legacy-welcome.component.html'\r\n})\r\nexport class LegacyWelcomeComponent {\r\n constructor(@Host() private dashboard: ContextDashboardComponent) {}\r\n\r\n restore() {\r\n this.dashboard.restore();\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\nimport { ContextDashboardModule } from './context-dashboard.module';\nimport { ContextDashboardComponent } from './context-dashboard.component';\nimport { DeviceDashboardGuard } from './device-dashboard.guard';\nimport { GroupDashboardGuard } from './group-dashboard.guard';\nimport {\n ViewContext,\n HOOK_NAVIGATOR_NODES,\n gettext,\n CoreModule,\n HOOK_COMPONENTS,\n DynamicComponentDefinition,\n QuickLinkModule,\n DocsModule\n} from '@c8y/ngx-components';\nimport { CockpitDashboardComponent } from './cockpit-dashboard.component';\nimport { ContextWidgetConfig } from './context-dashboard.model';\nimport { WelcomeToCockpit } from './welcome/welcome.component';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { LegacyWelcomeComponent } from './legacy-welcome/legacy-welcome.component';\n\n// import for the preview img to get into the build.\nlet previewImage = '';\ntry {\n // tslint:disable-next-line: no-var-requires\n previewImage = require('./welcome/img/welcome-widget-pr.png');\n} catch (ex) {\n // intended empty\n}\n\n@NgModule({\n entryComponents: [CockpitDashboardComponent, WelcomeToCockpit, LegacyWelcomeComponent],\n imports: [\n DocsModule,\n CoreModule,\n ContextDashboardModule.config({\n routes: [\n {\n path: 'dashboard/:dashboardId',\n component: ContextDashboardComponent,\n canActivate: [DeviceDashboardGuard],\n context: ViewContext.Device\n },\n {\n path: 'dashboard/:dashboardId',\n component: ContextDashboardComponent,\n canActivate: [GroupDashboardGuard],\n context: ViewContext.Group\n },\n {\n path: '',\n component: CockpitDashboardComponent\n }\n ]\n }),\n QuickLinkModule,\n TranslateModule\n ],\n declarations: [CockpitDashboardComponent, WelcomeToCockpit, LegacyWelcomeComponent],\n providers: [\n {\n provide: HOOK_NAVIGATOR_NODES,\n useValue: [{ label: gettext('Home'), icon: 'home', priority: 10000, path: '/' }],\n multi: true\n },\n {\n provide: HOOK_COMPONENTS,\n multi: true,\n useValue: [\n {\n id: 'cockpit.welcome.widget',\n label: gettext('Welcome to Cockpit'),\n description: gettext('Displays a welcome message for Cockpit'),\n component: WelcomeToCockpit,\n previewImage,\n data: {\n settings: {\n noNewWidgets: false,\n widgetDefaults: {\n _width: 12,\n _height: 6\n },\n ng1: {\n options: {\n noDeviceTarget: true,\n groupsSelectable: false\n }\n }\n }\n } as ContextWidgetConfig\n }\n ] as DynamicComponentDefinition[]\n },\n {\n provide: HOOK_COMPONENTS,\n multi: true,\n useValue: [\n {\n id: 'Cockpit Welcome',\n label: gettext('Welcome to Cockpit'),\n description: gettext('Displays a welcome message for Cockpit'),\n component: LegacyWelcomeComponent,\n data: {\n settings: {\n noNewWidgets: true,\n ng1: {\n options: {\n noDeviceTarget: true,\n groupsSelectable: false\n }\n }\n }\n } as ContextWidgetConfig\n }\n ] as DynamicComponentDefinition[]\n }\n ]\n})\nexport class CockpitDashboardModule {}\n"]}