@c8y/ngx-components 1021.7.0 → 1021.13.3

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 (139) hide show
  1. package/alarms/alarms-date-filter.component.d.ts +34 -0
  2. package/alarms/alarms-date-filter.component.d.ts.map +1 -0
  3. package/alarms/alarms-filter.component.d.ts +2 -1
  4. package/alarms/alarms-filter.component.d.ts.map +1 -1
  5. package/alarms/alarms-view.service.d.ts +4 -2
  6. package/alarms/alarms-view.service.d.ts.map +1 -1
  7. package/alarms/alarms.component.d.ts +3 -1
  8. package/alarms/alarms.component.d.ts.map +1 -1
  9. package/alarms/alarms.model.d.ts +17 -1
  10. package/alarms/alarms.model.d.ts.map +1 -1
  11. package/alarms/alarms.module.d.ts +15 -13
  12. package/alarms/alarms.module.d.ts.map +1 -1
  13. package/branding/shared/data/store-branding.service.d.ts +5 -0
  14. package/branding/shared/data/store-branding.service.d.ts.map +1 -1
  15. package/branding/shared/lazy/branding/branding.component.d.ts.map +1 -1
  16. package/cockpit-config/cockpit-config.model.d.ts +1 -0
  17. package/cockpit-config/cockpit-config.model.d.ts.map +1 -1
  18. package/context-dashboard/dashboard-manager/dashboard-manager.module.d.ts.map +1 -1
  19. package/core/common/options.service.d.ts +1 -1
  20. package/core/common/options.service.d.ts.map +1 -1
  21. package/core/dashboard/dashboard.module.d.ts +19 -19
  22. package/core/dashboard/widget-change-event.model.d.ts +1 -1
  23. package/core/dashboard/widget-change-event.model.d.ts.map +1 -1
  24. package/core/dashboard/wiget-time-context/widget-time-context-helper.service.d.ts +2 -1
  25. package/core/dashboard/wiget-time-context/widget-time-context-helper.service.d.ts.map +1 -1
  26. package/core/dashboard/wiget-time-context/widget-time-context-query.service.d.ts.map +1 -1
  27. package/core/dashboard/wiget-time-context/widget-time-context.component.d.ts +2 -1
  28. package/core/dashboard/wiget-time-context/widget-time-context.component.d.ts.map +1 -1
  29. package/core/dashboard/wiget-time-context/widget-time-context.model.d.ts +1 -14
  30. package/core/dashboard/wiget-time-context/widget-time-context.model.d.ts.map +1 -1
  31. package/core/date-time-picker/date-time-picker.component.d.ts.map +1 -1
  32. package/core/forms/validation-pattern.d.ts +4 -0
  33. package/core/forms/validation-pattern.d.ts.map +1 -1
  34. package/core/plugins/plugins.service.d.ts +1 -1
  35. package/core/plugins/plugins.service.d.ts.map +1 -1
  36. package/esm2022/alarm-event-selector/alarm-event-selection-list/alarm-event-selection-list.component.mjs +4 -4
  37. package/esm2022/alarm-event-selector/alarm-event-selector-list-item/alarm-event-selector-list-item.component.mjs +3 -3
  38. package/esm2022/alarms/alarms-date-filter.component.mjs +139 -0
  39. package/esm2022/alarms/alarms-filter.component.mjs +11 -5
  40. package/esm2022/alarms/alarms-type-filter.component.mjs +3 -3
  41. package/esm2022/alarms/alarms-view.service.mjs +15 -2
  42. package/esm2022/alarms/alarms.component.mjs +12 -6
  43. package/esm2022/alarms/alarms.model.mjs +17 -1
  44. package/esm2022/alarms/alarms.module.mjs +11 -4
  45. package/esm2022/assets-navigator/asset-selector/asset-selector-node.component.mjs +3 -3
  46. package/esm2022/branding/shared/data/store-branding.service.mjs +24 -1
  47. package/esm2022/branding/shared/lazy/branding/branding.component.mjs +3 -1
  48. package/esm2022/cockpit-config/cockpit-config.model.mjs +3 -2
  49. package/esm2022/cockpit-config/feature-config.component.mjs +3 -3
  50. package/esm2022/context-dashboard/dashboard-manager/dashboard-manager.module.mjs +5 -3
  51. package/esm2022/core/action-bar/action-bar.component.mjs +3 -3
  52. package/esm2022/core/common/options.service.mjs +3 -3
  53. package/esm2022/core/dashboard/dashboard.module.mjs +5 -4
  54. package/esm2022/core/dashboard/widget-change-event.model.mjs +1 -1
  55. package/esm2022/core/dashboard/wiget-time-context/widget-time-context-helper.service.mjs +3 -2
  56. package/esm2022/core/dashboard/wiget-time-context/widget-time-context-query.service.mjs +1 -1
  57. package/esm2022/core/dashboard/wiget-time-context/widget-time-context.component.mjs +6 -5
  58. package/esm2022/core/dashboard/wiget-time-context/widget-time-context.model.mjs +3 -47
  59. package/esm2022/core/date-time-picker/date-time-picker.component.mjs +7 -1
  60. package/esm2022/core/docs/defaults.items.mjs +2 -2
  61. package/esm2022/core/forms/validation-pattern.mjs +5 -1
  62. package/esm2022/core/list-display-switch/list-display-switch.component.mjs +3 -3
  63. package/esm2022/core/plugins/plugins.service.mjs +3 -3
  64. package/esm2022/core/router/context-route.guard.mjs +2 -2
  65. package/esm2022/core/search/search-input.component.mjs +3 -3
  66. package/esm2022/interval-picker/c8y-ngx-components-interval-picker.mjs +5 -0
  67. package/esm2022/interval-picker/index.mjs +3 -0
  68. package/esm2022/interval-picker/interval-picker.component.mjs +68 -0
  69. package/esm2022/interval-picker/interval-picker.model.mjs +47 -0
  70. package/esm2022/operations/bulk-operation-scheduler/operation-scheduler.component.mjs +7 -5
  71. package/esm2022/search/search-action.component.mjs +3 -3
  72. package/esm2022/tenants/custom-properties/custom-properties.component.mjs +90 -0
  73. package/esm2022/tenants/custom-properties/custom-properties.service.mjs +76 -0
  74. package/esm2022/tenants/custom-properties/custom-property-field/custom-property-field.component.mjs +29 -0
  75. package/esm2022/tenants/index.mjs +2 -1
  76. package/esm2022/tenants/tenant-limits/tenant-limits-definitions.mjs +92 -0
  77. package/esm2022/tenants/tenant-limits/tenant-limits.component.mjs +124 -0
  78. package/esm2022/tenants/tenants.module.mjs +42 -4
  79. package/esm2022/widgets/implementations/help-and-service-widget/help-and-service-view/help-and-service-view.component.mjs +2 -2
  80. package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs +5 -5
  81. package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs.map +1 -1
  82. package/fesm2022/c8y-ngx-components-alarms.mjs +184 -16
  83. package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
  84. package/fesm2022/c8y-ngx-components-assets-navigator.mjs +2 -2
  85. package/fesm2022/c8y-ngx-components-assets-navigator.mjs.map +1 -1
  86. package/fesm2022/c8y-ngx-components-branding-shared-data.mjs +23 -0
  87. package/fesm2022/c8y-ngx-components-branding-shared-data.mjs.map +1 -1
  88. package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs +2 -0
  89. package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs.map +1 -1
  90. package/fesm2022/c8y-ngx-components-cockpit-config.mjs +4 -3
  91. package/fesm2022/c8y-ngx-components-cockpit-config.mjs.map +1 -1
  92. package/fesm2022/c8y-ngx-components-context-dashboard.mjs +4 -2
  93. package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  94. package/fesm2022/c8y-ngx-components-interval-picker.mjs +120 -0
  95. package/fesm2022/c8y-ngx-components-interval-picker.mjs.map +1 -0
  96. package/fesm2022/c8y-ngx-components-operations-bulk-operation-scheduler.mjs +6 -4
  97. package/fesm2022/c8y-ngx-components-operations-bulk-operation-scheduler.mjs.map +1 -1
  98. package/fesm2022/c8y-ngx-components-search.mjs +2 -2
  99. package/fesm2022/c8y-ngx-components-search.mjs.map +1 -1
  100. package/fesm2022/c8y-ngx-components-tenants.mjs +416 -11
  101. package/fesm2022/c8y-ngx-components-tenants.mjs.map +1 -1
  102. package/fesm2022/c8y-ngx-components-widgets-implementations-help-and-service-widget.mjs +1 -1
  103. package/fesm2022/c8y-ngx-components-widgets-implementations-help-and-service-widget.mjs.map +1 -1
  104. package/fesm2022/c8y-ngx-components.mjs +292 -372
  105. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  106. package/interval-picker/c8y-ngx-components-interval-picker.d.ts.map +1 -0
  107. package/interval-picker/index.d.ts +3 -0
  108. package/interval-picker/index.d.ts.map +1 -0
  109. package/{core/dashboard/wiget-time-context/interval-picker → interval-picker}/interval-picker.component.d.ts +10 -2
  110. package/interval-picker/interval-picker.component.d.ts.map +1 -0
  111. package/interval-picker/interval-picker.model.d.ts +15 -0
  112. package/interval-picker/interval-picker.model.d.ts.map +1 -0
  113. package/locales/de.po +4 -1
  114. package/locales/en.po +3 -0
  115. package/locales/en_US.po +3 -0
  116. package/locales/es.po +3 -0
  117. package/locales/fr.po +3 -0
  118. package/locales/ja_JP.po +3 -0
  119. package/locales/locales.pot +47 -3
  120. package/locales/nl.po +3 -0
  121. package/locales/pl.po +3 -0
  122. package/locales/pt_BR.po +3 -0
  123. package/operations/bulk-operation-scheduler/operation-scheduler.component.d.ts.map +1 -1
  124. package/package.json +1 -1
  125. package/tenants/custom-properties/custom-properties.component.d.ts +26 -0
  126. package/tenants/custom-properties/custom-properties.component.d.ts.map +1 -0
  127. package/tenants/custom-properties/custom-properties.service.d.ts +26 -0
  128. package/tenants/custom-properties/custom-properties.service.d.ts.map +1 -0
  129. package/tenants/custom-properties/custom-property-field/custom-property-field.component.d.ts +10 -0
  130. package/tenants/custom-properties/custom-property-field/custom-property-field.component.d.ts.map +1 -0
  131. package/tenants/index.d.ts +1 -0
  132. package/tenants/index.d.ts.map +1 -1
  133. package/tenants/tenant-limits/tenant-limits-definitions.d.ts +117 -0
  134. package/tenants/tenant-limits/tenant-limits-definitions.d.ts.map +1 -0
  135. package/tenants/tenant-limits/tenant-limits.component.d.ts +39 -0
  136. package/tenants/tenant-limits/tenant-limits.component.d.ts.map +1 -0
  137. package/tenants/tenants.module.d.ts.map +1 -1
  138. package/core/dashboard/wiget-time-context/interval-picker/interval-picker.component.d.ts.map +0 -1
  139. package/esm2022/core/dashboard/wiget-time-context/interval-picker/interval-picker.component.mjs +0 -55
@@ -0,0 +1,120 @@
1
+ import * as i0 from '@angular/core';
2
+ import { forwardRef, Component, Input } from '@angular/core';
3
+ import { NG_VALUE_ACCESSOR, FormsModule, ReactiveFormsModule } from '@angular/forms';
4
+ import * as i2 from '@angular/common';
5
+ import { CommonModule } from '@angular/common';
6
+ import { BsDropdownModule } from 'ngx-bootstrap/dropdown';
7
+ import { A11yModule } from '@angular/cdk/a11y';
8
+ import { gettext } from '@c8y/ngx-components/gettext';
9
+ import * as i1 from '@ngx-translate/core';
10
+
11
+ const todayDate = new Date();
12
+ var TimeSpanInMs;
13
+ (function (TimeSpanInMs) {
14
+ TimeSpanInMs[TimeSpanInMs["MINUTE"] = 60000] = "MINUTE";
15
+ TimeSpanInMs[TimeSpanInMs["HOUR"] = 3600000] = "HOUR";
16
+ TimeSpanInMs[TimeSpanInMs["DAY"] = 86400000] = "DAY";
17
+ TimeSpanInMs[TimeSpanInMs["WEEK"] = 604800000] = "WEEK";
18
+ TimeSpanInMs[TimeSpanInMs["MONTH"] = todayDate.valueOf() - new Date(todayDate.setMonth(todayDate.getMonth() - 1)).valueOf()] = "MONTH";
19
+ })(TimeSpanInMs || (TimeSpanInMs = {}));
20
+ const INTERVALS = [
21
+ {
22
+ id: 'minutes',
23
+ title: gettext('Last minute'),
24
+ timespanInMs: TimeSpanInMs.MINUTE
25
+ },
26
+ {
27
+ id: 'hours',
28
+ title: gettext('Last hour'),
29
+ timespanInMs: TimeSpanInMs.HOUR
30
+ },
31
+ {
32
+ id: 'days',
33
+ title: gettext('Last day'),
34
+ timespanInMs: TimeSpanInMs.DAY
35
+ },
36
+ {
37
+ id: 'weeks',
38
+ title: gettext('Last week'),
39
+ timespanInMs: TimeSpanInMs.WEEK
40
+ },
41
+ {
42
+ id: 'months',
43
+ title: gettext('Last month'),
44
+ timespanInMs: TimeSpanInMs.MONTH
45
+ },
46
+ { id: 'custom', title: gettext('Custom') }
47
+ ];
48
+ const INTERVAL_TITLES = {
49
+ minutes: gettext('Last minute'),
50
+ hours: gettext('Last hour'),
51
+ days: gettext('Last day'),
52
+ weeks: gettext('Last week'),
53
+ months: gettext('Last month'),
54
+ custom: gettext('Custom')
55
+ };
56
+
57
+ class IntervalPickerComponent {
58
+ constructor(translate) {
59
+ this.translate = translate;
60
+ this.INTERVALS = INTERVALS;
61
+ this.touched = false;
62
+ this.disabled = false;
63
+ this.translatedIntervals = [];
64
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
65
+ this.onChange = _ => { };
66
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
67
+ this.onTouched = () => { };
68
+ }
69
+ ngOnInit() {
70
+ this.translatedIntervals = this.INTERVALS.map(interval => ({
71
+ ...interval,
72
+ title: this.translate.instant(interval.title)
73
+ }));
74
+ }
75
+ writeValue(value) {
76
+ this.value = value;
77
+ }
78
+ registerOnChange(fn) {
79
+ this.onChange = fn;
80
+ }
81
+ registerOnTouched(onTouched) {
82
+ this.onTouched = onTouched;
83
+ }
84
+ markAsTouched() {
85
+ if (!this.touched) {
86
+ this.onTouched();
87
+ this.touched = true;
88
+ }
89
+ }
90
+ setDisabledState(disabled) {
91
+ this.disabled = disabled;
92
+ }
93
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: IntervalPickerComponent, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
94
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: IntervalPickerComponent, isStandalone: true, selector: "c8y-interval-picker", inputs: { INTERVALS: "INTERVALS" }, providers: [
95
+ {
96
+ provide: NG_VALUE_ACCESSOR,
97
+ useExisting: forwardRef(() => IntervalPickerComponent),
98
+ multi: true
99
+ }
100
+ ], ngImport: i0, template: "<li\n *ngFor=\"let interval of translatedIntervals\"\n [ngClass]=\"{\n active: interval.id === value\n }\"\n>\n <button\n type=\"button\"\n (click)=\"onChange(interval.id)\"\n >\n <span\n [ngClass]=\"{\n 'text-primary': interval.id === value\n }\"\n >\n <span\n c8yIcon=\"check\"\n [ngStyle]=\"{ visibility: interval.id === value ? 'visible' : 'hidden' }\"\n ></span>\n {{ interval.title }}\n </span>\n </button>\n</li>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: A11yModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: BsDropdownModule }] }); }
101
+ }
102
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: IntervalPickerComponent, decorators: [{
103
+ type: Component,
104
+ args: [{ selector: 'c8y-interval-picker', providers: [
105
+ {
106
+ provide: NG_VALUE_ACCESSOR,
107
+ useExisting: forwardRef(() => IntervalPickerComponent),
108
+ multi: true
109
+ }
110
+ ], standalone: true, imports: [CommonModule, FormsModule, A11yModule, ReactiveFormsModule, BsDropdownModule], template: "<li\n *ngFor=\"let interval of translatedIntervals\"\n [ngClass]=\"{\n active: interval.id === value\n }\"\n>\n <button\n type=\"button\"\n (click)=\"onChange(interval.id)\"\n >\n <span\n [ngClass]=\"{\n 'text-primary': interval.id === value\n }\"\n >\n <span\n c8yIcon=\"check\"\n [ngStyle]=\"{ visibility: interval.id === value ? 'visible' : 'hidden' }\"\n ></span>\n {{ interval.title }}\n </span>\n </button>\n</li>\n" }]
111
+ }], ctorParameters: () => [{ type: i1.TranslateService }], propDecorators: { INTERVALS: [{
112
+ type: Input
113
+ }] } });
114
+
115
+ /**
116
+ * Generated bundle index. Do not edit.
117
+ */
118
+
119
+ export { INTERVALS, INTERVAL_TITLES, IntervalPickerComponent, TimeSpanInMs };
120
+ //# sourceMappingURL=c8y-ngx-components-interval-picker.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"c8y-ngx-components-interval-picker.mjs","sources":["../../interval-picker/interval-picker.model.ts","../../interval-picker/interval-picker.component.ts","../../interval-picker/interval-picker.component.html","../../interval-picker/c8y-ngx-components-interval-picker.ts"],"sourcesContent":["import { gettext } from '@c8y/ngx-components/gettext';\n\nconst todayDate = new Date();\nexport enum TimeSpanInMs {\n 'MINUTE' = 1000 * 60,\n 'HOUR' = 1000 * 60 * 60,\n 'DAY' = 1000 * 60 * 60 * 24,\n 'WEEK' = 1000 * 60 * 60 * 24 * 7,\n 'MONTH' = todayDate.valueOf() - new Date(todayDate.setMonth(todayDate.getMonth() - 1)).valueOf()\n}\n\nexport type Interval = {\n id: 'minutes' | 'hours' | 'days' | 'weeks' | 'months' | 'custom';\n title: string;\n timespanInMs?: number;\n};\n\nexport const INTERVALS: Interval[] = [\n {\n id: 'minutes',\n title: gettext('Last minute'),\n timespanInMs: TimeSpanInMs.MINUTE\n },\n {\n id: 'hours',\n title: gettext('Last hour'),\n timespanInMs: TimeSpanInMs.HOUR\n },\n {\n id: 'days',\n title: gettext('Last day'),\n timespanInMs: TimeSpanInMs.DAY\n },\n {\n id: 'weeks',\n title: gettext('Last week'),\n timespanInMs: TimeSpanInMs.WEEK\n },\n {\n id: 'months',\n title: gettext('Last month'),\n timespanInMs: TimeSpanInMs.MONTH\n },\n { id: 'custom', title: gettext('Custom') }\n];\n\nexport const INTERVAL_TITLES: Record<Interval['id'], string> = {\n minutes: gettext('Last minute'),\n hours: gettext('Last hour'),\n days: gettext('Last day'),\n weeks: gettext('Last week'),\n months: gettext('Last month'),\n custom: gettext('Custom')\n};\n","import { Component, forwardRef, Input } from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALUE_ACCESSOR,\n FormsModule,\n ReactiveFormsModule\n} from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { Interval, INTERVALS } from './interval-picker.model';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Component({\n selector: 'c8y-interval-picker',\n templateUrl: './interval-picker.component.html',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => IntervalPickerComponent),\n multi: true\n }\n ],\n standalone: true,\n imports: [CommonModule, FormsModule, A11yModule, ReactiveFormsModule, BsDropdownModule]\n})\nexport class IntervalPickerComponent implements ControlValueAccessor {\n @Input() INTERVALS = INTERVALS;\n\n value: Interval['id'];\n touched = false;\n disabled = false;\n translatedIntervals: { id: string; title: string }[] = [];\n\n constructor(private translate: TranslateService) {}\n\n ngOnInit() {\n this.translatedIntervals = this.INTERVALS.map(interval => ({\n ...interval,\n title: this.translate.instant(interval.title)\n }));\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n onChange = _ => {};\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n onTouched = () => {};\n\n writeValue(value: Interval['id']) {\n this.value = value;\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(onTouched: any) {\n this.onTouched = onTouched;\n }\n\n markAsTouched() {\n if (!this.touched) {\n this.onTouched();\n this.touched = true;\n }\n }\n\n setDisabledState(disabled: boolean) {\n this.disabled = disabled;\n }\n}\n","<li\n *ngFor=\"let interval of translatedIntervals\"\n [ngClass]=\"{\n active: interval.id === value\n }\"\n>\n <button\n type=\"button\"\n (click)=\"onChange(interval.id)\"\n >\n <span\n [ngClass]=\"{\n 'text-primary': interval.id === value\n }\"\n >\n <span\n c8yIcon=\"check\"\n [ngStyle]=\"{ visibility: interval.id === value ? 'visible' : 'hidden' }\"\n ></span>\n {{ interval.title }}\n </span>\n </button>\n</li>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -155,11 +155,13 @@ class OperationSchedulerComponent {
155
155
  this.minDelay = this.minDelay / 1000;
156
156
  this.isDelayInSeconds = true;
157
157
  }
158
- if (unit === 'milliseconds' && this.isDelayInSeconds) {
159
- this.maxDelay = this.maxDelay * 1000;
160
- this.minDelay = this.minDelay * 1000;
161
- this.isDelayInSeconds = false;
158
+ if (unit === 'milliseconds') {
162
159
  this.delayInSeconds = this.fgOperationScheduler.controls.delay.value / 1000;
160
+ if (this.isDelayInSeconds) {
161
+ this.maxDelay = this.maxDelay * 1000;
162
+ this.minDelay = this.minDelay * 1000;
163
+ this.isDelayInSeconds = false;
164
+ }
163
165
  }
164
166
  }
165
167
  combineDateAndTime(date, time) {
@@ -1 +1 @@
1
- {"version":3,"file":"c8y-ngx-components-operations-bulk-operation-scheduler.mjs","sources":["../../operations/bulk-operation-scheduler/operation-scheduler.component.ts","../../operations/bulk-operation-scheduler/operation-scheduler.component.html","../../operations/bulk-operation-scheduler/bulk-operation-scheduler.module.ts","../../operations/bulk-operation-scheduler/c8y-ngx-components-operations-bulk-operation-scheduler.ts"],"sourcesContent":["import { Component, forwardRef, Input, OnDestroy, OnInit } from '@angular/core';\nimport {\n ControlValueAccessor,\n FormBuilder,\n FormControl,\n FormGroup,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator,\n Validators\n} from '@angular/forms';\nimport { gettext, OptionsService } from '@c8y/ngx-components';\nimport { isEmpty } from 'lodash-es';\nimport { Subscription } from 'rxjs';\nimport { throttleTime } from 'rxjs/operators';\nimport { OperationSchedule } from './operation-schedule.interface';\n\n@Component({\n selector: 'c8y-operation-scheduler',\n templateUrl: 'operation-scheduler.component.html',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => OperationSchedulerComponent)\n },\n {\n provide: NG_VALIDATORS,\n multi: true,\n useExisting: forwardRef(() => OperationSchedulerComponent)\n }\n ]\n})\nexport class OperationSchedulerComponent\n implements ControlValueAccessor, Validator, OnInit, OnDestroy\n{\n @Input('minutesAhead') set _minutesAhead(minutes: number) {\n if (minutes && minutes > this.MINUTES_AHEAD_DEFAULT) {\n this.minutesAhead = minutes;\n }\n }\n\n placeholder: string = gettext('Start date');\n fgOperationScheduler: FormGroup;\n minDate: Date;\n minDelay: number;\n maxDelay: number;\n delayErrors: ValidationErrors = null;\n pickerErrors: ValidationErrors = null;\n\n private readonly DELAY_SECONDS_DEFAULT: number = 1;\n private readonly MIN_DELAY_SECONDS_DEFAULT: number = 0.001;\n private readonly MAX_DELAY_SECONDS_DEFAULT: number = 3600;\n private readonly MINUTES_AHEAD_DEFAULT: number = 5;\n private isDelayInSeconds = true;\n private minutesAhead: number = this.MINUTES_AHEAD_DEFAULT;\n private readonly DELAY_KEY_CATEGORY = 'device-control';\n private readonly MAX_DELAY_KEY_NAME = 'bulkoperation.maxcreationramp';\n private readonly MIN_DELAY_KEY_NAME = 'bulkoperation.creationramp';\n private currentUnit = 'seconds';\n private delayInSeconds: number;\n private initialDate: Date;\n private subscription: Subscription;\n\n private onChange: (name) => void;\n private onTouched: () => void;\n private onValidatorChanged: () => void;\n\n constructor(private formBuilder: FormBuilder, private options: OptionsService) {}\n\n ngOnInit() {\n this.minDate = new Date();\n this.initialDate = new Date(\n this.minDate.setMinutes(this.minDate.getMinutes() + this.minutesAhead)\n );\n\n this.fgOperationScheduler = this.formBuilder.group({\n picker: ['', [Validators.required, this.dateValidation]],\n time: ['', [Validators.required, this.timeValidation]],\n delay: ['', [Validators.required]],\n unit: ['seconds']\n });\n\n this.fgOperationScheduler.patchValue({\n picker: this.initialDate,\n time: this.initialDate,\n delay: this.DELAY_SECONDS_DEFAULT\n });\n\n // Due to the validation of picker and time it could be possible that value changes\n // are emitted more than once. Therefore we throttle the emits.\n const valueChanges$ = this.fgOperationScheduler.valueChanges.pipe(throttleTime(100));\n this.subscription = valueChanges$.subscribe(data => {\n this.delayErrors = this.fgOperationScheduler.controls.delay.errors;\n this.pickerErrors = this.fgOperationScheduler.controls.picker.errors;\n this.convertDelayHandler(data.unit);\n this.emitData(data);\n });\n\n this.updateDelayValidation();\n }\n\n ngOnDestroy() {\n if (this.subscription && !this.subscription.closed) {\n this.subscription.unsubscribe();\n }\n }\n\n writeValue(value: OperationSchedule): void {\n if (value) {\n this.fgOperationScheduler.patchValue({\n picker: value.scheduledDate,\n time: value.scheduledDate,\n delay: value.delayInSeconds > 1 ? value.delayInSeconds : value.delayInSeconds * 1000,\n unit: value.delayInSeconds > 1 ? 'seconds' : 'milliseconds'\n });\n }\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n if (this.fgOperationScheduler?.disabled === isDisabled) {\n return;\n }\n isDisabled ? this.fgOperationScheduler.disable() : this.fgOperationScheduler.enable();\n }\n\n validate(): ValidationErrors {\n if (this.fgOperationScheduler.invalid) {\n return {\n ...this.fgOperationScheduler.controls.picker.errors,\n ...this.fgOperationScheduler.controls.time.errors,\n ...this.fgOperationScheduler.controls.delay.errors\n };\n }\n }\n\n registerOnValidatorChange(fn: any) {\n this.onValidatorChanged = fn;\n }\n\n markAsTouched(): void {\n if (this.onTouched) {\n this.onTouched();\n }\n }\n\n convertDelayHandler(unit: string) {\n if (this.currentUnit === unit) {\n return;\n }\n\n this.currentUnit = unit;\n\n this.convertDelay(this.currentUnit);\n\n // update validator on delay control to make sure that\n // switching from minutes to seconds or vice versa does not harm validation.\n this.fgOperationScheduler.controls.delay.setValidators([\n Validators.required,\n Validators.min(this.minDelay),\n Validators.max(this.maxDelay)\n ]);\n this.fgOperationScheduler.controls.delay.updateValueAndValidity();\n }\n\n emitData(data: { delayInSeconds: number; picker: Date; time?: Date; delay?: number }) {\n if (this.onValidatorChanged) {\n this.onValidatorChanged();\n }\n\n if (data.picker && data.time) {\n data.picker = this.combineDateAndTime(data.picker, data.time);\n }\n\n this.convertDelay(this.currentUnit);\n data.delayInSeconds = this.delayInSeconds;\n\n if (this.onChange) {\n this.onChange({\n delayInSeconds: data.delayInSeconds,\n scheduledDate: data.picker\n });\n }\n }\n\n private async updateDelayValidation() {\n const minSystem = await this.options.getSystemOption(\n this.DELAY_KEY_CATEGORY,\n this.MIN_DELAY_KEY_NAME\n );\n const maxSystem = await this.options.getSystemOption(\n this.DELAY_KEY_CATEGORY,\n this.MAX_DELAY_KEY_NAME\n );\n\n this.maxDelay = maxSystem ? Number(maxSystem) : this.MAX_DELAY_SECONDS_DEFAULT;\n this.minDelay = minSystem ? Number(minSystem) : this.MIN_DELAY_SECONDS_DEFAULT;\n\n this.fgOperationScheduler\n .get('delay')\n .setValidators([\n Validators.required,\n Validators.min(this.minDelay),\n Validators.max(this.maxDelay)\n ]);\n this.fgOperationScheduler.updateValueAndValidity();\n }\n\n private convertDelay(unit: string) {\n this.delayInSeconds = this.fgOperationScheduler.controls.delay.value;\n\n if (unit === 'seconds' && !this.isDelayInSeconds) {\n this.maxDelay = this.maxDelay / 1000;\n this.minDelay = this.minDelay / 1000;\n this.isDelayInSeconds = true;\n }\n\n if (unit === 'milliseconds' && this.isDelayInSeconds) {\n this.maxDelay = this.maxDelay * 1000;\n this.minDelay = this.minDelay * 1000;\n this.isDelayInSeconds = false;\n\n this.delayInSeconds = this.fgOperationScheduler.controls.delay.value / 1000;\n }\n }\n\n private combineDateAndTime(date: Date, time: Date) {\n return new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate(),\n time.getHours(),\n time.getMinutes()\n );\n }\n\n private dateValidation(fControl: FormControl) {\n if (fControl.value) {\n const date = fControl.value as Date;\n fControl.parent.get('time').setValue(date);\n return date >= new Date()\n ? null\n : {\n dateValidation: true\n };\n }\n return { dateValidation: true };\n }\n\n private timeValidation(fControl: FormControl) {\n if (fControl.value) {\n const date = fControl.value as Date;\n const result =\n date >= new Date()\n ? null\n : {\n dateValidation: true\n };\n\n const picker = fControl.parent.get('picker');\n\n if (result) {\n picker.setErrors(result);\n picker.markAsTouched();\n return result;\n }\n\n if (picker && picker.errors && picker.errors.dateValidation) {\n delete picker.errors.dateValidation;\n\n if (isEmpty(picker.errors)) {\n picker.setErrors(null);\n return result;\n }\n\n picker.setErrors(picker.errors);\n }\n return result;\n }\n return { dateValidation: true };\n }\n}\n","<div [formGroup]=\"fgOperationScheduler\">\n <div class=\"form-group\">\n <label translate>Start date</label>\n <div class=\"datetime-picker\">\n <c8y-form-group class=\"datepicker\">\n <input\n class=\"form-control\"\n placeholder=\"{{ placeholder | translate }}\"\n required\n formControlName=\"picker\"\n [bsConfig]=\"{ customTodayClass: 'today' }\"\n [minDate]=\"minDate\"\n bsDatepicker\n (blur)=\"markAsTouched()\"\n />\n <c8y-messages>\n <c8y-message\n [name]=\"'dateValidation'\"\n [text]=\"'Select time in the future.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n <timepicker\n class=\"form-group\"\n [showSpinners]=\"false\"\n [showMeridian]=\"false\"\n formControlName=\"time\"\n (blur)=\"markAsTouched()\"\n ></timepicker>\n </div>\n </div>\n <div class=\"form-group\">\n <c8y-form-group [hasError]=\"delayErrors\">\n <label translate>Delay</label>\n <div class=\"input-group\">\n <input\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} 15\"\n type=\"number\"\n required\n formControlName=\"delay\"\n (blur)=\"markAsTouched()\"\n />\n <div class=\"input-group-btn\">\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control m-r-sm-32 m-r-xs-56\"\n [attr.aria-label]=\"'Delay units' | translate\"\n formControlName=\"unit\"\n (blur)=\"markAsTouched()\"\n >\n <option\n value=\"seconds\"\n translate\n >\n Seconds\n </option>\n <option\n value=\"milliseconds\"\n translate\n >\n Milliseconds\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n </c8y-form-group>\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { CoreModule } from '@c8y/ngx-components';\nimport { BsDatepickerModule } from 'ngx-bootstrap/datepicker';\nimport { TimepickerModule } from 'ngx-bootstrap/timepicker';\nimport { OperationSchedulerComponent } from './operation-scheduler.component';\n\n/**\n * This module provides components for scheduling bulk operations.\n */\n@NgModule({\n imports: [\n CoreModule,\n ReactiveFormsModule,\n BsDatepickerModule.forRoot(),\n TimepickerModule.forRoot()\n ],\n providers: [],\n declarations: [OperationSchedulerComponent],\n exports: [OperationSchedulerComponent]\n})\nexport class BulkOperationSchedulerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;MAkCa,2BAA2B,CAAA;IAGtC,IAA2B,aAAa,CAAC,OAAe,EAAA;QACtD,IAAI,OAAO,IAAI,OAAO,GAAG,IAAI,CAAC,qBAAqB,EAAE;AACnD,YAAA,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC;SAC7B;KACF;IA4BD,WAAoB,CAAA,WAAwB,EAAU,OAAuB,EAAA;QAAzD,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;QAAU,IAAO,CAAA,OAAA,GAAP,OAAO,CAAgB;AA1B7E,QAAA,IAAA,CAAA,WAAW,GAAW,OAAO,CAAC,YAAY,CAAC,CAAC;QAK5C,IAAW,CAAA,WAAA,GAAqB,IAAI,CAAC;QACrC,IAAY,CAAA,YAAA,GAAqB,IAAI,CAAC;QAErB,IAAqB,CAAA,qBAAA,GAAW,CAAC,CAAC;QAClC,IAAyB,CAAA,yBAAA,GAAW,KAAK,CAAC;QAC1C,IAAyB,CAAA,yBAAA,GAAW,IAAI,CAAC;QACzC,IAAqB,CAAA,qBAAA,GAAW,CAAC,CAAC;QAC3C,IAAgB,CAAA,gBAAA,GAAG,IAAI,CAAC;AACxB,QAAA,IAAA,CAAA,YAAY,GAAW,IAAI,CAAC,qBAAqB,CAAC;QACzC,IAAkB,CAAA,kBAAA,GAAG,gBAAgB,CAAC;QACtC,IAAkB,CAAA,kBAAA,GAAG,+BAA+B,CAAC;QACrD,IAAkB,CAAA,kBAAA,GAAG,4BAA4B,CAAC;QAC3D,IAAW,CAAA,WAAA,GAAG,SAAS,CAAC;KASiD;IAEjF,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC;QAC1B,IAAI,CAAC,WAAW,GAAG,IAAI,IAAI,CACzB,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,CACvE,CAAC;QAEF,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACjD,YAAA,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;AACxD,YAAA,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;YACtD,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAClC,IAAI,EAAE,CAAC,SAAS,CAAC;AAClB,SAAA,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC;YACnC,MAAM,EAAE,IAAI,CAAC,WAAW;YACxB,IAAI,EAAE,IAAI,CAAC,WAAW;YACtB,KAAK,EAAE,IAAI,CAAC,qBAAqB;AAClC,SAAA,CAAC,CAAC;;;AAIH,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;QACrF,IAAI,CAAC,YAAY,GAAG,aAAa,CAAC,SAAS,CAAC,IAAI,IAAG;AACjD,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;AACnE,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;AACrE,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpC,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACtB,SAAC,CAAC,CAAC;QAEH,IAAI,CAAC,qBAAqB,EAAE,CAAC;KAC9B;IAED,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;AAClD,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;SACjC;KACF;AAED,IAAA,UAAU,CAAC,KAAwB,EAAA;QACjC,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC;gBACnC,MAAM,EAAE,KAAK,CAAC,aAAa;gBAC3B,IAAI,EAAE,KAAK,CAAC,aAAa;AACzB,gBAAA,KAAK,EAAE,KAAK,CAAC,cAAc,GAAG,CAAC,GAAG,KAAK,CAAC,cAAc,GAAG,KAAK,CAAC,cAAc,GAAG,IAAI;AACpF,gBAAA,IAAI,EAAE,KAAK,CAAC,cAAc,GAAG,CAAC,GAAG,SAAS,GAAG,cAAc;AAC5D,aAAA,CAAC,CAAC;SACJ;KACF;AAED,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;KACpB;AAED,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;KACrB;AAED,IAAA,gBAAgB,CAAE,UAAmB,EAAA;QACnC,IAAI,IAAI,CAAC,oBAAoB,EAAE,QAAQ,KAAK,UAAU,EAAE;YACtD,OAAO;SACR;AACD,QAAA,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,CAAC;KACvF;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE;YACrC,OAAO;gBACL,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM;gBACnD,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM;gBACjD,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM;aACnD,CAAC;SACH;KACF;AAED,IAAA,yBAAyB,CAAC,EAAO,EAAA;AAC/B,QAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;KAC9B;IAED,aAAa,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,IAAI,CAAC,SAAS,EAAE,CAAC;SAClB;KACF;AAED,IAAA,mBAAmB,CAAC,IAAY,EAAA;AAC9B,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE;YAC7B,OAAO;SACR;AAED,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AAExB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;;;QAIpC,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC;AACrD,YAAA,UAAU,CAAC,QAAQ;AACnB,YAAA,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,YAAA,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC9B,SAAA,CAAC,CAAC;QACH,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,KAAK,CAAC,sBAAsB,EAAE,CAAC;KACnE;AAED,IAAA,QAAQ,CAAC,IAA2E,EAAA;AAClF,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;YAC3B,IAAI,CAAC,kBAAkB,EAAE,CAAC;SAC3B;QAED,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE;AAC5B,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;SAC/D;AAED,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACpC,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;AAE1C,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,QAAQ,CAAC;gBACZ,cAAc,EAAE,IAAI,CAAC,cAAc;gBACnC,aAAa,EAAE,IAAI,CAAC,MAAM;AAC3B,aAAA,CAAC,CAAC;SACJ;KACF;AAEO,IAAA,MAAM,qBAAqB,GAAA;AACjC,QAAA,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,CAClD,IAAI,CAAC,kBAAkB,EACvB,IAAI,CAAC,kBAAkB,CACxB,CAAC;AACF,QAAA,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,CAClD,IAAI,CAAC,kBAAkB,EACvB,IAAI,CAAC,kBAAkB,CACxB,CAAC;AAEF,QAAA,IAAI,CAAC,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,yBAAyB,CAAC;AAC/E,QAAA,IAAI,CAAC,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,yBAAyB,CAAC;AAE/E,QAAA,IAAI,CAAC,oBAAoB;aACtB,GAAG,CAAC,OAAO,CAAC;AACZ,aAAA,aAAa,CAAC;AACb,YAAA,UAAU,CAAC,QAAQ;AACnB,YAAA,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,YAAA,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC9B,SAAA,CAAC,CAAC;AACL,QAAA,IAAI,CAAC,oBAAoB,CAAC,sBAAsB,EAAE,CAAC;KACpD;AAEO,IAAA,YAAY,CAAC,IAAY,EAAA;AAC/B,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;QAErE,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YAChD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACrC,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;SAC9B;QAED,IAAI,IAAI,KAAK,cAAc,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACpD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACrC,YAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;AAE9B,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;SAC7E;KACF;IAEO,kBAAkB,CAAC,IAAU,EAAE,IAAU,EAAA;AAC/C,QAAA,OAAO,IAAI,IAAI,CACb,IAAI,CAAC,WAAW,EAAE,EAClB,IAAI,CAAC,QAAQ,EAAE,EACf,IAAI,CAAC,OAAO,EAAE,EACd,IAAI,CAAC,QAAQ,EAAE,EACf,IAAI,CAAC,UAAU,EAAE,CAClB,CAAC;KACH;AAEO,IAAA,cAAc,CAAC,QAAqB,EAAA;AAC1C,QAAA,IAAI,QAAQ,CAAC,KAAK,EAAE;AAClB,YAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAa,CAAC;AACpC,YAAA,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC3C,YAAA,OAAO,IAAI,IAAI,IAAI,IAAI,EAAE;AACvB,kBAAE,IAAI;AACN,kBAAE;AACE,oBAAA,cAAc,EAAE,IAAI;iBACrB,CAAC;SACP;AACD,QAAA,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;KACjC;AAEO,IAAA,cAAc,CAAC,QAAqB,EAAA;AAC1C,QAAA,IAAI,QAAQ,CAAC,KAAK,EAAE;AAClB,YAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAa,CAAC;AACpC,YAAA,MAAM,MAAM,GACV,IAAI,IAAI,IAAI,IAAI,EAAE;AAChB,kBAAE,IAAI;AACN,kBAAE;AACE,oBAAA,cAAc,EAAE,IAAI;iBACrB,CAAC;YAER,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAE7C,IAAI,MAAM,EAAE;AACV,gBAAA,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;gBACzB,MAAM,CAAC,aAAa,EAAE,CAAC;AACvB,gBAAA,OAAO,MAAM,CAAC;aACf;AAED,YAAA,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE;AAC3D,gBAAA,OAAO,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC;AAEpC,gBAAA,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;AAC1B,oBAAA,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACvB,oBAAA,OAAO,MAAM,CAAC;iBACf;AAED,gBAAA,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;aACjC;AACD,YAAA,OAAO,MAAM,CAAC;SACf;AACD,QAAA,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;KACjC;8GA/PU,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,EAb3B,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,CAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,SAAA,EAAA;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,2BAA2B,CAAC;AAC3D,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,aAAa;AACtB,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,2BAA2B,CAAC;AAC3D,aAAA;AACF,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChCH,+mEAuEA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,iGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iCAAA,EAAA,QAAA,EAAA,yCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,UAAA,EAAA,cAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,EAAA,SAAA,EAAA,SAAA,EAAA,SAAA,EAAA,cAAA,EAAA,eAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,YAAA,EAAA,aAAA,EAAA,eAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,cAAA,EAAA,cAAA,EAAA,aAAA,EAAA,aAAA,EAAA,WAAA,EAAA,KAAA,EAAA,KAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FDrCa,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAhBvC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yBAAyB,EAExB,SAAA,EAAA;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,KAAK,EAAE,IAAI;AACX,4BAAA,WAAW,EAAE,UAAU,CAAC,iCAAiC,CAAC;AAC3D,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,aAAa;AACtB,4BAAA,KAAK,EAAE,IAAI;AACX,4BAAA,WAAW,EAAE,UAAU,CAAC,iCAAiC,CAAC;AAC3D,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,+mEAAA,EAAA,CAAA;6GAK0B,aAAa,EAAA,CAAA;sBAAvC,KAAK;uBAAC,cAAc,CAAA;;;AE9BvB;;AAEG;MAYU,4BAA4B,CAAA;8GAA5B,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;+GAA5B,4BAA4B,EAAA,YAAA,EAAA,CAHxB,2BAA2B,CAAA,EAAA,OAAA,EAAA,CANxC,UAAU;AACV,YAAA,mBAAmB,yDAMX,2BAA2B,CAAA,EAAA,CAAA,CAAA,EAAA;AAE1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,4BAA4B,YATrC,UAAU;YACV,mBAAmB;YACnB,kBAAkB,CAAC,OAAO,EAAE;YAC5B,gBAAgB,CAAC,OAAO,EAAE,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAMjB,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAXxC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,UAAU;wBACV,mBAAmB;wBACnB,kBAAkB,CAAC,OAAO,EAAE;wBAC5B,gBAAgB,CAAC,OAAO,EAAE;AAC3B,qBAAA;AACD,oBAAA,SAAS,EAAE,EAAE;oBACb,YAAY,EAAE,CAAC,2BAA2B,CAAC;oBAC3C,OAAO,EAAE,CAAC,2BAA2B,CAAC;AACvC,iBAAA,CAAA;;;ACpBD;;AAEG;;;;"}
1
+ {"version":3,"file":"c8y-ngx-components-operations-bulk-operation-scheduler.mjs","sources":["../../operations/bulk-operation-scheduler/operation-scheduler.component.ts","../../operations/bulk-operation-scheduler/operation-scheduler.component.html","../../operations/bulk-operation-scheduler/bulk-operation-scheduler.module.ts","../../operations/bulk-operation-scheduler/c8y-ngx-components-operations-bulk-operation-scheduler.ts"],"sourcesContent":["import { Component, forwardRef, Input, OnDestroy, OnInit } from '@angular/core';\nimport {\n ControlValueAccessor,\n FormBuilder,\n FormControl,\n FormGroup,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator,\n Validators\n} from '@angular/forms';\nimport { gettext, OptionsService } from '@c8y/ngx-components';\nimport { isEmpty } from 'lodash-es';\nimport { Subscription } from 'rxjs';\nimport { throttleTime } from 'rxjs/operators';\nimport { OperationSchedule } from './operation-schedule.interface';\n\n@Component({\n selector: 'c8y-operation-scheduler',\n templateUrl: 'operation-scheduler.component.html',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => OperationSchedulerComponent)\n },\n {\n provide: NG_VALIDATORS,\n multi: true,\n useExisting: forwardRef(() => OperationSchedulerComponent)\n }\n ]\n})\nexport class OperationSchedulerComponent\n implements ControlValueAccessor, Validator, OnInit, OnDestroy\n{\n @Input('minutesAhead') set _minutesAhead(minutes: number) {\n if (minutes && minutes > this.MINUTES_AHEAD_DEFAULT) {\n this.minutesAhead = minutes;\n }\n }\n\n placeholder: string = gettext('Start date');\n fgOperationScheduler: FormGroup;\n minDate: Date;\n minDelay: number;\n maxDelay: number;\n delayErrors: ValidationErrors = null;\n pickerErrors: ValidationErrors = null;\n\n private readonly DELAY_SECONDS_DEFAULT: number = 1;\n private readonly MIN_DELAY_SECONDS_DEFAULT: number = 0.001;\n private readonly MAX_DELAY_SECONDS_DEFAULT: number = 3600;\n private readonly MINUTES_AHEAD_DEFAULT: number = 5;\n private isDelayInSeconds = true;\n private minutesAhead: number = this.MINUTES_AHEAD_DEFAULT;\n private readonly DELAY_KEY_CATEGORY = 'device-control';\n private readonly MAX_DELAY_KEY_NAME = 'bulkoperation.maxcreationramp';\n private readonly MIN_DELAY_KEY_NAME = 'bulkoperation.creationramp';\n private currentUnit = 'seconds';\n private delayInSeconds: number;\n private initialDate: Date;\n private subscription: Subscription;\n\n private onChange: (name) => void;\n private onTouched: () => void;\n private onValidatorChanged: () => void;\n\n constructor(\n private formBuilder: FormBuilder,\n private options: OptionsService\n ) {}\n\n ngOnInit() {\n this.minDate = new Date();\n this.initialDate = new Date(\n this.minDate.setMinutes(this.minDate.getMinutes() + this.minutesAhead)\n );\n\n this.fgOperationScheduler = this.formBuilder.group({\n picker: ['', [Validators.required, this.dateValidation]],\n time: ['', [Validators.required, this.timeValidation]],\n delay: ['', [Validators.required]],\n unit: ['seconds']\n });\n\n this.fgOperationScheduler.patchValue({\n picker: this.initialDate,\n time: this.initialDate,\n delay: this.DELAY_SECONDS_DEFAULT\n });\n\n // Due to the validation of picker and time it could be possible that value changes\n // are emitted more than once. Therefore we throttle the emits.\n const valueChanges$ = this.fgOperationScheduler.valueChanges.pipe(throttleTime(100));\n this.subscription = valueChanges$.subscribe(data => {\n this.delayErrors = this.fgOperationScheduler.controls.delay.errors;\n this.pickerErrors = this.fgOperationScheduler.controls.picker.errors;\n this.convertDelayHandler(data.unit);\n this.emitData(data);\n });\n\n this.updateDelayValidation();\n }\n\n ngOnDestroy() {\n if (this.subscription && !this.subscription.closed) {\n this.subscription.unsubscribe();\n }\n }\n\n writeValue(value: OperationSchedule): void {\n if (value) {\n this.fgOperationScheduler.patchValue({\n picker: value.scheduledDate,\n time: value.scheduledDate,\n delay: value.delayInSeconds > 1 ? value.delayInSeconds : value.delayInSeconds * 1000,\n unit: value.delayInSeconds > 1 ? 'seconds' : 'milliseconds'\n });\n }\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n if (this.fgOperationScheduler?.disabled === isDisabled) {\n return;\n }\n isDisabled ? this.fgOperationScheduler.disable() : this.fgOperationScheduler.enable();\n }\n\n validate(): ValidationErrors {\n if (this.fgOperationScheduler.invalid) {\n return {\n ...this.fgOperationScheduler.controls.picker.errors,\n ...this.fgOperationScheduler.controls.time.errors,\n ...this.fgOperationScheduler.controls.delay.errors\n };\n }\n }\n\n registerOnValidatorChange(fn: any) {\n this.onValidatorChanged = fn;\n }\n\n markAsTouched(): void {\n if (this.onTouched) {\n this.onTouched();\n }\n }\n\n convertDelayHandler(unit: string) {\n if (this.currentUnit === unit) {\n return;\n }\n\n this.currentUnit = unit;\n\n this.convertDelay(this.currentUnit);\n\n // update validator on delay control to make sure that\n // switching from minutes to seconds or vice versa does not harm validation.\n this.fgOperationScheduler.controls.delay.setValidators([\n Validators.required,\n Validators.min(this.minDelay),\n Validators.max(this.maxDelay)\n ]);\n this.fgOperationScheduler.controls.delay.updateValueAndValidity();\n }\n\n emitData(data: { delayInSeconds: number; picker: Date; time?: Date; delay?: number }) {\n if (this.onValidatorChanged) {\n this.onValidatorChanged();\n }\n\n if (data.picker && data.time) {\n data.picker = this.combineDateAndTime(data.picker, data.time);\n }\n\n this.convertDelay(this.currentUnit);\n data.delayInSeconds = this.delayInSeconds;\n\n if (this.onChange) {\n this.onChange({\n delayInSeconds: data.delayInSeconds,\n scheduledDate: data.picker\n });\n }\n }\n\n private async updateDelayValidation() {\n const minSystem = await this.options.getSystemOption(\n this.DELAY_KEY_CATEGORY,\n this.MIN_DELAY_KEY_NAME\n );\n const maxSystem = await this.options.getSystemOption(\n this.DELAY_KEY_CATEGORY,\n this.MAX_DELAY_KEY_NAME\n );\n\n this.maxDelay = maxSystem ? Number(maxSystem) : this.MAX_DELAY_SECONDS_DEFAULT;\n this.minDelay = minSystem ? Number(minSystem) : this.MIN_DELAY_SECONDS_DEFAULT;\n\n this.fgOperationScheduler\n .get('delay')\n .setValidators([\n Validators.required,\n Validators.min(this.minDelay),\n Validators.max(this.maxDelay)\n ]);\n this.fgOperationScheduler.updateValueAndValidity();\n }\n\n private convertDelay(unit: string) {\n this.delayInSeconds = this.fgOperationScheduler.controls.delay.value;\n\n if (unit === 'seconds' && !this.isDelayInSeconds) {\n this.maxDelay = this.maxDelay / 1000;\n this.minDelay = this.minDelay / 1000;\n this.isDelayInSeconds = true;\n }\n\n if (unit === 'milliseconds') {\n this.delayInSeconds = this.fgOperationScheduler.controls.delay.value / 1000;\n if (this.isDelayInSeconds) {\n this.maxDelay = this.maxDelay * 1000;\n this.minDelay = this.minDelay * 1000;\n this.isDelayInSeconds = false;\n }\n }\n }\n\n private combineDateAndTime(date: Date, time: Date) {\n return new Date(\n date.getFullYear(),\n date.getMonth(),\n date.getDate(),\n time.getHours(),\n time.getMinutes()\n );\n }\n\n private dateValidation(fControl: FormControl) {\n if (fControl.value) {\n const date = fControl.value as Date;\n fControl.parent.get('time').setValue(date);\n return date >= new Date()\n ? null\n : {\n dateValidation: true\n };\n }\n return { dateValidation: true };\n }\n\n private timeValidation(fControl: FormControl) {\n if (fControl.value) {\n const date = fControl.value as Date;\n const result =\n date >= new Date()\n ? null\n : {\n dateValidation: true\n };\n\n const picker = fControl.parent.get('picker');\n\n if (result) {\n picker.setErrors(result);\n picker.markAsTouched();\n return result;\n }\n\n if (picker && picker.errors && picker.errors.dateValidation) {\n delete picker.errors.dateValidation;\n\n if (isEmpty(picker.errors)) {\n picker.setErrors(null);\n return result;\n }\n\n picker.setErrors(picker.errors);\n }\n return result;\n }\n return { dateValidation: true };\n }\n}\n","<div [formGroup]=\"fgOperationScheduler\">\n <div class=\"form-group\">\n <label translate>Start date</label>\n <div class=\"datetime-picker\">\n <c8y-form-group class=\"datepicker\">\n <input\n class=\"form-control\"\n placeholder=\"{{ placeholder | translate }}\"\n required\n formControlName=\"picker\"\n [bsConfig]=\"{ customTodayClass: 'today' }\"\n [minDate]=\"minDate\"\n bsDatepicker\n (blur)=\"markAsTouched()\"\n />\n <c8y-messages>\n <c8y-message\n [name]=\"'dateValidation'\"\n [text]=\"'Select time in the future.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n <timepicker\n class=\"form-group\"\n [showSpinners]=\"false\"\n [showMeridian]=\"false\"\n formControlName=\"time\"\n (blur)=\"markAsTouched()\"\n ></timepicker>\n </div>\n </div>\n <div class=\"form-group\">\n <c8y-form-group [hasError]=\"delayErrors\">\n <label translate>Delay</label>\n <div class=\"input-group\">\n <input\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} 15\"\n type=\"number\"\n required\n formControlName=\"delay\"\n (blur)=\"markAsTouched()\"\n />\n <div class=\"input-group-btn\">\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control m-r-sm-32 m-r-xs-56\"\n [attr.aria-label]=\"'Delay units' | translate\"\n formControlName=\"unit\"\n (blur)=\"markAsTouched()\"\n >\n <option\n value=\"seconds\"\n translate\n >\n Seconds\n </option>\n <option\n value=\"milliseconds\"\n translate\n >\n Milliseconds\n </option>\n </select>\n <span></span>\n </div>\n </div>\n </div>\n </c8y-form-group>\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { CoreModule } from '@c8y/ngx-components';\nimport { BsDatepickerModule } from 'ngx-bootstrap/datepicker';\nimport { TimepickerModule } from 'ngx-bootstrap/timepicker';\nimport { OperationSchedulerComponent } from './operation-scheduler.component';\n\n/**\n * This module provides components for scheduling bulk operations.\n */\n@NgModule({\n imports: [\n CoreModule,\n ReactiveFormsModule,\n BsDatepickerModule.forRoot(),\n TimepickerModule.forRoot()\n ],\n providers: [],\n declarations: [OperationSchedulerComponent],\n exports: [OperationSchedulerComponent]\n})\nexport class BulkOperationSchedulerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;MAkCa,2BAA2B,CAAA;IAGtC,IAA2B,aAAa,CAAC,OAAe,EAAA;QACtD,IAAI,OAAO,IAAI,OAAO,GAAG,IAAI,CAAC,qBAAqB,EAAE;AACnD,YAAA,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC;SAC7B;KACF;IA4BD,WACU,CAAA,WAAwB,EACxB,OAAuB,EAAA;QADvB,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;QACxB,IAAO,CAAA,OAAA,GAAP,OAAO,CAAgB;AA5BjC,QAAA,IAAA,CAAA,WAAW,GAAW,OAAO,CAAC,YAAY,CAAC,CAAC;QAK5C,IAAW,CAAA,WAAA,GAAqB,IAAI,CAAC;QACrC,IAAY,CAAA,YAAA,GAAqB,IAAI,CAAC;QAErB,IAAqB,CAAA,qBAAA,GAAW,CAAC,CAAC;QAClC,IAAyB,CAAA,yBAAA,GAAW,KAAK,CAAC;QAC1C,IAAyB,CAAA,yBAAA,GAAW,IAAI,CAAC;QACzC,IAAqB,CAAA,qBAAA,GAAW,CAAC,CAAC;QAC3C,IAAgB,CAAA,gBAAA,GAAG,IAAI,CAAC;AACxB,QAAA,IAAA,CAAA,YAAY,GAAW,IAAI,CAAC,qBAAqB,CAAC;QACzC,IAAkB,CAAA,kBAAA,GAAG,gBAAgB,CAAC;QACtC,IAAkB,CAAA,kBAAA,GAAG,+BAA+B,CAAC;QACrD,IAAkB,CAAA,kBAAA,GAAG,4BAA4B,CAAC;QAC3D,IAAW,CAAA,WAAA,GAAG,SAAS,CAAC;KAY5B;IAEJ,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC;QAC1B,IAAI,CAAC,WAAW,GAAG,IAAI,IAAI,CACzB,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,CACvE,CAAC;QAEF,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACjD,YAAA,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;AACxD,YAAA,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;YACtD,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAClC,IAAI,EAAE,CAAC,SAAS,CAAC;AAClB,SAAA,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC;YACnC,MAAM,EAAE,IAAI,CAAC,WAAW;YACxB,IAAI,EAAE,IAAI,CAAC,WAAW;YACtB,KAAK,EAAE,IAAI,CAAC,qBAAqB;AAClC,SAAA,CAAC,CAAC;;;AAIH,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;QACrF,IAAI,CAAC,YAAY,GAAG,aAAa,CAAC,SAAS,CAAC,IAAI,IAAG;AACjD,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;AACnE,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;AACrE,YAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpC,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACtB,SAAC,CAAC,CAAC;QAEH,IAAI,CAAC,qBAAqB,EAAE,CAAC;KAC9B;IAED,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;AAClD,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;SACjC;KACF;AAED,IAAA,UAAU,CAAC,KAAwB,EAAA;QACjC,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC;gBACnC,MAAM,EAAE,KAAK,CAAC,aAAa;gBAC3B,IAAI,EAAE,KAAK,CAAC,aAAa;AACzB,gBAAA,KAAK,EAAE,KAAK,CAAC,cAAc,GAAG,CAAC,GAAG,KAAK,CAAC,cAAc,GAAG,KAAK,CAAC,cAAc,GAAG,IAAI;AACpF,gBAAA,IAAI,EAAE,KAAK,CAAC,cAAc,GAAG,CAAC,GAAG,SAAS,GAAG,cAAc;AAC5D,aAAA,CAAC,CAAC;SACJ;KACF;AAED,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;KACpB;AAED,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;KACrB;AAED,IAAA,gBAAgB,CAAE,UAAmB,EAAA;QACnC,IAAI,IAAI,CAAC,oBAAoB,EAAE,QAAQ,KAAK,UAAU,EAAE;YACtD,OAAO;SACR;AACD,QAAA,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,CAAC;KACvF;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE;YACrC,OAAO;gBACL,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM;gBACnD,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM;gBACjD,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM;aACnD,CAAC;SACH;KACF;AAED,IAAA,yBAAyB,CAAC,EAAO,EAAA;AAC/B,QAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;KAC9B;IAED,aAAa,GAAA;AACX,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,IAAI,CAAC,SAAS,EAAE,CAAC;SAClB;KACF;AAED,IAAA,mBAAmB,CAAC,IAAY,EAAA;AAC9B,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE;YAC7B,OAAO;SACR;AAED,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AAExB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;;;QAIpC,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC;AACrD,YAAA,UAAU,CAAC,QAAQ;AACnB,YAAA,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,YAAA,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC9B,SAAA,CAAC,CAAC;QACH,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,KAAK,CAAC,sBAAsB,EAAE,CAAC;KACnE;AAED,IAAA,QAAQ,CAAC,IAA2E,EAAA;AAClF,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;YAC3B,IAAI,CAAC,kBAAkB,EAAE,CAAC;SAC3B;QAED,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE;AAC5B,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;SAC/D;AAED,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACpC,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;AAE1C,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,QAAQ,CAAC;gBACZ,cAAc,EAAE,IAAI,CAAC,cAAc;gBACnC,aAAa,EAAE,IAAI,CAAC,MAAM;AAC3B,aAAA,CAAC,CAAC;SACJ;KACF;AAEO,IAAA,MAAM,qBAAqB,GAAA;AACjC,QAAA,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,CAClD,IAAI,CAAC,kBAAkB,EACvB,IAAI,CAAC,kBAAkB,CACxB,CAAC;AACF,QAAA,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,CAClD,IAAI,CAAC,kBAAkB,EACvB,IAAI,CAAC,kBAAkB,CACxB,CAAC;AAEF,QAAA,IAAI,CAAC,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,yBAAyB,CAAC;AAC/E,QAAA,IAAI,CAAC,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,yBAAyB,CAAC;AAE/E,QAAA,IAAI,CAAC,oBAAoB;aACtB,GAAG,CAAC,OAAO,CAAC;AACZ,aAAA,aAAa,CAAC;AACb,YAAA,UAAU,CAAC,QAAQ;AACnB,YAAA,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7B,YAAA,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC9B,SAAA,CAAC,CAAC;AACL,QAAA,IAAI,CAAC,oBAAoB,CAAC,sBAAsB,EAAE,CAAC;KACpD;AAEO,IAAA,YAAY,CAAC,IAAY,EAAA;AAC/B,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;QAErE,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YAChD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACrC,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;SAC9B;AAED,QAAA,IAAI,IAAI,KAAK,cAAc,EAAE;AAC3B,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;AAC5E,YAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;gBACzB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;gBACrC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACrC,gBAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;aAC/B;SACF;KACF;IAEO,kBAAkB,CAAC,IAAU,EAAE,IAAU,EAAA;AAC/C,QAAA,OAAO,IAAI,IAAI,CACb,IAAI,CAAC,WAAW,EAAE,EAClB,IAAI,CAAC,QAAQ,EAAE,EACf,IAAI,CAAC,OAAO,EAAE,EACd,IAAI,CAAC,QAAQ,EAAE,EACf,IAAI,CAAC,UAAU,EAAE,CAClB,CAAC;KACH;AAEO,IAAA,cAAc,CAAC,QAAqB,EAAA;AAC1C,QAAA,IAAI,QAAQ,CAAC,KAAK,EAAE;AAClB,YAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAa,CAAC;AACpC,YAAA,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC3C,YAAA,OAAO,IAAI,IAAI,IAAI,IAAI,EAAE;AACvB,kBAAE,IAAI;AACN,kBAAE;AACE,oBAAA,cAAc,EAAE,IAAI;iBACrB,CAAC;SACP;AACD,QAAA,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;KACjC;AAEO,IAAA,cAAc,CAAC,QAAqB,EAAA;AAC1C,QAAA,IAAI,QAAQ,CAAC,KAAK,EAAE;AAClB,YAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAa,CAAC;AACpC,YAAA,MAAM,MAAM,GACV,IAAI,IAAI,IAAI,IAAI,EAAE;AAChB,kBAAE,IAAI;AACN,kBAAE;AACE,oBAAA,cAAc,EAAE,IAAI;iBACrB,CAAC;YAER,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAE7C,IAAI,MAAM,EAAE;AACV,gBAAA,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;gBACzB,MAAM,CAAC,aAAa,EAAE,CAAC;AACvB,gBAAA,OAAO,MAAM,CAAC;aACf;AAED,YAAA,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE;AAC3D,gBAAA,OAAO,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC;AAEpC,gBAAA,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;AAC1B,oBAAA,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACvB,oBAAA,OAAO,MAAM,CAAC;iBACf;AAED,gBAAA,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;aACjC;AACD,YAAA,OAAO,MAAM,CAAC;SACf;AACD,QAAA,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;KACjC;8GAnQU,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,EAb3B,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,CAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,SAAA,EAAA;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,2BAA2B,CAAC;AAC3D,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,aAAa;AACtB,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,2BAA2B,CAAC;AAC3D,aAAA;AACF,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChCH,+mEAuEA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,iGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iCAAA,EAAA,QAAA,EAAA,yCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,UAAA,EAAA,cAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,EAAA,SAAA,EAAA,SAAA,EAAA,SAAA,EAAA,cAAA,EAAA,eAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,YAAA,EAAA,aAAA,EAAA,eAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,cAAA,EAAA,cAAA,EAAA,aAAA,EAAA,aAAA,EAAA,WAAA,EAAA,KAAA,EAAA,KAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FDrCa,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAhBvC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yBAAyB,EAExB,SAAA,EAAA;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,KAAK,EAAE,IAAI;AACX,4BAAA,WAAW,EAAE,UAAU,CAAC,iCAAiC,CAAC;AAC3D,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,aAAa;AACtB,4BAAA,KAAK,EAAE,IAAI;AACX,4BAAA,WAAW,EAAE,UAAU,CAAC,iCAAiC,CAAC;AAC3D,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,+mEAAA,EAAA,CAAA;6GAK0B,aAAa,EAAA,CAAA;sBAAvC,KAAK;uBAAC,cAAc,CAAA;;;AE9BvB;;AAEG;MAYU,4BAA4B,CAAA;8GAA5B,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;+GAA5B,4BAA4B,EAAA,YAAA,EAAA,CAHxB,2BAA2B,CAAA,EAAA,OAAA,EAAA,CANxC,UAAU;AACV,YAAA,mBAAmB,yDAMX,2BAA2B,CAAA,EAAA,CAAA,CAAA,EAAA;AAE1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,4BAA4B,YATrC,UAAU;YACV,mBAAmB;YACnB,kBAAkB,CAAC,OAAO,EAAE;YAC5B,gBAAgB,CAAC,OAAO,EAAE,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAMjB,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAXxC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,UAAU;wBACV,mBAAmB;wBACnB,kBAAkB,CAAC,OAAO,EAAE;wBAC5B,gBAAgB,CAAC,OAAO,EAAE;AAC3B,qBAAA;AACD,oBAAA,SAAS,EAAE,EAAE;oBACb,YAAY,EAAE,CAAC,2BAA2B,CAAC;oBAC3C,OAAO,EAAE,CAAC,2BAA2B,CAAC;AACvC,iBAAA,CAAA;;;ACpBD;;AAEG;;;;"}
@@ -729,11 +729,11 @@ class SearchActionComponent {
729
729
  .then(() => this.router.navigate(commands, extras));
730
730
  }
731
731
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: SearchActionComponent, deps: [{ token: i5.RouterService }, { token: i1$1.Router }, { token: SEARCH_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
732
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: SearchActionComponent, selector: "c8y-search-action", ngImport: i0, template: "<c8y-search-input\n (filter)=\"onFilter($event)\"\n (search)=\"onSearch($event)\"\n (onClick)=\"onClick($event)\"\n [enableCustomTemplatePlaceholder]=\"true\"\n [customPlaceholder]=\"customPlaceholder\"\n [customDataQuery]=\"customQuery\"\n [externalTerm]=\"typeaheadReload\"\n>\n <c8y-search-custom-filters\n *ngIf=\"showAdvancedFilters\"\n class=\"d-flex gap-16 p-l-4\"\n (refresh)=\"triggerDataLoad()\"\n (customDataQuery)=\"customQuery = $event\"\n ></c8y-search-custom-filters>\n</c8y-search-input>\n", dependencies: [{ kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.SearchInputComponent, selector: "c8y-search-input", inputs: ["mode", "enableCustomTemplatePlaceholder", "customPlaceholder", "externalTerm", "customDataQuery", "container", "groupsOnly"], outputs: ["filter", "search", "reset", "onClick"] }, { kind: "component", type: SearchCustomFiltersComponent, selector: "c8y-search-custom-filters", outputs: ["customDataQuery", "refresh"] }] }); }
732
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: SearchActionComponent, selector: "c8y-search-action", ngImport: i0, template: "<c8y-search-input\n (filter)=\"onFilter($event)\"\n (search)=\"onSearch($event)\"\n (onClick)=\"onClick($event)\"\n [enableCustomTemplatePlaceholder]=\"true\"\n [customPlaceholder]=\"customPlaceholder\"\n [customDataQuery]=\"customQuery\"\n [externalTerm]=\"typeaheadReload\"\n>\n <c8y-search-custom-filters\n *ngIf=\"showAdvancedFilters\"\n class=\"d-flex gap-16 p-l-4 p-l-24 p-r-24\"\n (refresh)=\"triggerDataLoad()\"\n (customDataQuery)=\"customQuery = $event\"\n ></c8y-search-custom-filters>\n</c8y-search-input>\n", dependencies: [{ kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.SearchInputComponent, selector: "c8y-search-input", inputs: ["mode", "enableCustomTemplatePlaceholder", "customPlaceholder", "externalTerm", "customDataQuery", "container", "groupsOnly"], outputs: ["filter", "search", "reset", "onClick"] }, { kind: "component", type: SearchCustomFiltersComponent, selector: "c8y-search-custom-filters", outputs: ["customDataQuery", "refresh"] }] }); }
733
733
  }
734
734
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: SearchActionComponent, decorators: [{
735
735
  type: Component,
736
- args: [{ selector: 'c8y-search-action', template: "<c8y-search-input\n (filter)=\"onFilter($event)\"\n (search)=\"onSearch($event)\"\n (onClick)=\"onClick($event)\"\n [enableCustomTemplatePlaceholder]=\"true\"\n [customPlaceholder]=\"customPlaceholder\"\n [customDataQuery]=\"customQuery\"\n [externalTerm]=\"typeaheadReload\"\n>\n <c8y-search-custom-filters\n *ngIf=\"showAdvancedFilters\"\n class=\"d-flex gap-16 p-l-4\"\n (refresh)=\"triggerDataLoad()\"\n (customDataQuery)=\"customQuery = $event\"\n ></c8y-search-custom-filters>\n</c8y-search-input>\n" }]
736
+ args: [{ selector: 'c8y-search-action', template: "<c8y-search-input\n (filter)=\"onFilter($event)\"\n (search)=\"onSearch($event)\"\n (onClick)=\"onClick($event)\"\n [enableCustomTemplatePlaceholder]=\"true\"\n [customPlaceholder]=\"customPlaceholder\"\n [customDataQuery]=\"customQuery\"\n [externalTerm]=\"typeaheadReload\"\n>\n <c8y-search-custom-filters\n *ngIf=\"showAdvancedFilters\"\n class=\"d-flex gap-16 p-l-4 p-l-24 p-r-24\"\n (refresh)=\"triggerDataLoad()\"\n (customDataQuery)=\"customQuery = $event\"\n ></c8y-search-custom-filters>\n</c8y-search-input>\n" }]
737
737
  }], ctorParameters: () => [{ type: i5.RouterService }, { type: i1$1.Router }, { type: undefined, decorators: [{
738
738
  type: Optional
739
739
  }, {