@c8y/ngx-components 1018.503.1 → 1018.503.22

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 (149) hide show
  1. package/core/common/ApplicationOptions.d.ts +4 -2
  2. package/core/common/files.service.d.ts +10 -2
  3. package/core/common/global-config.service.d.ts +1 -1
  4. package/core/common/permissions.service.d.ts +67 -0
  5. package/core/common/tenant-ui.service.d.ts +1 -1
  6. package/core/i18n/pattern-messages.data.d.ts +20 -20
  7. package/esm2020/assets-navigator/asset-node.service.mjs +5 -4
  8. package/esm2020/auth-configuration/auth-configuration.guard.mjs +5 -2
  9. package/esm2020/auth-configuration/factories/navigation.factory.mjs +3 -3
  10. package/esm2020/cockpit-config/cockpit-config.guard.mjs +2 -2
  11. package/esm2020/cockpit-config/cockpit-config.service.mjs +2 -2
  12. package/esm2020/context-dashboard/add-dashboard.factory.mjs +6 -3
  13. package/esm2020/context-dashboard/context-dashboard.component.mjs +2 -2
  14. package/esm2020/context-dashboard/context-dashboard.service.mjs +3 -3
  15. package/esm2020/context-dashboard/dashboard-detail.component.mjs +2 -2
  16. package/esm2020/context-dashboard/report-dashboard/report-dashboard-list.component.mjs +3 -3
  17. package/esm2020/core/common/ApplicationOptions.mjs +1 -1
  18. package/esm2020/core/common/files.service.mjs +20 -4
  19. package/esm2020/core/common/global-config.service.mjs +7 -2
  20. package/esm2020/core/common/permissions.service.mjs +68 -1
  21. package/esm2020/core/common/tenant-ui.service.mjs +3 -2
  22. package/esm2020/core/common/user-preferences/user-preferences.service.mjs +6 -2
  23. package/esm2020/core/docs/support-outlet/support-outlet.component.mjs +3 -2
  24. package/esm2020/core/drop-area/drop-area.component.mjs +3 -1
  25. package/esm2020/core/i18n/pattern-messages.data.mjs +21 -21
  26. package/esm2020/core/setup/setup.service.mjs +2 -2
  27. package/esm2020/ecosystem/application-properties/application-properties.component.mjs +2 -2
  28. package/esm2020/ecosystem/application-properties/subscription-modal/subscription-modal.component.mjs +3 -3
  29. package/esm2020/ecosystem/ecosystem-navigation.factory.mjs +3 -3
  30. package/esm2020/ecosystem/packages/package-list/packages-list.component.mjs +2 -2
  31. package/esm2020/ecosystem/packages/package-versions/package-versions-list/package-versions-list.component.mjs +2 -2
  32. package/esm2020/files-repository/files-repository.guard.mjs +5 -3
  33. package/esm2020/location/location.component.mjs +20 -13
  34. package/esm2020/map/cluster-map.component.mjs +19 -11
  35. package/esm2020/map/cluster-map.mjs +8 -3
  36. package/esm2020/map/map-status.component.mjs +19 -5
  37. package/esm2020/map/map.component.mjs +10 -10
  38. package/esm2020/map/map.model.mjs +1 -19
  39. package/esm2020/map/map.service.mjs +24 -1
  40. package/esm2020/protocol-lwm2m/components/bootstrap-parameters/lwm2m-bootstrap-parameters.component.mjs +2 -2
  41. package/esm2020/protocol-lwm2m/components/configuration/typed-forms/form-wrapper-base.component.mjs +2 -2
  42. package/esm2020/register-device/register-device-navigation.factory.mjs +3 -3
  43. package/esm2020/replace-device/replace-device.service.mjs +5 -5
  44. package/esm2020/reports/export-schedules.component.mjs +3 -3
  45. package/esm2020/repository/configuration/device-tab/configuration-preview.component.mjs +4 -4
  46. package/esm2020/sms-gateway/sms-gateway.guard.mjs +2 -2
  47. package/esm2020/sms-gateway/sms-gateway.module.mjs +6 -6
  48. package/esm2020/sub-assets/add-group/add-group.component.mjs +2 -2
  49. package/esm2020/sub-assets/asset-properties-item.component.mjs +6 -6
  50. package/esm2020/sub-assets/groups.component.mjs +2 -2
  51. package/esm2020/sub-assets/sub-assets.component.mjs +2 -2
  52. package/esm2020/sub-assets/sub-assets.service.mjs +16 -10
  53. package/esm2020/tenants/tenant-list/tenant-list.component.mjs +12 -7
  54. package/esm2020/upgrade/ng1/downgraded.services.mjs +3 -2
  55. package/esm2020/upgrade/ng1/index.mjs +4 -3
  56. package/esm2020/widgets/cockpit/index.mjs +1 -1
  57. package/esm2020/widgets/device-management/index.mjs +1 -1
  58. package/fesm2015/c8y-ngx-components-assets-navigator.mjs +4 -3
  59. package/fesm2015/c8y-ngx-components-assets-navigator.mjs.map +1 -1
  60. package/fesm2015/c8y-ngx-components-auth-configuration.mjs +7 -4
  61. package/fesm2015/c8y-ngx-components-auth-configuration.mjs.map +1 -1
  62. package/fesm2015/c8y-ngx-components-cockpit-config.mjs +3 -3
  63. package/fesm2015/c8y-ngx-components-cockpit-config.mjs.map +1 -1
  64. package/fesm2015/c8y-ngx-components-context-dashboard.mjs +12 -9
  65. package/fesm2015/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  66. package/fesm2015/c8y-ngx-components-ecosystem.mjs +8 -8
  67. package/fesm2015/c8y-ngx-components-ecosystem.mjs.map +1 -1
  68. package/fesm2015/c8y-ngx-components-files-repository.mjs +5 -3
  69. package/fesm2015/c8y-ngx-components-files-repository.mjs.map +1 -1
  70. package/fesm2015/c8y-ngx-components-location.mjs +20 -13
  71. package/fesm2015/c8y-ngx-components-location.mjs.map +1 -1
  72. package/fesm2015/c8y-ngx-components-map.mjs +174 -142
  73. package/fesm2015/c8y-ngx-components-map.mjs.map +1 -1
  74. package/fesm2015/c8y-ngx-components-protocol-lwm2m-components-bootstrap-parameters.mjs +2 -2
  75. package/fesm2015/c8y-ngx-components-protocol-lwm2m-components-bootstrap-parameters.mjs.map +1 -1
  76. package/fesm2015/c8y-ngx-components-protocol-lwm2m-components-configuration.mjs +1 -1
  77. package/fesm2015/c8y-ngx-components-protocol-lwm2m-components-configuration.mjs.map +1 -1
  78. package/fesm2015/c8y-ngx-components-register-device.mjs +3 -3
  79. package/fesm2015/c8y-ngx-components-register-device.mjs.map +1 -1
  80. package/fesm2015/c8y-ngx-components-replace-device.mjs +5 -5
  81. package/fesm2015/c8y-ngx-components-replace-device.mjs.map +1 -1
  82. package/fesm2015/c8y-ngx-components-reports.mjs +2 -2
  83. package/fesm2015/c8y-ngx-components-reports.mjs.map +1 -1
  84. package/fesm2015/c8y-ngx-components-repository-configuration.mjs +3 -3
  85. package/fesm2015/c8y-ngx-components-repository-configuration.mjs.map +1 -1
  86. package/fesm2015/c8y-ngx-components-sms-gateway.mjs +6 -6
  87. package/fesm2015/c8y-ngx-components-sms-gateway.mjs.map +1 -1
  88. package/fesm2015/c8y-ngx-components-sub-assets.mjs +24 -18
  89. package/fesm2015/c8y-ngx-components-sub-assets.mjs.map +1 -1
  90. package/fesm2015/c8y-ngx-components-tenants.mjs +11 -6
  91. package/fesm2015/c8y-ngx-components-tenants.mjs.map +1 -1
  92. package/fesm2015/c8y-ngx-components-upgrade.mjs +4 -2
  93. package/fesm2015/c8y-ngx-components-upgrade.mjs.map +1 -1
  94. package/fesm2015/c8y-ngx-components-widgets-cockpit.mjs.map +1 -1
  95. package/fesm2015/c8y-ngx-components-widgets-device-management.mjs.map +1 -1
  96. package/fesm2015/c8y-ngx-components.mjs +121 -28
  97. package/fesm2015/c8y-ngx-components.mjs.map +1 -1
  98. package/fesm2020/c8y-ngx-components-assets-navigator.mjs +4 -3
  99. package/fesm2020/c8y-ngx-components-assets-navigator.mjs.map +1 -1
  100. package/fesm2020/c8y-ngx-components-auth-configuration.mjs +7 -4
  101. package/fesm2020/c8y-ngx-components-auth-configuration.mjs.map +1 -1
  102. package/fesm2020/c8y-ngx-components-cockpit-config.mjs +3 -3
  103. package/fesm2020/c8y-ngx-components-cockpit-config.mjs.map +1 -1
  104. package/fesm2020/c8y-ngx-components-context-dashboard.mjs +12 -9
  105. package/fesm2020/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  106. package/fesm2020/c8y-ngx-components-ecosystem.mjs +8 -8
  107. package/fesm2020/c8y-ngx-components-ecosystem.mjs.map +1 -1
  108. package/fesm2020/c8y-ngx-components-files-repository.mjs +5 -3
  109. package/fesm2020/c8y-ngx-components-files-repository.mjs.map +1 -1
  110. package/fesm2020/c8y-ngx-components-location.mjs +20 -13
  111. package/fesm2020/c8y-ngx-components-location.mjs.map +1 -1
  112. package/fesm2020/c8y-ngx-components-map.mjs +174 -142
  113. package/fesm2020/c8y-ngx-components-map.mjs.map +1 -1
  114. package/fesm2020/c8y-ngx-components-protocol-lwm2m-components-bootstrap-parameters.mjs +2 -2
  115. package/fesm2020/c8y-ngx-components-protocol-lwm2m-components-bootstrap-parameters.mjs.map +1 -1
  116. package/fesm2020/c8y-ngx-components-protocol-lwm2m-components-configuration.mjs +1 -1
  117. package/fesm2020/c8y-ngx-components-protocol-lwm2m-components-configuration.mjs.map +1 -1
  118. package/fesm2020/c8y-ngx-components-register-device.mjs +3 -3
  119. package/fesm2020/c8y-ngx-components-register-device.mjs.map +1 -1
  120. package/fesm2020/c8y-ngx-components-replace-device.mjs +5 -5
  121. package/fesm2020/c8y-ngx-components-replace-device.mjs.map +1 -1
  122. package/fesm2020/c8y-ngx-components-reports.mjs +2 -2
  123. package/fesm2020/c8y-ngx-components-reports.mjs.map +1 -1
  124. package/fesm2020/c8y-ngx-components-repository-configuration.mjs +3 -3
  125. package/fesm2020/c8y-ngx-components-repository-configuration.mjs.map +1 -1
  126. package/fesm2020/c8y-ngx-components-sms-gateway.mjs +6 -6
  127. package/fesm2020/c8y-ngx-components-sms-gateway.mjs.map +1 -1
  128. package/fesm2020/c8y-ngx-components-sub-assets.mjs +24 -18
  129. package/fesm2020/c8y-ngx-components-sub-assets.mjs.map +1 -1
  130. package/fesm2020/c8y-ngx-components-tenants.mjs +11 -6
  131. package/fesm2020/c8y-ngx-components-tenants.mjs.map +1 -1
  132. package/fesm2020/c8y-ngx-components-upgrade.mjs +4 -2
  133. package/fesm2020/c8y-ngx-components-upgrade.mjs.map +1 -1
  134. package/fesm2020/c8y-ngx-components-widgets-cockpit.mjs.map +1 -1
  135. package/fesm2020/c8y-ngx-components-widgets-device-management.mjs.map +1 -1
  136. package/fesm2020/c8y-ngx-components.mjs +121 -28
  137. package/fesm2020/c8y-ngx-components.mjs.map +1 -1
  138. package/locales/locales.pot +3 -0
  139. package/location/location.component.d.ts +2 -2
  140. package/map/cluster-map.component.d.ts +3 -1
  141. package/map/map-status.component.d.ts +12 -1
  142. package/map/map.component.d.ts +1 -1
  143. package/map/map.model.d.ts +0 -1
  144. package/map/map.service.d.ts +6 -0
  145. package/package.json +1 -1
  146. package/tenants/tenant-list/tenant-list.component.d.ts +4 -2
  147. package/upgrade/ng1/downgraded.services.d.ts +1 -0
  148. package/widgets/cockpit/index.d.ts +2 -1
  149. package/widgets/device-management/index.d.ts +2 -1
@@ -1,16 +1,16 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { Injectable } from '@angular/core';
3
3
  import * as i1 from '@c8y/ngx-components';
4
- import { gettext } from '@c8y/ngx-components';
4
+ import { Permissions, gettext } from '@c8y/ngx-components';
5
5
  import { isNil } from 'lodash-es';
6
6
  import { Subject } from 'rxjs';
7
7
  import { takeUntil } from 'rxjs/operators';
8
8
 
9
9
  const REQUIRED_ROLES = [
10
- 'ROLE_INVENTORY_READ',
11
- 'ROLE_INVENTORY_ADMIN',
12
- 'ROLE_IDENTITY_READ',
13
- 'ROLE_IDENTITY_ADMIN'
10
+ Permissions.ROLE_INVENTORY_READ,
11
+ Permissions.ROLE_INVENTORY_ADMIN,
12
+ Permissions.ROLE_IDENTITY_READ,
13
+ Permissions.ROLE_IDENTITY_ADMIN
14
14
  ];
15
15
  class ReplaceDeviceService {
16
16
  constructor(permissions, breadcrumbService, drawerService) {
@@ -1 +1 @@
1
- {"version":3,"file":"c8y-ngx-components-replace-device.mjs","sources":["../../replace-device/replace-device.service.ts","../../replace-device/c8y-ngx-components-replace-device.ts"],"sourcesContent":["import { Injectable, OnDestroy } from '@angular/core';\nimport { IManagedObject } from '@c8y/client';\nimport { BottomDrawerService, BreadcrumbService, gettext, Permissions } from '@c8y/ngx-components';\nimport { isNil } from 'lodash-es';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nexport const REQUIRED_ROLES = [\n 'ROLE_INVENTORY_READ',\n 'ROLE_INVENTORY_ADMIN',\n 'ROLE_IDENTITY_READ',\n 'ROLE_IDENTITY_ADMIN'\n];\n\n@Injectable({ providedIn: 'root' })\nexport class ReplaceDeviceService implements OnDestroy {\n private destroyed$ = new Subject<void>();\n\n constructor(\n private permissions: Permissions,\n private breadcrumbService: BreadcrumbService,\n private drawerService: BottomDrawerService\n ) {}\n\n canShowReplaceDevice(device: IManagedObject): boolean {\n return (\n this.permissions.hasAllRoles(REQUIRED_ROLES) &&\n !isNil(device.c8y_IsDevice) &&\n isNil(device.c8y_IsLwm2mDevice)\n );\n }\n\n async openDrawer(deviceToReplace: IManagedObject, closeCallback?: () => void) {\n const { ReplaceDeviceWizardComponent } = await import(\n '@c8y/ngx-components/replace-device-wizard'\n );\n const drawerRef = this.drawerService.openDrawer(ReplaceDeviceWizardComponent, {\n initialState: { deviceToReplace }\n });\n this.appendBreadcrumbs();\n drawerRef.onClosed$.pipe(takeUntil(this.destroyed$)).subscribe(() => {\n this.removeBreadcrumbs();\n if (typeof closeCallback === 'function') {\n closeCallback();\n }\n });\n }\n\n ngOnDestroy(): void {\n this.destroyed$.next();\n this.destroyed$.complete();\n }\n\n private appendBreadcrumbs(): void {\n this.breadcrumbService.state.forEach(\n bc => (bc.items = [...bc.items, { label: gettext('Replace device'), path: undefined }])\n );\n this.breadcrumbService.refresh();\n }\n\n private removeBreadcrumbs(): void {\n this.breadcrumbService.state.forEach(bc => bc.items?.pop());\n this.breadcrumbService.refresh();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"c8y-ngx-components-replace-device.mjs","sources":["../../replace-device/replace-device.service.ts","../../replace-device/c8y-ngx-components-replace-device.ts"],"sourcesContent":["import { Injectable, OnDestroy } from '@angular/core';\nimport { IManagedObject } from '@c8y/client';\nimport { BottomDrawerService, BreadcrumbService, gettext, Permissions } from '@c8y/ngx-components';\nimport { isNil } from 'lodash-es';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nexport const REQUIRED_ROLES = [\n Permissions.ROLE_INVENTORY_READ,\n Permissions.ROLE_INVENTORY_ADMIN,\n Permissions.ROLE_IDENTITY_READ,\n Permissions.ROLE_IDENTITY_ADMIN\n];\n\n@Injectable({ providedIn: 'root' })\nexport class ReplaceDeviceService implements OnDestroy {\n private destroyed$ = new Subject<void>();\n\n constructor(\n private permissions: Permissions,\n private breadcrumbService: BreadcrumbService,\n private drawerService: BottomDrawerService\n ) {}\n\n canShowReplaceDevice(device: IManagedObject): boolean {\n return (\n this.permissions.hasAllRoles(REQUIRED_ROLES) &&\n !isNil(device.c8y_IsDevice) &&\n isNil(device.c8y_IsLwm2mDevice)\n );\n }\n\n async openDrawer(deviceToReplace: IManagedObject, closeCallback?: () => void) {\n const { ReplaceDeviceWizardComponent } = await import(\n '@c8y/ngx-components/replace-device-wizard'\n );\n const drawerRef = this.drawerService.openDrawer(ReplaceDeviceWizardComponent, {\n initialState: { deviceToReplace }\n });\n this.appendBreadcrumbs();\n drawerRef.onClosed$.pipe(takeUntil(this.destroyed$)).subscribe(() => {\n this.removeBreadcrumbs();\n if (typeof closeCallback === 'function') {\n closeCallback();\n }\n });\n }\n\n ngOnDestroy(): void {\n this.destroyed$.next();\n this.destroyed$.complete();\n }\n\n private appendBreadcrumbs(): void {\n this.breadcrumbService.state.forEach(\n bc => (bc.items = [...bc.items, { label: gettext('Replace device'), path: undefined }])\n );\n this.breadcrumbService.refresh();\n }\n\n private removeBreadcrumbs(): void {\n this.breadcrumbService.state.forEach(bc => bc.items?.pop());\n this.breadcrumbService.refresh();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { Injectable, EventEmitter, Component, Input, Output, NgModule } from '@angular/core';
3
3
  import * as i6 from '@c8y/ngx-components';
4
- import { gettext, CoreModule, FormsModule } from '@c8y/ngx-components';
4
+ import { gettext, Permissions, CoreModule, FormsModule } from '@c8y/ngx-components';
5
5
  import { orderBy, remove, some, isEqual, cloneDeep, isEmpty } from 'lodash-es';
6
6
  import * as i2 from '@c8y/client';
7
7
  import * as i3 from '@ngx-translate/core';
@@ -635,7 +635,7 @@ class ExportSchedulesComponent {
635
635
  }
636
636
  async checkRole() {
637
637
  const { data } = await this.userService.current();
638
- const role = 'ROLE_SCHEDULE_REPORT_ADMIN';
638
+ const role = Permissions.ROLE_SCHEDULE_REPORT_ADMIN;
639
639
  const hasRole = this.userService.hasRole(data, role);
640
640
  return hasRole;
641
641
  }
@@ -1 +1 @@
1
- {"version":3,"file":"c8y-ngx-components-reports.mjs","sources":["../../reports/reports.service.ts","../../reports/export-schedules.interface.ts","../../reports/cron.service.ts","../../reports/cron.component.ts","../../reports/cron.component.html","../../reports/schedule-modal.component.ts","../../reports/schedule-modal.component.html","../../reports/export-schedules.component.ts","../../reports/export-schedules.component.html","../../reports/reports.module.ts","../../reports/ng1/downgraded.components.ts","../../reports/ng1/downgraded.services.ts","../../reports/ng1/index.ts","../../reports/c8y-ngx-components-reports.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { Export, Schedule } from './export-schedules.interface';\nimport { AlertService } from '@c8y/ngx-components';\nimport { orderBy, isEqual, remove, some } from 'lodash-es';\nimport {\n InventoryService,\n IdReference,\n IFetchResponse,\n IIdentified,\n FetchClient,\n IFetchOptions\n} from '@c8y/client';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Injectable()\nexport class ReportsService {\n microserviceUrl: string;\n headers: any;\n isReportAgentSubscribed: boolean;\n REPORT_AGENT_NOT_SUBSCRIBED_EXPECTED_ERROR_LOWER_CASE: string;\n\n constructor(\n private alertService: AlertService,\n private inventoryService: InventoryService,\n private client: FetchClient,\n private translateService: TranslateService\n ) {\n this.microserviceUrl = '/service/reporting';\n this.headers = { 'Content-Type': 'application/json' };\n this.isReportAgentSubscribed = true;\n this.REPORT_AGENT_NOT_SUBSCRIBED_EXPECTED_ERROR_LOWER_CASE = 'microservice/not found';\n }\n\n async getExport(exportId: IdReference) {\n let exp: Export;\n const exportDetail = await this.inventoryService.detail(exportId);\n const { data, res } = exportDetail;\n if (res.status !== 200) {\n this.alertService.addServerFailure({ data, res });\n } else {\n exp = data ? (data as unknown as Export) : ({} as Export);\n }\n\n return exp;\n }\n\n async getScheduleList(exportId: IdReference) {\n const exp = await this.getExport(exportId);\n\n return this.extractScheduleListFromExport(exp);\n }\n\n extractScheduleListFromExport(exp: Export) {\n let scheduleList: Schedule[];\n if (exp) {\n scheduleList = exp.c8y_ScheduleConfiguration ? exp.c8y_ScheduleConfiguration : [];\n }\n return orderBy(scheduleList, ['timestamp'], ['desc']);\n }\n\n async addSchedule(schedule: Schedule, exportId: IdReference) {\n return await this.updateSchedules(exportId, [], [schedule]);\n }\n\n async updateSchedule(oldSchedule: Schedule, schedule: Schedule, exportId: IdReference) {\n return await this.updateSchedules(exportId, [oldSchedule], [schedule]);\n }\n\n async updateSchedules(\n exportId: IdReference,\n schedulesToRemove: Schedule[] = [],\n schedulesToAdd: Schedule[] = []\n ) {\n let success = false;\n const exp = await this.getExport(exportId);\n const schedules = this.extractScheduleListFromExport(exp);\n\n remove(schedules, (schedule: Schedule) =>\n some(schedulesToRemove, (scheduleToRemove: Schedule) => isEqual(schedule, scheduleToRemove))\n );\n schedules.push(...schedulesToAdd);\n exp.c8y_ScheduleConfiguration = schedules;\n const { data, res } = await this.inventoryService.update(exp);\n if (res.status === 200) {\n success = await this.reschedule(exportId);\n } else {\n this.alertService.addServerFailure({ data, res });\n }\n\n return success;\n }\n\n async reschedule(exportId: IdReference) {\n const options: IFetchOptions = {\n method: 'PUT',\n headers: this.headers\n };\n const rescheduling = await this.client.fetch(\n `${this.microserviceUrl}/schedule/${exportId}`,\n options\n );\n return rescheduling.status === 200;\n }\n\n async deleteSchedule(schedule: Schedule, exportId: IdReference) {\n return await this.updateSchedules(exportId, [schedule], []);\n }\n\n /**\n * Removes report configuration.\n *\n * Note: fallback strategy is based on error code returned by backend\n * in case of missing subscription for report-agent microservice.\n * @param config entity of report configuration\n * @returns Response wrapped in [[IFetchResponse]]\n */\n async removeConfiguration(config: IIdentified): Promise<IFetchResponse> {\n let res: IFetchResponse;\n if (!this.isReportAgentSubscribed) {\n res = await this.fallbackConfigurationRemoval(config);\n } else {\n res = await this.normalConfigurationRemoval(config);\n if (res.status === 404) {\n const data = await res.json();\n if (\n data &&\n data.error &&\n data.error.toLowerCase() === this.REPORT_AGENT_NOT_SUBSCRIBED_EXPECTED_ERROR_LOWER_CASE\n ) {\n res = await this.fallbackConfigurationRemoval(config);\n this.isReportAgentSubscribed = false;\n }\n }\n }\n return res;\n }\n\n async normalConfigurationRemoval(config: IIdentified): Promise<IFetchResponse> {\n const url = `${this.microserviceUrl}/config/${config.id}`;\n return await this.client.fetch(url, { method: 'DELETE' });\n }\n\n async fallbackConfigurationRemoval(config: IIdentified): Promise<IFetchResponse> {\n let res;\n try {\n res = (await this.inventoryService.delete(config)).res;\n } catch (e) {\n // this could be an error related to not existing object or anything else which makes request return error status code\n // in case of concurrent removal everything is fine, therefor warning message. But it might not recover from some errors\n this.alertService.addServerFailure(e, 'warning');\n }\n return res;\n }\n}\n","import { IManagedObject } from '@c8y/client';\n\nexport interface Export extends IManagedObject {\n c8y_ScheduleConfiguration: Schedule[];\n}\n\nexport interface Schedule {\n timestamp: number;\n emailConfig: EmailConfig;\n cronConfig: CronConfig;\n}\n\nexport interface EmailConfig {\n to: string[];\n cc: string[];\n bcc: string[];\n replyTo: string;\n text: string;\n subject: string;\n}\n\nexport interface CronConfig {\n month: string;\n hour: string;\n weekday: string;\n day: string;\n minute: string;\n}\n\nexport interface EmittedCron {\n cron: string;\n valid: boolean;\n}\n\nexport interface EmitterPayload {\n success: boolean;\n message: string;\n schedule: Schedule;\n}\n\nexport enum ActionType {\n CREATE = 'create',\n EDIT = 'edit',\n DUPLICATE = 'duplicate'\n}\n\nexport enum Base {\n Initial = 1,\n Hour,\n Day,\n Week,\n Month,\n Year\n}\n","import { Injectable } from '@angular/core';\nimport { CronConfig, Base } from './export-schedules.interface';\nimport { TranslateService } from '@ngx-translate/core';\nimport { formatDate } from '@angular/common';\nimport { gettext } from '@c8y/ngx-components';\n\n@Injectable()\nexport class CronService {\n daysOfWeekPosix: any[] = [];\n daysOfMonth = [\n { value: '1', label: '1.' },\n { value: '2', label: '2.' },\n { value: '3', label: '3.' },\n { value: '4', label: '4.' },\n { value: '5', label: '5.' },\n { value: '6', label: '6.' },\n { value: '7', label: '7.' },\n { value: '8', label: '8.' },\n { value: '9', label: '9.' },\n { value: '10', label: '10.' },\n { value: '11', label: '11.' },\n { value: '12', label: '12.' },\n { value: '13', label: '13.' },\n { value: '14', label: '14.' },\n { value: '15', label: '15.' },\n { value: '16', label: '16.' },\n { value: '17', label: '17.' },\n { value: '18', label: '18.' },\n { value: '19', label: '19.' },\n { value: '20', label: '20.' },\n { value: '21', label: '21.' },\n { value: '22', label: '22.' },\n { value: '23', label: '23.' },\n { value: '24', label: '24.' },\n { value: '25', label: '25.' },\n { value: '26', label: '26.' },\n { value: '27', label: '27.' },\n { value: '28', label: '28.' },\n { value: '29', label: '29.' },\n { value: '30', label: '30.' },\n { value: '31', label: '31.' }\n ];\n months: any[] = [];\n hours: any[] = [];\n minutes: any[] = [];\n intervals = [\n { value: 2, label: gettext('Hour') },\n { value: 3, label: gettext('Day') },\n { value: 4, label: gettext('Week') },\n { value: 5, label: gettext('Month') },\n { value: 6, label: gettext('Year') }\n ];\n constructor(private translateService: TranslateService) {\n for (let x = 0; x < 24; x++) {\n this.hours.push({ value: x.toString(), label: `${x}` });\n }\n for (let x = 0; x < 60; x = x + 5) {\n this.minutes.push({ value: x.toString(), label: `${x}` });\n }\n\n for (let x = 0; x < 7; x++) {\n this.daysOfWeekPosix.push({\n value: x.toString(),\n label: this.getWeekDayName({ weekday: x } as unknown as CronConfig)\n });\n }\n\n for (let x = 1; x < 13; x++) {\n this.months.push({\n value: x.toString(),\n label: this.getMonthName({ month: x } as unknown as CronConfig)\n });\n }\n }\n\n generateCron(cronConfig: CronConfig) {\n let cron = '';\n cron = cronConfig.minute ? `${cronConfig.minute}` : '*';\n cron += cronConfig.hour ? ` ${cronConfig.hour}` : ' *';\n cron += cronConfig.day ? ` ${cronConfig.day}` : ' *';\n cron += cronConfig.month ? ` ${cronConfig.month}` : ' *';\n cron += cronConfig.weekday ? ` ${cronConfig.weekday}` : ' *';\n\n return cron;\n }\n\n generateCronConfig(cron: string) {\n const parts = cron.split(/\\s+/);\n const cronConfig: CronConfig = {\n minute: parts[0],\n hour: parts[1],\n day: parts[2],\n month: parts[3],\n weekday: parts[4]\n };\n\n return cronConfig;\n }\n\n getBase(cronConfig: CronConfig) {\n let base: Base = Base.Initial;\n\n if (\n cronConfig.minute !== '*' &&\n cronConfig.hour === '*' &&\n cronConfig.day === '*' &&\n cronConfig.month === '*' &&\n cronConfig.weekday === '*'\n ) {\n base = Base.Hour;\n } else if (\n cronConfig.minute !== '*' &&\n cronConfig.hour !== '*' &&\n cronConfig.day === '*' &&\n cronConfig.month === '*' &&\n cronConfig.weekday === '*'\n ) {\n base = Base.Day;\n } else if (\n cronConfig.minute !== '*' &&\n cronConfig.hour !== '*' &&\n cronConfig.day === '*' &&\n cronConfig.month === '*' &&\n cronConfig.weekday !== '*'\n ) {\n base = Base.Week;\n } else if (\n cronConfig.minute !== '*' &&\n cronConfig.hour !== '*' &&\n cronConfig.day !== '*' &&\n cronConfig.month === '*' &&\n cronConfig.weekday === '*'\n ) {\n base = Base.Month;\n } else if (\n cronConfig.minute !== '*' &&\n cronConfig.hour !== '*' &&\n cronConfig.day !== '*' &&\n cronConfig.month !== '*' &&\n cronConfig.weekday === '*'\n ) {\n base = Base.Year;\n } else {\n // cronConfig invalid\n }\n\n return base;\n }\n\n validateModels(base: Base, cronConfig: CronConfig) {\n let valid: boolean;\n switch (base) {\n case Base.Initial: // Please select\n valid = false;\n break;\n case Base.Hour:\n if (cronConfig.minute !== '*') {\n valid = true;\n } else {\n valid = false;\n }\n break;\n case Base.Day:\n if (cronConfig.minute !== '*' && cronConfig.hour !== '*') {\n valid = true;\n } else {\n valid = false;\n }\n break;\n case Base.Week:\n if (cronConfig.minute !== '*' && cronConfig.hour !== '*' && cronConfig.weekday !== '*') {\n valid = true;\n } else {\n valid = false;\n }\n break;\n case Base.Month:\n if (cronConfig.minute !== '*' && cronConfig.hour !== '*' && cronConfig.day !== '*') {\n valid = true;\n } else {\n valid = false;\n }\n break;\n case Base.Year:\n if (\n cronConfig.minute !== '*' &&\n cronConfig.hour !== '*' &&\n cronConfig.day !== '*' &&\n cronConfig.month !== '*'\n ) {\n valid = true;\n } else {\n valid = false;\n }\n break;\n default:\n valid = false;\n }\n\n return valid;\n }\n\n clearNextModels(base: Base, cronConfig: CronConfig) {\n if (base === Base.Initial) {\n // please select, delete all\n // cron expression: every minute at second 0\n cronConfig.minute = '*';\n cronConfig.hour = '*';\n cronConfig.day = '*';\n cronConfig.month = '*';\n cronConfig.weekday = '*';\n } else if (base === Base.Hour) {\n // hour, don't delete minutes\n // cron expression: every hour, at whatever minute, at second 0\n cronConfig.minute = cronConfig.minute === '*' ? this.minutes[0].value : cronConfig.minute;\n cronConfig.hour = '*';\n cronConfig.day = '*';\n cronConfig.month = '*';\n cronConfig.weekday = '*';\n } else if (base === Base.Day) {\n // day, don't delete minutes and hours\n // cron expression: every day of every month, at whatever hour and minute, at second 0\n cronConfig.minute = cronConfig.minute === '*' ? this.minutes[0].value : cronConfig.minute;\n cronConfig.hour = cronConfig.hour === '*' ? this.hours[0].value : cronConfig.hour;\n cronConfig.day = '*';\n cronConfig.month = '*';\n cronConfig.weekday = '*';\n } else if (base === Base.Week) {\n // week, delete month and day\n // cron expression: every month, at whatever weekday, hour and minute, at second 0\n cronConfig.minute = cronConfig.minute === '*' ? this.minutes[0].value : cronConfig.minute;\n cronConfig.hour = cronConfig.hour === '*' ? this.hours[0].value : cronConfig.hour;\n cronConfig.day = '*';\n cronConfig.month = '*';\n cronConfig.weekday =\n cronConfig.weekday === '*' || cronConfig.weekday === '?'\n ? this.daysOfWeekPosix[0].value\n : cronConfig.weekday;\n } else if (base === Base.Month) {\n // month, delete month and weekday\n // cron expression: every month, at whatever day of month, hour and minute, at second 0\n cronConfig.minute = cronConfig.minute === '*' ? this.minutes[0].value : cronConfig.minute;\n cronConfig.hour = cronConfig.hour === '*' ? this.hours[0].value : cronConfig.hour;\n cronConfig.day = cronConfig.day === '*' ? this.daysOfMonth[0].value : cronConfig.day;\n cronConfig.month = '*';\n cronConfig.weekday = '*';\n } else if (base === Base.Year) {\n // year, delete weekday\n // cron expression: every year, at whatever month, day of month, hour and minute, at second 0\n cronConfig.minute = cronConfig.minute === '*' ? this.minutes[0].value : cronConfig.minute;\n cronConfig.hour = cronConfig.hour === '*' ? this.hours[0].value : cronConfig.hour;\n cronConfig.day = cronConfig.day === '*' ? this.daysOfMonth[0].value : cronConfig.day;\n cronConfig.month = cronConfig.month === '*' ? this.months[0].value : cronConfig.month;\n cronConfig.weekday = '*';\n }\n }\n\n getWeekDayName(cronConfig: CronConfig) {\n const date = new Date(0);\n const firstSundayDate = date.getDate() + 3; // because we know date 0 was on Thursday...\n date.setDate(firstSundayDate + parseInt(cronConfig.weekday, 10));\n return formatDate(date, 'EEEE', this.translateService.currentLang);\n }\n\n getMonthDayName(cronConfig: CronConfig) {\n let name = '';\n this.daysOfMonth.forEach(item => {\n if (item.value === cronConfig.day) {\n name = item.label;\n }\n });\n\n return name;\n }\n\n getMonthName(cronConfig: CronConfig) {\n const date = new Date(0);\n date.setMonth(parseInt(cronConfig.month, 10) - 1);\n return formatDate(date, 'LLLL', this.translateService.currentLang);\n }\n}\n","import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';\nimport { EmittedCron, CronConfig, Base } from './export-schedules.interface';\nimport { CronService } from './cron.service';\n\n@Component({\n selector: 'cron',\n templateUrl: './cron.component.html'\n})\nexport class CronComponent implements OnInit {\n @Input() cronIn: string;\n @Output() emitter: EventEmitter<EmittedCron> = new EventEmitter();\n emittedCron: EmittedCron = {\n valid: false,\n cron: ''\n };\n\n base: Base = Base.Initial;\n cronConfig: CronConfig;\n\n daysOfWeekPosix: any[];\n daysOfMonth: any[];\n months: any[];\n hours: any[];\n minutes: any[];\n intervals: any[];\n\n constructor(private cronService: CronService) {\n //\n }\n\n ngOnInit() {\n this.daysOfWeekPosix = this.cronService.daysOfWeekPosix;\n this.daysOfMonth = this.cronService.daysOfMonth;\n this.months = this.cronService.months;\n this.hours = this.cronService.hours;\n this.minutes = this.cronService.minutes;\n this.intervals = this.cronService.intervals;\n\n this.cronConfig = this.cronService.generateCronConfig(this.cronIn);\n this.base = this.cronService.getBase(this.cronConfig);\n }\n\n onChangeSelect() {\n this.cronService.clearNextModels(this.base, this.cronConfig);\n this.emittedCron.valid = this.cronService.validateModels(this.base, this.cronConfig);\n this.emittedCron.cron = this.cronService.generateCron(this.cronConfig);\n this.emitter.emit(this.emittedCron);\n }\n}\n","<div class=\"cron-wrap\">\n <div class=\"form-group smart-cron-job-every\">\n <label for=\"smart-cron-job-every\" class=\"control-label\" translate>Interval</label>\n <div>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"cron-select form-control\"\n id=\"smart-cron-job-every\"\n [(ngModel)]=\"base\"\n required=\"true\"\n (change)=\"onChangeSelect()\"\n >\n <option *ngIf=\"base === 1\" value=\"1\" translate>Select…</option>\n <option *ngFor=\"let baseInterval of intervals\" [ngValue]=\"baseInterval.value\">\n {{ baseInterval.label | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"form-group smart-cron-job-on col-md-6\" *ngIf=\"base == 4\">\n <label class=\"control-label\" for=\"smart-cron-job-on\" translate>Day</label>\n\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"cron-select form-control day-value\"\n id=\"smart-cron-job-on\"\n [(ngModel)]=\"cronConfig.weekday\"\n (change)=\"onChangeSelect()\"\n >\n <option *ngFor=\"let dayOfWeek of daysOfWeekPosix\" [ngValue]=\"dayOfWeek.value\">\n {{ dayOfWeek.label | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n\n <div class=\"form-group smart-cron-job-of col-md-6\" *ngIf=\"base == 6\">\n <label for=\"smart-cron-job-of\" class=\"control-label\" translate>Month</label>\n <div>\n <div class=\"c8y-select-wrapper\">\n <select\n id=\"smart-cron-job-of\"\n class=\"cron-select form-control month-value\"\n [(ngModel)]=\"cronConfig.month\"\n (change)=\"onChangeSelect()\"\n >\n <option *ngFor=\"let month of months\" [ngValue]=\"month.value\">\n {{ month.label | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n\n <div class=\"form-group smart-cron-job-on-the col-md-6\" *ngIf=\"base >= 5\">\n <label for=\"smart-cron-job-on-the\" class=\"control-label\" translate>Day</label>\n <div>\n <div class=\"c8y-select-wrapper\">\n <select\n id=\"smart-cron-job-on-the\"\n class=\"cron-select form-control day-of-month-value\"\n [(ngModel)]=\"cronConfig.day\"\n (change)=\"onChangeSelect()\"\n >\n <option *ngFor=\"let dayOfMonth of daysOfMonth\" [ngValue]=\"dayOfMonth.value\">\n {{ dayOfMonth.label | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"form-group smart-cron-job-at\" *ngIf=\"base >= 2\">\n <label for=\"smart-cron-job-at-hour\" class=\"control-label\">\n <span *ngIf=\"base >= 3\" translate>Time</span>\n <span *ngIf=\"base < 3\" translate>Minutes</span>\n </label>\n <div>\n <div class=\"form-inline\">\n <div class=\"c8y-select-wrapper\" *ngIf=\"base >= 3\">\n <select\n id=\"smart-cron-job-at-hour\"\n class=\"cron-select form-control hour-value\"\n [(ngModel)]=\"cronConfig.hour\"\n (change)=\"onChangeSelect()\"\n >\n <option *ngFor=\"let hour of hours\" [ngValue]=\"hour.value\">\n {{ hour.value | number: '2.0-0' }}\n </option>\n </select>\n <span></span>\n </div>\n <span *ngIf=\"base >= 3\">:</span>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"cron-select form-control minute-value\"\n id=\"smart-cron-job-at-minute\"\n [(ngModel)]=\"cronConfig.minute\"\n (change)=\"onChangeSelect()\"\n >\n <option *ngFor=\"let minute of minutes\" [ngValue]=\"minute.value\">\n {{ minute.value | number: '2.0-0' }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n </div>\n</div>\n","import { Component, OnInit, Output, EventEmitter } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { Schedule, ActionType } from './export-schedules.interface';\nimport { EmittedCron, EmitterPayload } from './export-schedules.interface';\nimport { CronService } from './cron.service';\nimport { cloneDeep } from 'lodash-es';\nimport { gettext } from '@c8y/ngx-components';\nimport { ReportsService } from './reports.service';\n\n@Component({\n selector: 'schedule-modal',\n templateUrl: './schedule-modal.component.html'\n})\nexport class ScheduleModalComponent implements OnInit {\n schedule: Schedule;\n oldSchedule: Schedule;\n @Output() emitter: EventEmitter<EmitterPayload> = new EventEmitter();\n exportId: number;\n actionType: ActionType;\n ActionType = ActionType;\n cronExpression = '* * * * *';\n validCron = false;\n emitterPayload: EmitterPayload = {\n success: false,\n message: '',\n schedule: { timestamp: undefined, emailConfig: undefined, cronConfig: undefined }\n };\n\n emailTo: string;\n emailCc: string;\n emailBcc: string;\n emailReplyTo: string;\n emailSubject: string;\n emailText: string;\n\n placeholdersInfo = gettext(\n 'Available placeholders: {tenant-domain}, {host}, {binaryId}. Whole link to downloadable file is: {tenant-domain}/inventory/binaries/{binaryId}.'\n );\n\n constructor(\n public reportsService: ReportsService,\n public modalRef: BsModalRef,\n private cronService: CronService\n ) {}\n\n ngOnInit() {\n this.oldSchedule = cloneDeep(this.schedule);\n this.populateEmailFieldsFromSchedule(this.schedule);\n this.cronExpression = this.cronService.generateCron(this.schedule.cronConfig);\n this.validCron = this.cronService.validateModels(\n this.cronService.getBase(this.schedule.cronConfig),\n this.schedule.cronConfig\n );\n }\n\n populateEmailFieldsFromSchedule(schedule: Schedule) {\n if (schedule.emailConfig.to && schedule.emailConfig.to.length) {\n this.emailTo = schedule.emailConfig.to.toString();\n }\n if (schedule.emailConfig.cc && schedule.emailConfig.cc.length) {\n this.emailCc = schedule.emailConfig.cc.toString();\n }\n if (schedule.emailConfig.bcc && schedule.emailConfig.bcc.length) {\n this.emailBcc = schedule.emailConfig.bcc.toString();\n }\n if (schedule.emailConfig.replyTo) {\n this.emailReplyTo = schedule.emailConfig.replyTo;\n }\n if (schedule.emailConfig.subject) {\n this.emailSubject = schedule.emailConfig.subject;\n }\n if (schedule.emailConfig.text) {\n this.emailText = schedule.emailConfig.text;\n }\n }\n\n save() {\n this.populateScheduleFromCronExpression();\n this.populateScheduleFromEmailFields();\n if (this.actionType === ActionType.CREATE || this.actionType === ActionType.DUPLICATE) {\n const date = new Date();\n const timestamp = date.getTime();\n this.schedule.timestamp = timestamp;\n }\n this.emitterPayload.success = true;\n this.emitterPayload.schedule = this.schedule;\n this.modalRef.hide();\n // signal to the parent component to update list\n this.emitter.emit(this.emitterPayload);\n }\n\n cancel() {\n this.modalRef.hide();\n }\n\n getCron(cron: EmittedCron) {\n this.validCron = cron.valid;\n if (cron.valid) {\n this.cronExpression = cron.cron;\n }\n }\n\n populateScheduleFromCronExpression() {\n this.schedule.cronConfig = this.cronService.generateCronConfig(this.cronExpression);\n }\n\n convertStringOfEmailsToArray(stringOfEmails: string) {\n const arr = [];\n if (stringOfEmails) {\n const parts = stringOfEmails.split(',');\n parts.forEach(item => {\n if (item) {\n arr.push(item);\n }\n });\n }\n return arr;\n }\n\n populateScheduleFromEmailFields() {\n this.schedule.emailConfig.to = this.emailTo\n ? this.convertStringOfEmailsToArray(this.emailTo)\n : null;\n this.schedule.emailConfig.cc = this.emailCc\n ? this.convertStringOfEmailsToArray(this.emailCc)\n : null;\n this.schedule.emailConfig.bcc = this.emailBcc\n ? this.convertStringOfEmailsToArray(this.emailBcc)\n : null;\n this.schedule.emailConfig.replyTo = this.emailReplyTo;\n this.schedule.emailConfig.subject = this.emailSubject;\n this.schedule.emailConfig.text = this.emailText;\n }\n}\n","<div class=\"modal-header dialog-header\">\n <i c8yIcon=\"c8y-report\"></i>\n <h4 id=\"modal-title\">\n <span *ngIf=\"actionType === ActionType.CREATE\" translate>New export schedule</span>\n <span *ngIf=\"actionType === ActionType.EDIT\" translate>Edit export schedule</span>\n <span *ngIf=\"actionType === ActionType.DUPLICATE\" translate>Duplicate export schedule</span>\n </h4>\n</div>\n\n<div class=\"modal-body\" id=\"modal-body\">\n <p class=\"lead text-center p-t-24 m-b-0\" translate>On schedule send export via email</p>\n</div>\n<div class=\"modal-inner-scroll smart-rule-control\">\n <form #scheduleForm=\"ngForm\" class=\"edit-smart-rule-details\">\n <div class=\"list-group\">\n <div class=\"list-group-item bg-level-1\">\n <div class=\"smart-list-icon-label\">\n <span class=\"dot bg-primary-light m-r-8\">1</span>\n <strong translate>Frequency</strong>\n </div>\n <div class=\"p-t-16\">\n <div class=\"form-group\">\n <cron [cronIn]=\"cronExpression\" (emitter)=\"getCron($event)\" name=\"cron\"></cron>\n </div>\n </div>\n </div>\n <div class=\"list-group-item\">\n <div class=\"smart-list-icon-label\">\n <span class=\"dot bg-primary-light m-r-8\">2</span>\n <div class=\"d-inline-block\">\n <strong translate>Send email</strong>\n <p class=\"help-block text-muted small p-absolute\">\n <i class=\"text-info m-r-4 text-14\" c8yIcon=\"info-circle\"></i>\n <span translate\n >Enter one or more valid email addresses, separated with a comma.</span\n >\n </p>\n </div>\n </div>\n <div class=\"p-t-24\">\n <div class=\"form-group\">\n <label class=\"control-label\" translate>Send to</label>\n <c8y-form-group>\n <input\n emails\n type=\"text\"\n class=\"form-control\"\n name=\"to\"\n [(ngModel)]=\"emailTo\"\n placeholder=\"{{\n 'e.g. joe.doe@example.com,john.smith@example.com`LOCALIZE`' | translate\n }}\"\n required\n />\n </c8y-form-group>\n </div>\n\n <div class=\"form-group\">\n <label class=\"control-label\" translate>CC</label>\n <c8y-form-group>\n <input\n emails\n type=\"text\"\n class=\"form-control span\"\n name=\"cc\"\n placeholder=\"{{\n 'e.g. joe.doe@example.com,john.smith@example.com`LOCALIZE`' | translate\n }}\"\n [(ngModel)]=\"emailCc\"\n />\n </c8y-form-group>\n </div>\n\n <div class=\"form-group\">\n <label class=\"control-label\" translate>BCC</label>\n <c8y-form-group>\n <input\n emails\n type=\"text\"\n class=\"form-control span\"\n name=\"bcc\"\n placeholder=\"{{\n 'e.g. joe.doe@example.com,john.smith@example.com`LOCALIZE`' | translate\n }}\"\n [(ngModel)]=\"emailBcc\"\n />\n </c8y-form-group>\n </div>\n\n <div class=\"form-group\">\n <label class=\"control-label\" translate>Reply to (single email address)</label>\n <c8y-form-group>\n <input\n email\n type=\"text\"\n class=\"form-control span\"\n name=\"replyTo\"\n placeholder=\"{{ 'e.g. joe.doe@example.com`LOCALIZE`' | translate }}\"\n [(ngModel)]=\"emailReplyTo\"\n />\n </c8y-form-group>\n </div>\n\n <div class=\"form-group\">\n <label class=\"control-label\" translate>Subject</label>\n <c8y-form-group>\n <input\n type=\"text\"\n class=\"form-control span\"\n name=\"subject\"\n [(ngModel)]=\"emailSubject\"\n placeholder=\"{{ 'e.g. Daily report' | translate }}\"\n required\n />\n </c8y-form-group>\n </div>\n\n <div class=\"form-group\">\n <label class=\"control-label\" translate>Message</label>\n <c8y-form-group>\n <textarea\n class=\"form-control\"\n name=\"text\"\n [(ngModel)]=\"emailText\"\n placeholder=\"{{ 'Message' | translate }}\"\n rows=\"4\"\n required\n ></textarea>\n <p class=\"help-block text-muted\">\n {{ placeholdersInfo | translate }}\n </p>\n </c8y-form-group>\n </div>\n </div>\n </div>\n </div>\n </form>\n</div>\n\n<div class=\"modal-footer\">\n <button class=\"btn btn-default\" (click)=\"cancel()\" title=\"{{ 'Cancel' | translate }}\">\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n (click)=\"save()\"\n [disabled]=\"!validCron || !scheduleForm.form.valid\"\n >\n <span>\n <span *ngIf=\"actionType === ActionType.CREATE\" title=\"{{ 'Create' | translate }}\">\n {{ 'Create' | translate }}\n </span>\n <span *ngIf=\"actionType === ActionType.EDIT\" title=\"{{ 'Save' | translate }}\">\n {{ 'Save' | translate }}\n </span>\n <span *ngIf=\"actionType === ActionType.DUPLICATE\" title=\"{{ 'Duplicate' | translate }}\">\n {{ 'Duplicate' | translate }}\n </span>\n </span>\n </button>\n</div>\n","import { Component, EventEmitter, Input, OnChanges, OnInit, Output } from '@angular/core';\nimport { Export, Schedule, EmitterPayload, ActionType } from './export-schedules.interface';\nimport { ReportsService } from './reports.service';\nimport { BsModalService, BsModalRef, ModalOptions } from 'ngx-bootstrap/modal';\nimport { ScheduleModalComponent } from './schedule-modal.component';\nimport { gettext, OptionsService } from '@c8y/ngx-components';\nimport { cloneDeep } from 'lodash-es';\nimport { CronService } from './cron.service';\nimport { IdReference } from '@c8y/client';\nimport { TranslateService } from '@ngx-translate/core';\nimport { UserService } from '@c8y/client';\nimport { isEmpty } from 'lodash-es';\n@Component({\n selector: 'export-schedules',\n templateUrl: './export-schedules.component.html'\n})\nexport class ExportSchedulesComponent implements OnInit, OnChanges {\n @Input() set exportId(exportId: IdReference) {\n this._exportId = exportId;\n }\n\n @Output() onSchedulesUpdate = new EventEmitter<Schedule[]>();\n\n exp: Export;\n scheduleList: Schedule[] = [];\n initialSchedule: Schedule = {\n timestamp: null,\n emailConfig: {\n to: [],\n cc: [],\n bcc: [],\n replyTo: '',\n text: '',\n subject: ''\n },\n cronConfig: {\n minute: '0',\n hour: '0',\n day: '1',\n month: '1',\n weekday: '?'\n }\n };\n buttonLabels: any;\n listClass = 'interact-list';\n loadingStatus: any;\n sortType: string;\n sortReverse = false;\n isOpen: any = {};\n isFlipped: boolean;\n isEditMenuOpen = false;\n modalRef: BsModalRef;\n currentUserEmail = '';\n hasRequiredRole = false;\n private _exportId: IdReference;\n private defaultExportEmailTemplate = this.translateService.instant(\n gettext(\n 'File with exported data can be downloaded from {tenant-domain}/apps/cockpit/index.html#?download={binaryId}.'\n )\n );\n\n constructor(\n private reportsService: ReportsService,\n private bsModalService: BsModalService,\n public cronService: CronService,\n private translateService: TranslateService,\n private userService: UserService,\n private optionsService: OptionsService\n ) {\n this.loadingStatus = {\n inProgress: false,\n done: false,\n error: false\n };\n }\n\n async ngOnInit() {\n this.hasRequiredRole = await this.checkRole();\n this.getScheduleList(true);\n const currentUserEmail = await this.getCurrentUserEmail();\n this.initialSchedule.emailConfig.text = await this.optionsService.getTenantOption(\n 'configuration',\n 'export.data.mail.text'\n );\n if (isEmpty(this.initialSchedule.emailConfig.text)) {\n this.initialSchedule.emailConfig.text = await this.optionsService.getInheritedTenantOption(\n 'configuration',\n 'export.data.mail.text',\n this.defaultExportEmailTemplate\n );\n }\n this.initialSchedule.emailConfig.to = currentUserEmail;\n this.exp = await this.reportsService.getExport(this._exportId);\n this.initialSchedule.emailConfig.subject = this.translateService.instant(\n gettext('Export of \"{{expName}}\"'),\n { expName: this.exp.name }\n );\n }\n\n ngOnChanges() {\n this.translateButtonTitles();\n }\n\n translateButtonTitles() {\n this.buttonLabels = {\n edit: this.translateService.instant(gettext('Edit schedule')),\n editNoPermission: this.translateService.instant(gettext('Edit schedule - no permissions')),\n duplicate: this.translateService.instant(gettext('Duplicate schedule')),\n duplicateNoPermission: this.translateService.instant(\n gettext('Duplicate schedule - no permissions')\n ),\n delete: this.translateService.instant(gettext('Delete schedule')),\n deleteNoPermission: this.translateService.instant(gettext('Delete schedule - no permissions'))\n };\n }\n\n async getCurrentUserEmail() {\n const { data } = await this.userService.current();\n return data && data.email ? [data.email] : [];\n }\n async checkRole() {\n const { data } = await this.userService.current();\n const role = 'ROLE_SCHEDULE_REPORT_ADMIN';\n const hasRole = this.userService.hasRole(data, role);\n return hasRole;\n }\n\n async getScheduleList(withProgress: boolean) {\n if (withProgress) {\n this.loadingStatus.inProgress = true;\n }\n this.scheduleList = await this.reportsService.getScheduleList(this._exportId);\n if (withProgress) {\n this.loadingStatus.inProgress = false;\n }\n }\n\n addSchedule() {\n this.openAddEditModal(this._exportId, this.initialSchedule, ActionType.CREATE);\n }\n\n editSchedule(schedule: Schedule, index: number, event: any) {\n if (this.hasRequiredRole) {\n event.preventDefault();\n this.openAddEditModal(this._exportId, schedule, ActionType.EDIT, index);\n }\n }\n\n duplicateSchedule(schedule: Schedule, event: any) {\n event.preventDefault();\n this.openAddEditModal(this._exportId, schedule, ActionType.DUPLICATE);\n }\n\n openAddEditModal(\n exportId: IdReference,\n schedule: Schedule,\n actionType: ActionType,\n index?: number\n ) {\n const payload = { actionType, exportId, schedule: cloneDeep(schedule) };\n const modalOptions = {\n class: 'modal-sm',\n ariaDescribedby: 'modal-body',\n ariaLabelledBy: 'modal-title',\n initialState: payload\n } as ModalOptions;\n this.modalRef = this.bsModalService.show(ScheduleModalComponent, modalOptions);\n this.modalRef.content.emitter.subscribe((load: EmitterPayload) =>\n this.getMessageFromModal(load, index)\n );\n }\n\n getMessageFromModal(payload: EmitterPayload, index?: number) {\n if (payload.success) {\n if (index !== undefined) {\n this.scheduleList[index] = payload.schedule;\n } else {\n this.scheduleList.push(payload.schedule);\n }\n this.onSchedulesUpdate.emit(this.scheduleList);\n }\n }\n\n removeSchedule(schedule: Schedule, index: number, event: any) {\n event.preventDefault();\n this.scheduleList.splice(index, 1);\n this.onSchedulesUpdate.emit(this.scheduleList);\n }\n}\n","<div>\n <div *ngIf=\"loadingStatus.inProgress\" class=\"d-flex a-i-center\">\n <c8y-loading></c8y-loading>\n </div>\n\n <div *ngIf=\"!loadingStatus.inProgress && loadingStatus.done && loadingStatus.error\">\n <div class=\"alert alert-warning max-width-100\" translate>Could not load schedules list.</div>\n </div>\n\n <div *ngIf=\"!loadingStatus.inProgress && !loadingStatus.done && !loadingStatus.error\">\n <c8y-ui-empty-state\n *ngIf=\"!scheduleList.length\"\n [icon]=\"'c8y-report'\"\n [title]=\"'No export schedules defined.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n\n <div class=\"c8y-list__group\" *ngIf=\"scheduleList.length\">\n <div class=\"c8y-list__item hidden-xs\">\n <div class=\"c8y-list__item__block\">\n <div class=\"c8y-list__item__icon\">\n <i class=\"p-l-24\"></i>\n </div>\n <div class=\"c8y-list__item__body\">\n <div class=\"d-flex\">\n <div class=\"col-sm-6\">\n <label class=\"m-0\">\n {{ 'Description' | translate }}\n </label>\n </div>\n <div class=\"col-sm-6 m-r-40\">\n <label class=\"m-0\">\n {{ 'Frequency' | translate }}\n </label>\n </div>\n </div>\n </div>\n <span></span>\n </div>\n </div>\n\n <div\n class=\"c8y-list__item pointer\"\n *ngFor=\"let schedule of scheduleList; index as i\"\n (click)=\"editSchedule(schedule, i, $event)\"\n >\n <div class=\"c8y-list__item__block\">\n <div class=\"c8y-list__item__icon\">\n <i c8yIcon=\"c8y-report\" class=\"c8y-icon-duocolor\"></i>\n </div>\n <div class=\"c8y-list__item__body d-flex\">\n <div class=\"col-sm-6 col-xs-6\">\n <div class=\"text-truncate\" title=\"{{ schedule.emailConfig.subject }}\">\n {{ schedule.emailConfig.subject }}\n </div>\n </div>\n <div class=\"col-sm-6 col-xs-6\">\n <div class=\"d-flex a-i-baseline\">\n <i c8yIcon=\"calendar\" class=\"text-muted m-r-4\"></i>\n <span class=\"smart-rule-information\">\n <span\n *ngIf=\"cronService.getBase(schedule.cronConfig) === 2\"\n ngNonBindable\n translate\n [translateParams]=\"{ minutes: schedule.cronConfig.minute | number: '2.0-0' }\"\n >\n Hourly: {{ minutes }} minute(s) past the hour.\n </span>\n <span\n *ngIf=\"cronService.getBase(schedule.cronConfig) === 3\"\n ngNonBindable\n translate\n [translateParams]=\"{\n hour: schedule.cronConfig.hour | number: '2.0-0',\n minutes: schedule.cronConfig.minute | number: '2.0-0'\n }\"\n >\n Daily: at {{ hour }}:{{ minutes }}.\n </span>\n <span\n *ngIf=\"cronService.getBase(schedule.cronConfig) === 4\"\n ngNonBindable\n translate\n [translateParams]=\"{\n weekDay: cronService.getWeekDayName(schedule.cronConfig),\n hour: schedule.cronConfig.hour | number: '2.0-0',\n minutes: schedule.cronConfig.minute | number: '2.0-0'\n }\"\n >\n Weekly: {{ weekDay }}, at {{ hour }}:{{ minutes }}.\n </span>\n <span\n *ngIf=\"cronService.getBase(schedule.cronConfig) === 5\"\n ngNonBindable\n translate\n [translateParams]=\"{\n monthDay: cronService.getMonthDayName(schedule.cronConfig),\n hour: schedule.cronConfig.hour | number: '2.0-0',\n minutes: schedule.cronConfig.minute | number: '2.0-0'\n }\"\n >\n Monthly: {{ monthDay }} day of the month, at {{ hour }}:{{ minutes }}.\n </span>\n <span\n *ngIf=\"cronService.getBase(schedule.cronConfig) === 6\"\n ngNonBindable\n translate\n [translateParams]=\"{\n month: cronService.getMonthName(schedule.cronConfig),\n monthDay: cronService.getMonthDayName(schedule.cronConfig),\n hour: schedule.cronConfig.hour | number: '2.0-0',\n minutes: schedule.cronConfig.minute | number: '2.0-0'\n }\"\n >\n Yearly: {{ month }}, {{ monthDay }} day of the month, at {{ hour }}:{{\n minutes\n }}.\n </span>\n </span>\n </div>\n </div>\n </div>\n <div class=\"c8y-list__item__actions\" (click)=\"$event.stopPropagation()\">\n <div class=\"settings dropdown\" dropdown>\n <button\n class=\"dropdown-toggle c8y-dropdown\"\n type=\"button\"\n title=\"{{ 'Actions' | translate }}\"\n dropdownToggle\n >\n <i [c8yIcon]=\"'ellipsis-v'\"></i>\n </button>\n <ul role=\"list\" class=\"dropdown-menu dropdown-menu-right\" *dropdownMenu>\n <li role=\"menuitem\">\n <button\n type=\"button\"\n [title]=\"hasRequiredRole ? buttonLabels.edit : buttonLabels.editNoPermission\"\n (click)=\"editSchedule(schedule, i, $event)\"\n [disabled]=\"!hasRequiredRole\"\n >\n <i [c8yIcon]=\"'pencil'\"></i>\n {{ 'Edit' | translate }}\n </button>\n </li>\n <li role=\"menuitem\">\n <button\n type=\"button\"\n [title]=\"\n hasRequiredRole ? buttonLabels.duplicate : buttonLabels.duplicateNoPermission\n \"\n (click)=\"duplicateSchedule(schedule, $event)\"\n [disabled]=\"!hasRequiredRole\"\n >\n <i [c8yIcon]=\"'copy'\"></i>\n {{ 'Duplicate' | translate }}\n </button>\n </li>\n <li role=\"menuitem\">\n <button\n type=\"button\"\n [title]=\"\n hasRequiredRole ? buttonLabels.delete : buttonLabels.deleteNoPermission\n \"\n (click)=\"removeSchedule(schedule, i, $event)\"\n [disabled]=\"!hasRequiredRole\"\n >\n <i [c8yIcon]=\"'delete'\"></i>\n {{ 'Delete' | translate }}\n </button>\n </li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"alert alert-warning max-width-100\" *ngIf=\"!hasRequiredRole\" role=\"alert\" translate>\n You don't have the permission required to schedule exports.\n </div>\n <button\n class=\"btn btn-default m-t-16\"\n type=\"button\"\n title=\"{{ 'Add schedule' | translate }}\"\n (click)=\"addSchedule()\"\n [disabled]=\"!hasRequiredRole\"\n >\n <i [c8yIcon]=\"'plus-circle'\"></i>\n {{ 'Add schedule' | translate }}\n </button>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CoreModule, FormsModule } from '@c8y/ngx-components';\nimport { ReportsService } from './reports.service';\nimport { CronService } from './cron.service';\nimport { ExportSchedulesComponent } from './export-schedules.component';\nimport { ScheduleModalComponent } from './schedule-modal.component';\nimport { CronComponent } from './cron.component';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\n\n/**\n * The angular module definition for reports.\n * @exports ExportSchedulesComponent\n * @exports ScheduleModalComponent\n * @exports CronComponent\n */\n@NgModule({\n declarations: [ExportSchedulesComponent, ScheduleModalComponent, CronComponent],\n imports: [CoreModule, FormsModule, BsDropdownModule, TooltipModule],\n entryComponents: [ExportSchedulesComponent, ScheduleModalComponent, CronComponent],\n providers: [ReportsService, CronService],\n exports: [ExportSchedulesComponent, ScheduleModalComponent, CronComponent]\n})\nexport class ReportsModule {}\n","import { downgradeComponent } from '@angular/upgrade/static';\nimport { ExportSchedulesComponent } from '../export-schedules.component';\nexport const exportSchedulesComponent = downgradeComponent({\n component: ExportSchedulesComponent\n});\n","import { downgradeInjectable } from '@angular/upgrade/static';\nimport { ReportsService } from '../reports.service';\nexport const reportsService = downgradeInjectable(ReportsService);\n","import * as angular from 'angular';\nimport { registerNgModule } from '@c8y/ng1-modules';\nimport { exportSchedulesComponent } from './downgraded.components';\nimport { reportsService } from './downgraded.services';\n\nconst NAME = 'c8y.upgrade.reports';\n\nangular\n .module(NAME, [])\n .directive('c8yExportSchedules', exportSchedulesComponent)\n .service('c8yReportsService', reportsService);\n\nexport const ng1Modules = [NAME];\n\nregisterNgModule(ng1Modules);\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i1.CronService","i2","i3","i4","i1.ReportsService","i3.CronService","i5","i6","i7.CronComponent","i7"],"mappings":"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"}
1
+ {"version":3,"file":"c8y-ngx-components-reports.mjs","sources":["../../reports/reports.service.ts","../../reports/export-schedules.interface.ts","../../reports/cron.service.ts","../../reports/cron.component.ts","../../reports/cron.component.html","../../reports/schedule-modal.component.ts","../../reports/schedule-modal.component.html","../../reports/export-schedules.component.ts","../../reports/export-schedules.component.html","../../reports/reports.module.ts","../../reports/ng1/downgraded.components.ts","../../reports/ng1/downgraded.services.ts","../../reports/ng1/index.ts","../../reports/c8y-ngx-components-reports.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { Export, Schedule } from './export-schedules.interface';\nimport { AlertService } from '@c8y/ngx-components';\nimport { orderBy, isEqual, remove, some } from 'lodash-es';\nimport {\n InventoryService,\n IdReference,\n IFetchResponse,\n IIdentified,\n FetchClient,\n IFetchOptions\n} from '@c8y/client';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Injectable()\nexport class ReportsService {\n microserviceUrl: string;\n headers: any;\n isReportAgentSubscribed: boolean;\n REPORT_AGENT_NOT_SUBSCRIBED_EXPECTED_ERROR_LOWER_CASE: string;\n\n constructor(\n private alertService: AlertService,\n private inventoryService: InventoryService,\n private client: FetchClient,\n private translateService: TranslateService\n ) {\n this.microserviceUrl = '/service/reporting';\n this.headers = { 'Content-Type': 'application/json' };\n this.isReportAgentSubscribed = true;\n this.REPORT_AGENT_NOT_SUBSCRIBED_EXPECTED_ERROR_LOWER_CASE = 'microservice/not found';\n }\n\n async getExport(exportId: IdReference) {\n let exp: Export;\n const exportDetail = await this.inventoryService.detail(exportId);\n const { data, res } = exportDetail;\n if (res.status !== 200) {\n this.alertService.addServerFailure({ data, res });\n } else {\n exp = data ? (data as unknown as Export) : ({} as Export);\n }\n\n return exp;\n }\n\n async getScheduleList(exportId: IdReference) {\n const exp = await this.getExport(exportId);\n\n return this.extractScheduleListFromExport(exp);\n }\n\n extractScheduleListFromExport(exp: Export) {\n let scheduleList: Schedule[];\n if (exp) {\n scheduleList = exp.c8y_ScheduleConfiguration ? exp.c8y_ScheduleConfiguration : [];\n }\n return orderBy(scheduleList, ['timestamp'], ['desc']);\n }\n\n async addSchedule(schedule: Schedule, exportId: IdReference) {\n return await this.updateSchedules(exportId, [], [schedule]);\n }\n\n async updateSchedule(oldSchedule: Schedule, schedule: Schedule, exportId: IdReference) {\n return await this.updateSchedules(exportId, [oldSchedule], [schedule]);\n }\n\n async updateSchedules(\n exportId: IdReference,\n schedulesToRemove: Schedule[] = [],\n schedulesToAdd: Schedule[] = []\n ) {\n let success = false;\n const exp = await this.getExport(exportId);\n const schedules = this.extractScheduleListFromExport(exp);\n\n remove(schedules, (schedule: Schedule) =>\n some(schedulesToRemove, (scheduleToRemove: Schedule) => isEqual(schedule, scheduleToRemove))\n );\n schedules.push(...schedulesToAdd);\n exp.c8y_ScheduleConfiguration = schedules;\n const { data, res } = await this.inventoryService.update(exp);\n if (res.status === 200) {\n success = await this.reschedule(exportId);\n } else {\n this.alertService.addServerFailure({ data, res });\n }\n\n return success;\n }\n\n async reschedule(exportId: IdReference) {\n const options: IFetchOptions = {\n method: 'PUT',\n headers: this.headers\n };\n const rescheduling = await this.client.fetch(\n `${this.microserviceUrl}/schedule/${exportId}`,\n options\n );\n return rescheduling.status === 200;\n }\n\n async deleteSchedule(schedule: Schedule, exportId: IdReference) {\n return await this.updateSchedules(exportId, [schedule], []);\n }\n\n /**\n * Removes report configuration.\n *\n * Note: fallback strategy is based on error code returned by backend\n * in case of missing subscription for report-agent microservice.\n * @param config entity of report configuration\n * @returns Response wrapped in [[IFetchResponse]]\n */\n async removeConfiguration(config: IIdentified): Promise<IFetchResponse> {\n let res: IFetchResponse;\n if (!this.isReportAgentSubscribed) {\n res = await this.fallbackConfigurationRemoval(config);\n } else {\n res = await this.normalConfigurationRemoval(config);\n if (res.status === 404) {\n const data = await res.json();\n if (\n data &&\n data.error &&\n data.error.toLowerCase() === this.REPORT_AGENT_NOT_SUBSCRIBED_EXPECTED_ERROR_LOWER_CASE\n ) {\n res = await this.fallbackConfigurationRemoval(config);\n this.isReportAgentSubscribed = false;\n }\n }\n }\n return res;\n }\n\n async normalConfigurationRemoval(config: IIdentified): Promise<IFetchResponse> {\n const url = `${this.microserviceUrl}/config/${config.id}`;\n return await this.client.fetch(url, { method: 'DELETE' });\n }\n\n async fallbackConfigurationRemoval(config: IIdentified): Promise<IFetchResponse> {\n let res;\n try {\n res = (await this.inventoryService.delete(config)).res;\n } catch (e) {\n // this could be an error related to not existing object or anything else which makes request return error status code\n // in case of concurrent removal everything is fine, therefor warning message. But it might not recover from some errors\n this.alertService.addServerFailure(e, 'warning');\n }\n return res;\n }\n}\n","import { IManagedObject } from '@c8y/client';\n\nexport interface Export extends IManagedObject {\n c8y_ScheduleConfiguration: Schedule[];\n}\n\nexport interface Schedule {\n timestamp: number;\n emailConfig: EmailConfig;\n cronConfig: CronConfig;\n}\n\nexport interface EmailConfig {\n to: string[];\n cc: string[];\n bcc: string[];\n replyTo: string;\n text: string;\n subject: string;\n}\n\nexport interface CronConfig {\n month: string;\n hour: string;\n weekday: string;\n day: string;\n minute: string;\n}\n\nexport interface EmittedCron {\n cron: string;\n valid: boolean;\n}\n\nexport interface EmitterPayload {\n success: boolean;\n message: string;\n schedule: Schedule;\n}\n\nexport enum ActionType {\n CREATE = 'create',\n EDIT = 'edit',\n DUPLICATE = 'duplicate'\n}\n\nexport enum Base {\n Initial = 1,\n Hour,\n Day,\n Week,\n Month,\n Year\n}\n","import { Injectable } from '@angular/core';\nimport { CronConfig, Base } from './export-schedules.interface';\nimport { TranslateService } from '@ngx-translate/core';\nimport { formatDate } from '@angular/common';\nimport { gettext } from '@c8y/ngx-components';\n\n@Injectable()\nexport class CronService {\n daysOfWeekPosix: any[] = [];\n daysOfMonth = [\n { value: '1', label: '1.' },\n { value: '2', label: '2.' },\n { value: '3', label: '3.' },\n { value: '4', label: '4.' },\n { value: '5', label: '5.' },\n { value: '6', label: '6.' },\n { value: '7', label: '7.' },\n { value: '8', label: '8.' },\n { value: '9', label: '9.' },\n { value: '10', label: '10.' },\n { value: '11', label: '11.' },\n { value: '12', label: '12.' },\n { value: '13', label: '13.' },\n { value: '14', label: '14.' },\n { value: '15', label: '15.' },\n { value: '16', label: '16.' },\n { value: '17', label: '17.' },\n { value: '18', label: '18.' },\n { value: '19', label: '19.' },\n { value: '20', label: '20.' },\n { value: '21', label: '21.' },\n { value: '22', label: '22.' },\n { value: '23', label: '23.' },\n { value: '24', label: '24.' },\n { value: '25', label: '25.' },\n { value: '26', label: '26.' },\n { value: '27', label: '27.' },\n { value: '28', label: '28.' },\n { value: '29', label: '29.' },\n { value: '30', label: '30.' },\n { value: '31', label: '31.' }\n ];\n months: any[] = [];\n hours: any[] = [];\n minutes: any[] = [];\n intervals = [\n { value: 2, label: gettext('Hour') },\n { value: 3, label: gettext('Day') },\n { value: 4, label: gettext('Week') },\n { value: 5, label: gettext('Month') },\n { value: 6, label: gettext('Year') }\n ];\n constructor(private translateService: TranslateService) {\n for (let x = 0; x < 24; x++) {\n this.hours.push({ value: x.toString(), label: `${x}` });\n }\n for (let x = 0; x < 60; x = x + 5) {\n this.minutes.push({ value: x.toString(), label: `${x}` });\n }\n\n for (let x = 0; x < 7; x++) {\n this.daysOfWeekPosix.push({\n value: x.toString(),\n label: this.getWeekDayName({ weekday: x } as unknown as CronConfig)\n });\n }\n\n for (let x = 1; x < 13; x++) {\n this.months.push({\n value: x.toString(),\n label: this.getMonthName({ month: x } as unknown as CronConfig)\n });\n }\n }\n\n generateCron(cronConfig: CronConfig) {\n let cron = '';\n cron = cronConfig.minute ? `${cronConfig.minute}` : '*';\n cron += cronConfig.hour ? ` ${cronConfig.hour}` : ' *';\n cron += cronConfig.day ? ` ${cronConfig.day}` : ' *';\n cron += cronConfig.month ? ` ${cronConfig.month}` : ' *';\n cron += cronConfig.weekday ? ` ${cronConfig.weekday}` : ' *';\n\n return cron;\n }\n\n generateCronConfig(cron: string) {\n const parts = cron.split(/\\s+/);\n const cronConfig: CronConfig = {\n minute: parts[0],\n hour: parts[1],\n day: parts[2],\n month: parts[3],\n weekday: parts[4]\n };\n\n return cronConfig;\n }\n\n getBase(cronConfig: CronConfig) {\n let base: Base = Base.Initial;\n\n if (\n cronConfig.minute !== '*' &&\n cronConfig.hour === '*' &&\n cronConfig.day === '*' &&\n cronConfig.month === '*' &&\n cronConfig.weekday === '*'\n ) {\n base = Base.Hour;\n } else if (\n cronConfig.minute !== '*' &&\n cronConfig.hour !== '*' &&\n cronConfig.day === '*' &&\n cronConfig.month === '*' &&\n cronConfig.weekday === '*'\n ) {\n base = Base.Day;\n } else if (\n cronConfig.minute !== '*' &&\n cronConfig.hour !== '*' &&\n cronConfig.day === '*' &&\n cronConfig.month === '*' &&\n cronConfig.weekday !== '*'\n ) {\n base = Base.Week;\n } else if (\n cronConfig.minute !== '*' &&\n cronConfig.hour !== '*' &&\n cronConfig.day !== '*' &&\n cronConfig.month === '*' &&\n cronConfig.weekday === '*'\n ) {\n base = Base.Month;\n } else if (\n cronConfig.minute !== '*' &&\n cronConfig.hour !== '*' &&\n cronConfig.day !== '*' &&\n cronConfig.month !== '*' &&\n cronConfig.weekday === '*'\n ) {\n base = Base.Year;\n } else {\n // cronConfig invalid\n }\n\n return base;\n }\n\n validateModels(base: Base, cronConfig: CronConfig) {\n let valid: boolean;\n switch (base) {\n case Base.Initial: // Please select\n valid = false;\n break;\n case Base.Hour:\n if (cronConfig.minute !== '*') {\n valid = true;\n } else {\n valid = false;\n }\n break;\n case Base.Day:\n if (cronConfig.minute !== '*' && cronConfig.hour !== '*') {\n valid = true;\n } else {\n valid = false;\n }\n break;\n case Base.Week:\n if (cronConfig.minute !== '*' && cronConfig.hour !== '*' && cronConfig.weekday !== '*') {\n valid = true;\n } else {\n valid = false;\n }\n break;\n case Base.Month:\n if (cronConfig.minute !== '*' && cronConfig.hour !== '*' && cronConfig.day !== '*') {\n valid = true;\n } else {\n valid = false;\n }\n break;\n case Base.Year:\n if (\n cronConfig.minute !== '*' &&\n cronConfig.hour !== '*' &&\n cronConfig.day !== '*' &&\n cronConfig.month !== '*'\n ) {\n valid = true;\n } else {\n valid = false;\n }\n break;\n default:\n valid = false;\n }\n\n return valid;\n }\n\n clearNextModels(base: Base, cronConfig: CronConfig) {\n if (base === Base.Initial) {\n // please select, delete all\n // cron expression: every minute at second 0\n cronConfig.minute = '*';\n cronConfig.hour = '*';\n cronConfig.day = '*';\n cronConfig.month = '*';\n cronConfig.weekday = '*';\n } else if (base === Base.Hour) {\n // hour, don't delete minutes\n // cron expression: every hour, at whatever minute, at second 0\n cronConfig.minute = cronConfig.minute === '*' ? this.minutes[0].value : cronConfig.minute;\n cronConfig.hour = '*';\n cronConfig.day = '*';\n cronConfig.month = '*';\n cronConfig.weekday = '*';\n } else if (base === Base.Day) {\n // day, don't delete minutes and hours\n // cron expression: every day of every month, at whatever hour and minute, at second 0\n cronConfig.minute = cronConfig.minute === '*' ? this.minutes[0].value : cronConfig.minute;\n cronConfig.hour = cronConfig.hour === '*' ? this.hours[0].value : cronConfig.hour;\n cronConfig.day = '*';\n cronConfig.month = '*';\n cronConfig.weekday = '*';\n } else if (base === Base.Week) {\n // week, delete month and day\n // cron expression: every month, at whatever weekday, hour and minute, at second 0\n cronConfig.minute = cronConfig.minute === '*' ? this.minutes[0].value : cronConfig.minute;\n cronConfig.hour = cronConfig.hour === '*' ? this.hours[0].value : cronConfig.hour;\n cronConfig.day = '*';\n cronConfig.month = '*';\n cronConfig.weekday =\n cronConfig.weekday === '*' || cronConfig.weekday === '?'\n ? this.daysOfWeekPosix[0].value\n : cronConfig.weekday;\n } else if (base === Base.Month) {\n // month, delete month and weekday\n // cron expression: every month, at whatever day of month, hour and minute, at second 0\n cronConfig.minute = cronConfig.minute === '*' ? this.minutes[0].value : cronConfig.minute;\n cronConfig.hour = cronConfig.hour === '*' ? this.hours[0].value : cronConfig.hour;\n cronConfig.day = cronConfig.day === '*' ? this.daysOfMonth[0].value : cronConfig.day;\n cronConfig.month = '*';\n cronConfig.weekday = '*';\n } else if (base === Base.Year) {\n // year, delete weekday\n // cron expression: every year, at whatever month, day of month, hour and minute, at second 0\n cronConfig.minute = cronConfig.minute === '*' ? this.minutes[0].value : cronConfig.minute;\n cronConfig.hour = cronConfig.hour === '*' ? this.hours[0].value : cronConfig.hour;\n cronConfig.day = cronConfig.day === '*' ? this.daysOfMonth[0].value : cronConfig.day;\n cronConfig.month = cronConfig.month === '*' ? this.months[0].value : cronConfig.month;\n cronConfig.weekday = '*';\n }\n }\n\n getWeekDayName(cronConfig: CronConfig) {\n const date = new Date(0);\n const firstSundayDate = date.getDate() + 3; // because we know date 0 was on Thursday...\n date.setDate(firstSundayDate + parseInt(cronConfig.weekday, 10));\n return formatDate(date, 'EEEE', this.translateService.currentLang);\n }\n\n getMonthDayName(cronConfig: CronConfig) {\n let name = '';\n this.daysOfMonth.forEach(item => {\n if (item.value === cronConfig.day) {\n name = item.label;\n }\n });\n\n return name;\n }\n\n getMonthName(cronConfig: CronConfig) {\n const date = new Date(0);\n date.setMonth(parseInt(cronConfig.month, 10) - 1);\n return formatDate(date, 'LLLL', this.translateService.currentLang);\n }\n}\n","import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';\nimport { EmittedCron, CronConfig, Base } from './export-schedules.interface';\nimport { CronService } from './cron.service';\n\n@Component({\n selector: 'cron',\n templateUrl: './cron.component.html'\n})\nexport class CronComponent implements OnInit {\n @Input() cronIn: string;\n @Output() emitter: EventEmitter<EmittedCron> = new EventEmitter();\n emittedCron: EmittedCron = {\n valid: false,\n cron: ''\n };\n\n base: Base = Base.Initial;\n cronConfig: CronConfig;\n\n daysOfWeekPosix: any[];\n daysOfMonth: any[];\n months: any[];\n hours: any[];\n minutes: any[];\n intervals: any[];\n\n constructor(private cronService: CronService) {\n //\n }\n\n ngOnInit() {\n this.daysOfWeekPosix = this.cronService.daysOfWeekPosix;\n this.daysOfMonth = this.cronService.daysOfMonth;\n this.months = this.cronService.months;\n this.hours = this.cronService.hours;\n this.minutes = this.cronService.minutes;\n this.intervals = this.cronService.intervals;\n\n this.cronConfig = this.cronService.generateCronConfig(this.cronIn);\n this.base = this.cronService.getBase(this.cronConfig);\n }\n\n onChangeSelect() {\n this.cronService.clearNextModels(this.base, this.cronConfig);\n this.emittedCron.valid = this.cronService.validateModels(this.base, this.cronConfig);\n this.emittedCron.cron = this.cronService.generateCron(this.cronConfig);\n this.emitter.emit(this.emittedCron);\n }\n}\n","<div class=\"cron-wrap\">\n <div class=\"form-group smart-cron-job-every\">\n <label for=\"smart-cron-job-every\" class=\"control-label\" translate>Interval</label>\n <div>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"cron-select form-control\"\n id=\"smart-cron-job-every\"\n [(ngModel)]=\"base\"\n required=\"true\"\n (change)=\"onChangeSelect()\"\n >\n <option *ngIf=\"base === 1\" value=\"1\" translate>Select…</option>\n <option *ngFor=\"let baseInterval of intervals\" [ngValue]=\"baseInterval.value\">\n {{ baseInterval.label | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"form-group smart-cron-job-on col-md-6\" *ngIf=\"base == 4\">\n <label class=\"control-label\" for=\"smart-cron-job-on\" translate>Day</label>\n\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"cron-select form-control day-value\"\n id=\"smart-cron-job-on\"\n [(ngModel)]=\"cronConfig.weekday\"\n (change)=\"onChangeSelect()\"\n >\n <option *ngFor=\"let dayOfWeek of daysOfWeekPosix\" [ngValue]=\"dayOfWeek.value\">\n {{ dayOfWeek.label | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n\n <div class=\"form-group smart-cron-job-of col-md-6\" *ngIf=\"base == 6\">\n <label for=\"smart-cron-job-of\" class=\"control-label\" translate>Month</label>\n <div>\n <div class=\"c8y-select-wrapper\">\n <select\n id=\"smart-cron-job-of\"\n class=\"cron-select form-control month-value\"\n [(ngModel)]=\"cronConfig.month\"\n (change)=\"onChangeSelect()\"\n >\n <option *ngFor=\"let month of months\" [ngValue]=\"month.value\">\n {{ month.label | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n\n <div class=\"form-group smart-cron-job-on-the col-md-6\" *ngIf=\"base >= 5\">\n <label for=\"smart-cron-job-on-the\" class=\"control-label\" translate>Day</label>\n <div>\n <div class=\"c8y-select-wrapper\">\n <select\n id=\"smart-cron-job-on-the\"\n class=\"cron-select form-control day-of-month-value\"\n [(ngModel)]=\"cronConfig.day\"\n (change)=\"onChangeSelect()\"\n >\n <option *ngFor=\"let dayOfMonth of daysOfMonth\" [ngValue]=\"dayOfMonth.value\">\n {{ dayOfMonth.label | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"form-group smart-cron-job-at\" *ngIf=\"base >= 2\">\n <label for=\"smart-cron-job-at-hour\" class=\"control-label\">\n <span *ngIf=\"base >= 3\" translate>Time</span>\n <span *ngIf=\"base < 3\" translate>Minutes</span>\n </label>\n <div>\n <div class=\"form-inline\">\n <div class=\"c8y-select-wrapper\" *ngIf=\"base >= 3\">\n <select\n id=\"smart-cron-job-at-hour\"\n class=\"cron-select form-control hour-value\"\n [(ngModel)]=\"cronConfig.hour\"\n (change)=\"onChangeSelect()\"\n >\n <option *ngFor=\"let hour of hours\" [ngValue]=\"hour.value\">\n {{ hour.value | number: '2.0-0' }}\n </option>\n </select>\n <span></span>\n </div>\n <span *ngIf=\"base >= 3\">:</span>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"cron-select form-control minute-value\"\n id=\"smart-cron-job-at-minute\"\n [(ngModel)]=\"cronConfig.minute\"\n (change)=\"onChangeSelect()\"\n >\n <option *ngFor=\"let minute of minutes\" [ngValue]=\"minute.value\">\n {{ minute.value | number: '2.0-0' }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n </div>\n</div>\n","import { Component, OnInit, Output, EventEmitter } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { Schedule, ActionType } from './export-schedules.interface';\nimport { EmittedCron, EmitterPayload } from './export-schedules.interface';\nimport { CronService } from './cron.service';\nimport { cloneDeep } from 'lodash-es';\nimport { gettext } from '@c8y/ngx-components';\nimport { ReportsService } from './reports.service';\n\n@Component({\n selector: 'schedule-modal',\n templateUrl: './schedule-modal.component.html'\n})\nexport class ScheduleModalComponent implements OnInit {\n schedule: Schedule;\n oldSchedule: Schedule;\n @Output() emitter: EventEmitter<EmitterPayload> = new EventEmitter();\n exportId: number;\n actionType: ActionType;\n ActionType = ActionType;\n cronExpression = '* * * * *';\n validCron = false;\n emitterPayload: EmitterPayload = {\n success: false,\n message: '',\n schedule: { timestamp: undefined, emailConfig: undefined, cronConfig: undefined }\n };\n\n emailTo: string;\n emailCc: string;\n emailBcc: string;\n emailReplyTo: string;\n emailSubject: string;\n emailText: string;\n\n placeholdersInfo = gettext(\n 'Available placeholders: {tenant-domain}, {host}, {binaryId}. Whole link to downloadable file is: {tenant-domain}/inventory/binaries/{binaryId}.'\n );\n\n constructor(\n public reportsService: ReportsService,\n public modalRef: BsModalRef,\n private cronService: CronService\n ) {}\n\n ngOnInit() {\n this.oldSchedule = cloneDeep(this.schedule);\n this.populateEmailFieldsFromSchedule(this.schedule);\n this.cronExpression = this.cronService.generateCron(this.schedule.cronConfig);\n this.validCron = this.cronService.validateModels(\n this.cronService.getBase(this.schedule.cronConfig),\n this.schedule.cronConfig\n );\n }\n\n populateEmailFieldsFromSchedule(schedule: Schedule) {\n if (schedule.emailConfig.to && schedule.emailConfig.to.length) {\n this.emailTo = schedule.emailConfig.to.toString();\n }\n if (schedule.emailConfig.cc && schedule.emailConfig.cc.length) {\n this.emailCc = schedule.emailConfig.cc.toString();\n }\n if (schedule.emailConfig.bcc && schedule.emailConfig.bcc.length) {\n this.emailBcc = schedule.emailConfig.bcc.toString();\n }\n if (schedule.emailConfig.replyTo) {\n this.emailReplyTo = schedule.emailConfig.replyTo;\n }\n if (schedule.emailConfig.subject) {\n this.emailSubject = schedule.emailConfig.subject;\n }\n if (schedule.emailConfig.text) {\n this.emailText = schedule.emailConfig.text;\n }\n }\n\n save() {\n this.populateScheduleFromCronExpression();\n this.populateScheduleFromEmailFields();\n if (this.actionType === ActionType.CREATE || this.actionType === ActionType.DUPLICATE) {\n const date = new Date();\n const timestamp = date.getTime();\n this.schedule.timestamp = timestamp;\n }\n this.emitterPayload.success = true;\n this.emitterPayload.schedule = this.schedule;\n this.modalRef.hide();\n // signal to the parent component to update list\n this.emitter.emit(this.emitterPayload);\n }\n\n cancel() {\n this.modalRef.hide();\n }\n\n getCron(cron: EmittedCron) {\n this.validCron = cron.valid;\n if (cron.valid) {\n this.cronExpression = cron.cron;\n }\n }\n\n populateScheduleFromCronExpression() {\n this.schedule.cronConfig = this.cronService.generateCronConfig(this.cronExpression);\n }\n\n convertStringOfEmailsToArray(stringOfEmails: string) {\n const arr = [];\n if (stringOfEmails) {\n const parts = stringOfEmails.split(',');\n parts.forEach(item => {\n if (item) {\n arr.push(item);\n }\n });\n }\n return arr;\n }\n\n populateScheduleFromEmailFields() {\n this.schedule.emailConfig.to = this.emailTo\n ? this.convertStringOfEmailsToArray(this.emailTo)\n : null;\n this.schedule.emailConfig.cc = this.emailCc\n ? this.convertStringOfEmailsToArray(this.emailCc)\n : null;\n this.schedule.emailConfig.bcc = this.emailBcc\n ? this.convertStringOfEmailsToArray(this.emailBcc)\n : null;\n this.schedule.emailConfig.replyTo = this.emailReplyTo;\n this.schedule.emailConfig.subject = this.emailSubject;\n this.schedule.emailConfig.text = this.emailText;\n }\n}\n","<div class=\"modal-header dialog-header\">\n <i c8yIcon=\"c8y-report\"></i>\n <h4 id=\"modal-title\">\n <span *ngIf=\"actionType === ActionType.CREATE\" translate>New export schedule</span>\n <span *ngIf=\"actionType === ActionType.EDIT\" translate>Edit export schedule</span>\n <span *ngIf=\"actionType === ActionType.DUPLICATE\" translate>Duplicate export schedule</span>\n </h4>\n</div>\n\n<div class=\"modal-body\" id=\"modal-body\">\n <p class=\"lead text-center p-t-24 m-b-0\" translate>On schedule send export via email</p>\n</div>\n<div class=\"modal-inner-scroll smart-rule-control\">\n <form #scheduleForm=\"ngForm\" class=\"edit-smart-rule-details\">\n <div class=\"list-group\">\n <div class=\"list-group-item bg-level-1\">\n <div class=\"smart-list-icon-label\">\n <span class=\"dot bg-primary-light m-r-8\">1</span>\n <strong translate>Frequency</strong>\n </div>\n <div class=\"p-t-16\">\n <div class=\"form-group\">\n <cron [cronIn]=\"cronExpression\" (emitter)=\"getCron($event)\" name=\"cron\"></cron>\n </div>\n </div>\n </div>\n <div class=\"list-group-item\">\n <div class=\"smart-list-icon-label\">\n <span class=\"dot bg-primary-light m-r-8\">2</span>\n <div class=\"d-inline-block\">\n <strong translate>Send email</strong>\n <p class=\"help-block text-muted small p-absolute\">\n <i class=\"text-info m-r-4 text-14\" c8yIcon=\"info-circle\"></i>\n <span translate\n >Enter one or more valid email addresses, separated with a comma.</span\n >\n </p>\n </div>\n </div>\n <div class=\"p-t-24\">\n <div class=\"form-group\">\n <label class=\"control-label\" translate>Send to</label>\n <c8y-form-group>\n <input\n emails\n type=\"text\"\n class=\"form-control\"\n name=\"to\"\n [(ngModel)]=\"emailTo\"\n placeholder=\"{{\n 'e.g. joe.doe@example.com,john.smith@example.com`LOCALIZE`' | translate\n }}\"\n required\n />\n </c8y-form-group>\n </div>\n\n <div class=\"form-group\">\n <label class=\"control-label\" translate>CC</label>\n <c8y-form-group>\n <input\n emails\n type=\"text\"\n class=\"form-control span\"\n name=\"cc\"\n placeholder=\"{{\n 'e.g. joe.doe@example.com,john.smith@example.com`LOCALIZE`' | translate\n }}\"\n [(ngModel)]=\"emailCc\"\n />\n </c8y-form-group>\n </div>\n\n <div class=\"form-group\">\n <label class=\"control-label\" translate>BCC</label>\n <c8y-form-group>\n <input\n emails\n type=\"text\"\n class=\"form-control span\"\n name=\"bcc\"\n placeholder=\"{{\n 'e.g. joe.doe@example.com,john.smith@example.com`LOCALIZE`' | translate\n }}\"\n [(ngModel)]=\"emailBcc\"\n />\n </c8y-form-group>\n </div>\n\n <div class=\"form-group\">\n <label class=\"control-label\" translate>Reply to (single email address)</label>\n <c8y-form-group>\n <input\n email\n type=\"text\"\n class=\"form-control span\"\n name=\"replyTo\"\n placeholder=\"{{ 'e.g. joe.doe@example.com`LOCALIZE`' | translate }}\"\n [(ngModel)]=\"emailReplyTo\"\n />\n </c8y-form-group>\n </div>\n\n <div class=\"form-group\">\n <label class=\"control-label\" translate>Subject</label>\n <c8y-form-group>\n <input\n type=\"text\"\n class=\"form-control span\"\n name=\"subject\"\n [(ngModel)]=\"emailSubject\"\n placeholder=\"{{ 'e.g. Daily report' | translate }}\"\n required\n />\n </c8y-form-group>\n </div>\n\n <div class=\"form-group\">\n <label class=\"control-label\" translate>Message</label>\n <c8y-form-group>\n <textarea\n class=\"form-control\"\n name=\"text\"\n [(ngModel)]=\"emailText\"\n placeholder=\"{{ 'Message' | translate }}\"\n rows=\"4\"\n required\n ></textarea>\n <p class=\"help-block text-muted\">\n {{ placeholdersInfo | translate }}\n </p>\n </c8y-form-group>\n </div>\n </div>\n </div>\n </div>\n </form>\n</div>\n\n<div class=\"modal-footer\">\n <button class=\"btn btn-default\" (click)=\"cancel()\" title=\"{{ 'Cancel' | translate }}\">\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n (click)=\"save()\"\n [disabled]=\"!validCron || !scheduleForm.form.valid\"\n >\n <span>\n <span *ngIf=\"actionType === ActionType.CREATE\" title=\"{{ 'Create' | translate }}\">\n {{ 'Create' | translate }}\n </span>\n <span *ngIf=\"actionType === ActionType.EDIT\" title=\"{{ 'Save' | translate }}\">\n {{ 'Save' | translate }}\n </span>\n <span *ngIf=\"actionType === ActionType.DUPLICATE\" title=\"{{ 'Duplicate' | translate }}\">\n {{ 'Duplicate' | translate }}\n </span>\n </span>\n </button>\n</div>\n","import { Component, EventEmitter, Input, OnChanges, OnInit, Output } from '@angular/core';\nimport { Export, Schedule, EmitterPayload, ActionType } from './export-schedules.interface';\nimport { ReportsService } from './reports.service';\nimport { BsModalService, BsModalRef, ModalOptions } from 'ngx-bootstrap/modal';\nimport { ScheduleModalComponent } from './schedule-modal.component';\nimport { gettext, OptionsService, Permissions } from '@c8y/ngx-components';\nimport { cloneDeep } from 'lodash-es';\nimport { CronService } from './cron.service';\nimport { IdReference } from '@c8y/client';\nimport { TranslateService } from '@ngx-translate/core';\nimport { UserService } from '@c8y/client';\nimport { isEmpty } from 'lodash-es';\n@Component({\n selector: 'export-schedules',\n templateUrl: './export-schedules.component.html'\n})\nexport class ExportSchedulesComponent implements OnInit, OnChanges {\n @Input() set exportId(exportId: IdReference) {\n this._exportId = exportId;\n }\n\n @Output() onSchedulesUpdate = new EventEmitter<Schedule[]>();\n\n exp: Export;\n scheduleList: Schedule[] = [];\n initialSchedule: Schedule = {\n timestamp: null,\n emailConfig: {\n to: [],\n cc: [],\n bcc: [],\n replyTo: '',\n text: '',\n subject: ''\n },\n cronConfig: {\n minute: '0',\n hour: '0',\n day: '1',\n month: '1',\n weekday: '?'\n }\n };\n buttonLabels: any;\n listClass = 'interact-list';\n loadingStatus: any;\n sortType: string;\n sortReverse = false;\n isOpen: any = {};\n isFlipped: boolean;\n isEditMenuOpen = false;\n modalRef: BsModalRef;\n currentUserEmail = '';\n hasRequiredRole = false;\n private _exportId: IdReference;\n private defaultExportEmailTemplate = this.translateService.instant(\n gettext(\n 'File with exported data can be downloaded from {tenant-domain}/apps/cockpit/index.html#?download={binaryId}.'\n )\n );\n\n constructor(\n private reportsService: ReportsService,\n private bsModalService: BsModalService,\n public cronService: CronService,\n private translateService: TranslateService,\n private userService: UserService,\n private optionsService: OptionsService\n ) {\n this.loadingStatus = {\n inProgress: false,\n done: false,\n error: false\n };\n }\n\n async ngOnInit() {\n this.hasRequiredRole = await this.checkRole();\n this.getScheduleList(true);\n const currentUserEmail = await this.getCurrentUserEmail();\n this.initialSchedule.emailConfig.text = await this.optionsService.getTenantOption(\n 'configuration',\n 'export.data.mail.text'\n );\n if (isEmpty(this.initialSchedule.emailConfig.text)) {\n this.initialSchedule.emailConfig.text = await this.optionsService.getInheritedTenantOption(\n 'configuration',\n 'export.data.mail.text',\n this.defaultExportEmailTemplate\n );\n }\n this.initialSchedule.emailConfig.to = currentUserEmail;\n this.exp = await this.reportsService.getExport(this._exportId);\n this.initialSchedule.emailConfig.subject = this.translateService.instant(\n gettext('Export of \"{{expName}}\"'),\n { expName: this.exp.name }\n );\n }\n\n ngOnChanges() {\n this.translateButtonTitles();\n }\n\n translateButtonTitles() {\n this.buttonLabels = {\n edit: this.translateService.instant(gettext('Edit schedule')),\n editNoPermission: this.translateService.instant(gettext('Edit schedule - no permissions')),\n duplicate: this.translateService.instant(gettext('Duplicate schedule')),\n duplicateNoPermission: this.translateService.instant(\n gettext('Duplicate schedule - no permissions')\n ),\n delete: this.translateService.instant(gettext('Delete schedule')),\n deleteNoPermission: this.translateService.instant(gettext('Delete schedule - no permissions'))\n };\n }\n\n async getCurrentUserEmail() {\n const { data } = await this.userService.current();\n return data && data.email ? [data.email] : [];\n }\n async checkRole() {\n const { data } = await this.userService.current();\n const role = Permissions.ROLE_SCHEDULE_REPORT_ADMIN;\n const hasRole = this.userService.hasRole(data, role);\n return hasRole;\n }\n\n async getScheduleList(withProgress: boolean) {\n if (withProgress) {\n this.loadingStatus.inProgress = true;\n }\n this.scheduleList = await this.reportsService.getScheduleList(this._exportId);\n if (withProgress) {\n this.loadingStatus.inProgress = false;\n }\n }\n\n addSchedule() {\n this.openAddEditModal(this._exportId, this.initialSchedule, ActionType.CREATE);\n }\n\n editSchedule(schedule: Schedule, index: number, event: any) {\n if (this.hasRequiredRole) {\n event.preventDefault();\n this.openAddEditModal(this._exportId, schedule, ActionType.EDIT, index);\n }\n }\n\n duplicateSchedule(schedule: Schedule, event: any) {\n event.preventDefault();\n this.openAddEditModal(this._exportId, schedule, ActionType.DUPLICATE);\n }\n\n openAddEditModal(\n exportId: IdReference,\n schedule: Schedule,\n actionType: ActionType,\n index?: number\n ) {\n const payload = { actionType, exportId, schedule: cloneDeep(schedule) };\n const modalOptions = {\n class: 'modal-sm',\n ariaDescribedby: 'modal-body',\n ariaLabelledBy: 'modal-title',\n initialState: payload\n } as ModalOptions;\n this.modalRef = this.bsModalService.show(ScheduleModalComponent, modalOptions);\n this.modalRef.content.emitter.subscribe((load: EmitterPayload) =>\n this.getMessageFromModal(load, index)\n );\n }\n\n getMessageFromModal(payload: EmitterPayload, index?: number) {\n if (payload.success) {\n if (index !== undefined) {\n this.scheduleList[index] = payload.schedule;\n } else {\n this.scheduleList.push(payload.schedule);\n }\n this.onSchedulesUpdate.emit(this.scheduleList);\n }\n }\n\n removeSchedule(schedule: Schedule, index: number, event: any) {\n event.preventDefault();\n this.scheduleList.splice(index, 1);\n this.onSchedulesUpdate.emit(this.scheduleList);\n }\n}\n","<div>\n <div *ngIf=\"loadingStatus.inProgress\" class=\"d-flex a-i-center\">\n <c8y-loading></c8y-loading>\n </div>\n\n <div *ngIf=\"!loadingStatus.inProgress && loadingStatus.done && loadingStatus.error\">\n <div class=\"alert alert-warning max-width-100\" translate>Could not load schedules list.</div>\n </div>\n\n <div *ngIf=\"!loadingStatus.inProgress && !loadingStatus.done && !loadingStatus.error\">\n <c8y-ui-empty-state\n *ngIf=\"!scheduleList.length\"\n [icon]=\"'c8y-report'\"\n [title]=\"'No export schedules defined.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n\n <div class=\"c8y-list__group\" *ngIf=\"scheduleList.length\">\n <div class=\"c8y-list__item hidden-xs\">\n <div class=\"c8y-list__item__block\">\n <div class=\"c8y-list__item__icon\">\n <i class=\"p-l-24\"></i>\n </div>\n <div class=\"c8y-list__item__body\">\n <div class=\"d-flex\">\n <div class=\"col-sm-6\">\n <label class=\"m-0\">\n {{ 'Description' | translate }}\n </label>\n </div>\n <div class=\"col-sm-6 m-r-40\">\n <label class=\"m-0\">\n {{ 'Frequency' | translate }}\n </label>\n </div>\n </div>\n </div>\n <span></span>\n </div>\n </div>\n\n <div\n class=\"c8y-list__item pointer\"\n *ngFor=\"let schedule of scheduleList; index as i\"\n (click)=\"editSchedule(schedule, i, $event)\"\n >\n <div class=\"c8y-list__item__block\">\n <div class=\"c8y-list__item__icon\">\n <i c8yIcon=\"c8y-report\" class=\"c8y-icon-duocolor\"></i>\n </div>\n <div class=\"c8y-list__item__body d-flex\">\n <div class=\"col-sm-6 col-xs-6\">\n <div class=\"text-truncate\" title=\"{{ schedule.emailConfig.subject }}\">\n {{ schedule.emailConfig.subject }}\n </div>\n </div>\n <div class=\"col-sm-6 col-xs-6\">\n <div class=\"d-flex a-i-baseline\">\n <i c8yIcon=\"calendar\" class=\"text-muted m-r-4\"></i>\n <span class=\"smart-rule-information\">\n <span\n *ngIf=\"cronService.getBase(schedule.cronConfig) === 2\"\n ngNonBindable\n translate\n [translateParams]=\"{ minutes: schedule.cronConfig.minute | number: '2.0-0' }\"\n >\n Hourly: {{ minutes }} minute(s) past the hour.\n </span>\n <span\n *ngIf=\"cronService.getBase(schedule.cronConfig) === 3\"\n ngNonBindable\n translate\n [translateParams]=\"{\n hour: schedule.cronConfig.hour | number: '2.0-0',\n minutes: schedule.cronConfig.minute | number: '2.0-0'\n }\"\n >\n Daily: at {{ hour }}:{{ minutes }}.\n </span>\n <span\n *ngIf=\"cronService.getBase(schedule.cronConfig) === 4\"\n ngNonBindable\n translate\n [translateParams]=\"{\n weekDay: cronService.getWeekDayName(schedule.cronConfig),\n hour: schedule.cronConfig.hour | number: '2.0-0',\n minutes: schedule.cronConfig.minute | number: '2.0-0'\n }\"\n >\n Weekly: {{ weekDay }}, at {{ hour }}:{{ minutes }}.\n </span>\n <span\n *ngIf=\"cronService.getBase(schedule.cronConfig) === 5\"\n ngNonBindable\n translate\n [translateParams]=\"{\n monthDay: cronService.getMonthDayName(schedule.cronConfig),\n hour: schedule.cronConfig.hour | number: '2.0-0',\n minutes: schedule.cronConfig.minute | number: '2.0-0'\n }\"\n >\n Monthly: {{ monthDay }} day of the month, at {{ hour }}:{{ minutes }}.\n </span>\n <span\n *ngIf=\"cronService.getBase(schedule.cronConfig) === 6\"\n ngNonBindable\n translate\n [translateParams]=\"{\n month: cronService.getMonthName(schedule.cronConfig),\n monthDay: cronService.getMonthDayName(schedule.cronConfig),\n hour: schedule.cronConfig.hour | number: '2.0-0',\n minutes: schedule.cronConfig.minute | number: '2.0-0'\n }\"\n >\n Yearly: {{ month }}, {{ monthDay }} day of the month, at {{ hour }}:{{\n minutes\n }}.\n </span>\n </span>\n </div>\n </div>\n </div>\n <div class=\"c8y-list__item__actions\" (click)=\"$event.stopPropagation()\">\n <div class=\"settings dropdown\" dropdown>\n <button\n class=\"dropdown-toggle c8y-dropdown\"\n type=\"button\"\n title=\"{{ 'Actions' | translate }}\"\n dropdownToggle\n >\n <i [c8yIcon]=\"'ellipsis-v'\"></i>\n </button>\n <ul role=\"list\" class=\"dropdown-menu dropdown-menu-right\" *dropdownMenu>\n <li role=\"menuitem\">\n <button\n type=\"button\"\n [title]=\"hasRequiredRole ? buttonLabels.edit : buttonLabels.editNoPermission\"\n (click)=\"editSchedule(schedule, i, $event)\"\n [disabled]=\"!hasRequiredRole\"\n >\n <i [c8yIcon]=\"'pencil'\"></i>\n {{ 'Edit' | translate }}\n </button>\n </li>\n <li role=\"menuitem\">\n <button\n type=\"button\"\n [title]=\"\n hasRequiredRole ? buttonLabels.duplicate : buttonLabels.duplicateNoPermission\n \"\n (click)=\"duplicateSchedule(schedule, $event)\"\n [disabled]=\"!hasRequiredRole\"\n >\n <i [c8yIcon]=\"'copy'\"></i>\n {{ 'Duplicate' | translate }}\n </button>\n </li>\n <li role=\"menuitem\">\n <button\n type=\"button\"\n [title]=\"\n hasRequiredRole ? buttonLabels.delete : buttonLabels.deleteNoPermission\n \"\n (click)=\"removeSchedule(schedule, i, $event)\"\n [disabled]=\"!hasRequiredRole\"\n >\n <i [c8yIcon]=\"'delete'\"></i>\n {{ 'Delete' | translate }}\n </button>\n </li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"alert alert-warning max-width-100\" *ngIf=\"!hasRequiredRole\" role=\"alert\" translate>\n You don't have the permission required to schedule exports.\n </div>\n <button\n class=\"btn btn-default m-t-16\"\n type=\"button\"\n title=\"{{ 'Add schedule' | translate }}\"\n (click)=\"addSchedule()\"\n [disabled]=\"!hasRequiredRole\"\n >\n <i [c8yIcon]=\"'plus-circle'\"></i>\n {{ 'Add schedule' | translate }}\n </button>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CoreModule, FormsModule } from '@c8y/ngx-components';\nimport { ReportsService } from './reports.service';\nimport { CronService } from './cron.service';\nimport { ExportSchedulesComponent } from './export-schedules.component';\nimport { ScheduleModalComponent } from './schedule-modal.component';\nimport { CronComponent } from './cron.component';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\n\n/**\n * The angular module definition for reports.\n * @exports ExportSchedulesComponent\n * @exports ScheduleModalComponent\n * @exports CronComponent\n */\n@NgModule({\n declarations: [ExportSchedulesComponent, ScheduleModalComponent, CronComponent],\n imports: [CoreModule, FormsModule, BsDropdownModule, TooltipModule],\n entryComponents: [ExportSchedulesComponent, ScheduleModalComponent, CronComponent],\n providers: [ReportsService, CronService],\n exports: [ExportSchedulesComponent, ScheduleModalComponent, CronComponent]\n})\nexport class ReportsModule {}\n","import { downgradeComponent } from '@angular/upgrade/static';\nimport { ExportSchedulesComponent } from '../export-schedules.component';\nexport const exportSchedulesComponent = downgradeComponent({\n component: ExportSchedulesComponent\n});\n","import { downgradeInjectable } from '@angular/upgrade/static';\nimport { ReportsService } from '../reports.service';\nexport const reportsService = downgradeInjectable(ReportsService);\n","import * as angular from 'angular';\nimport { registerNgModule } from '@c8y/ng1-modules';\nimport { exportSchedulesComponent } from './downgraded.components';\nimport { reportsService } from './downgraded.services';\n\nconst NAME = 'c8y.upgrade.reports';\n\nangular\n .module(NAME, [])\n .directive('c8yExportSchedules', exportSchedulesComponent)\n .service('c8yReportsService', reportsService);\n\nexport const ng1Modules = [NAME];\n\nregisterNgModule(ng1Modules);\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i1.CronService","i2","i3","i4","i1.ReportsService","i3.CronService","i5","i6","i7.CronComponent","i7"],"mappings":"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"}
@@ -4,7 +4,7 @@ import * as i1 from '@angular/router';
4
4
  import * as i5 from '@c8y/client';
5
5
  import { OperationStatus } from '@c8y/client';
6
6
  import * as i2 from '@c8y/ngx-components';
7
- import { gettext, hookRoute, ViewContext, CoreModule, Status, FilterInputComponent, memoize, NavigatorNode, hookNavigator, FormsModule } from '@c8y/ngx-components';
7
+ import { gettext, Permissions, hookRoute, ViewContext, CoreModule, Status, FilterInputComponent, memoize, NavigatorNode, hookNavigator, FormsModule } from '@c8y/ngx-components';
8
8
  import * as i3 from '@c8y/ngx-components/repository/shared';
9
9
  import { DeviceConfigurationOperation, RepositoryType, SharedRepositoryModule } from '@c8y/ngx-components/repository/shared';
10
10
  import * as i6 from '@angular/common';
@@ -377,8 +377,8 @@ class ConfigurationPreviewComponent {
377
377
  }
378
378
  hasPermission() {
379
379
  return this.user.hasAnyRole(this.appState.currentUser.value, [
380
- 'ROLE_INVENTORY_ADMIN',
381
- 'ROLE_INVENTORY_CREATE'
380
+ Permissions.ROLE_INVENTORY_ADMIN,
381
+ Permissions.ROLE_INVENTORY_CREATE
382
382
  ]);
383
383
  }
384
384
  ngOnDestroy() {