@memberjunction/ng-dashboards 2.105.0 → 2.107.0

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 (37) hide show
  1. package/dist/Scheduling/components/scheduling-health.component.d.ts +30 -0
  2. package/dist/Scheduling/components/scheduling-health.component.d.ts.map +1 -0
  3. package/dist/Scheduling/components/scheduling-health.component.js +316 -0
  4. package/dist/Scheduling/components/scheduling-health.component.js.map +1 -0
  5. package/dist/Scheduling/components/scheduling-history.component.d.ts +48 -0
  6. package/dist/Scheduling/components/scheduling-history.component.d.ts.map +1 -0
  7. package/dist/Scheduling/components/scheduling-history.component.js +378 -0
  8. package/dist/Scheduling/components/scheduling-history.component.js.map +1 -0
  9. package/dist/Scheduling/components/scheduling-jobs.component.d.ts +48 -0
  10. package/dist/Scheduling/components/scheduling-jobs.component.d.ts.map +1 -0
  11. package/dist/Scheduling/components/scheduling-jobs.component.js +372 -0
  12. package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -0
  13. package/dist/Scheduling/components/scheduling-monitoring.component.d.ts +37 -0
  14. package/dist/Scheduling/components/scheduling-monitoring.component.d.ts.map +1 -0
  15. package/dist/Scheduling/components/scheduling-monitoring.component.js +489 -0
  16. package/dist/Scheduling/components/scheduling-monitoring.component.js.map +1 -0
  17. package/dist/Scheduling/components/scheduling-types.component.d.ts +22 -0
  18. package/dist/Scheduling/components/scheduling-types.component.d.ts.map +1 -0
  19. package/dist/Scheduling/components/scheduling-types.component.js +166 -0
  20. package/dist/Scheduling/components/scheduling-types.component.js.map +1 -0
  21. package/dist/Scheduling/scheduling-dashboard.component.d.ts +52 -0
  22. package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -0
  23. package/dist/Scheduling/scheduling-dashboard.component.js +256 -0
  24. package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -0
  25. package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts +102 -0
  26. package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts.map +1 -0
  27. package/dist/Scheduling/services/scheduling-instrumentation.service.js +406 -0
  28. package/dist/Scheduling/services/scheduling-instrumentation.service.js.map +1 -0
  29. package/dist/module.d.ts +25 -19
  30. package/dist/module.d.ts.map +1 -1
  31. package/dist/module.js +32 -6
  32. package/dist/module.js.map +1 -1
  33. package/dist/public-api.d.ts +1 -0
  34. package/dist/public-api.d.ts.map +1 -1
  35. package/dist/public-api.js +3 -0
  36. package/dist/public-api.js.map +1 -1
  37. package/package.json +9 -9
@@ -0,0 +1,166 @@
1
+ import { Component, Input, Output, EventEmitter } from '@angular/core';
2
+ import { Subject } from 'rxjs';
3
+ import { takeUntil } from 'rxjs/operators';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../services/scheduling-instrumentation.service";
6
+ import * as i2 from "@angular/common";
7
+ import * as i3 from "@progress/kendo-angular-buttons";
8
+ const _forTrack0 = ($index, $item) => $item.typeId;
9
+ function SchedulingTypesComponent_Conditional_8_Template(rf, ctx) { if (rf & 1) {
10
+ i0.ɵɵelementStart(0, "div", 5);
11
+ i0.ɵɵelement(1, "i", 8);
12
+ i0.ɵɵelementStart(2, "p");
13
+ i0.ɵɵtext(3, "Loading job types...");
14
+ i0.ɵɵelementEnd()();
15
+ } }
16
+ function SchedulingTypesComponent_Conditional_9_Template(rf, ctx) { if (rf & 1) {
17
+ i0.ɵɵelementStart(0, "div", 6);
18
+ i0.ɵɵelement(1, "i", 9);
19
+ i0.ɵɵelementStart(2, "p");
20
+ i0.ɵɵtext(3, "No job types found");
21
+ i0.ɵɵelementEnd()();
22
+ } }
23
+ function SchedulingTypesComponent_Conditional_10_For_2_Template(rf, ctx) { if (rf & 1) {
24
+ i0.ɵɵelementStart(0, "div", 10)(1, "div", 11)(2, "div", 12);
25
+ i0.ɵɵelement(3, "i", 13);
26
+ i0.ɵɵelementEnd();
27
+ i0.ɵɵelementStart(4, "h3");
28
+ i0.ɵɵtext(5);
29
+ i0.ɵɵelementEnd()();
30
+ i0.ɵɵelementStart(6, "div", 14)(7, "div", 15)(8, "div", 16);
31
+ i0.ɵɵtext(9, "Active Jobs");
32
+ i0.ɵɵelementEnd();
33
+ i0.ɵɵelementStart(10, "div", 17);
34
+ i0.ɵɵtext(11);
35
+ i0.ɵɵelementEnd()();
36
+ i0.ɵɵelementStart(12, "div", 15)(13, "div", 16);
37
+ i0.ɵɵtext(14, "Total Runs");
38
+ i0.ɵɵelementEnd();
39
+ i0.ɵɵelementStart(15, "div", 18);
40
+ i0.ɵɵtext(16);
41
+ i0.ɵɵelementEnd()();
42
+ i0.ɵɵelementStart(17, "div", 15)(18, "div", 16);
43
+ i0.ɵɵtext(19, "Success Rate");
44
+ i0.ɵɵelementEnd();
45
+ i0.ɵɵelementStart(20, "div", 18);
46
+ i0.ɵɵtext(21);
47
+ i0.ɵɵelementEnd()();
48
+ i0.ɵɵelementStart(22, "div", 19);
49
+ i0.ɵɵelement(23, "div", 20);
50
+ i0.ɵɵelementEnd()()();
51
+ } if (rf & 2) {
52
+ const type_r1 = ctx.$implicit;
53
+ const ctx_r1 = i0.ɵɵnextContext(2);
54
+ i0.ɵɵadvance(3);
55
+ i0.ɵɵproperty("ngClass", ctx_r1.getTypeIcon(type_r1.typeName));
56
+ i0.ɵɵadvance(2);
57
+ i0.ɵɵtextInterpolate(type_r1.typeName);
58
+ i0.ɵɵadvance(6);
59
+ i0.ɵɵtextInterpolate(type_r1.activeJobsCount);
60
+ i0.ɵɵadvance(5);
61
+ i0.ɵɵtextInterpolate(type_r1.totalRuns);
62
+ i0.ɵɵadvance(4);
63
+ i0.ɵɵclassProp("success", type_r1.successRate >= 0.9)("warning", type_r1.successRate < 0.9 && type_r1.successRate >= 0.7)("error", type_r1.successRate < 0.7);
64
+ i0.ɵɵadvance();
65
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.formatPercentage(type_r1.successRate), " ");
66
+ i0.ɵɵadvance(2);
67
+ i0.ɵɵstyleProp("width", type_r1.successRate * 100, "%");
68
+ } }
69
+ function SchedulingTypesComponent_Conditional_10_Template(rf, ctx) { if (rf & 1) {
70
+ i0.ɵɵelementStart(0, "div", 7);
71
+ i0.ɵɵrepeaterCreate(1, SchedulingTypesComponent_Conditional_10_For_2_Template, 24, 13, "div", 10, _forTrack0);
72
+ i0.ɵɵelementEnd();
73
+ } if (rf & 2) {
74
+ const ctx_r1 = i0.ɵɵnextContext();
75
+ i0.ɵɵadvance();
76
+ i0.ɵɵrepeater(ctx_r1.jobTypes);
77
+ } }
78
+ export class SchedulingTypesComponent {
79
+ schedulingService;
80
+ cdr;
81
+ initialState;
82
+ stateChange = new EventEmitter();
83
+ jobTypes = [];
84
+ isLoading = false;
85
+ destroy$ = new Subject();
86
+ constructor(schedulingService, cdr) {
87
+ this.schedulingService = schedulingService;
88
+ this.cdr = cdr;
89
+ }
90
+ ngOnInit() {
91
+ this.loadData();
92
+ }
93
+ ngOnDestroy() {
94
+ this.destroy$.next();
95
+ this.destroy$.complete();
96
+ }
97
+ loadData() {
98
+ this.isLoading = true;
99
+ this.schedulingService.jobTypes$
100
+ .pipe(takeUntil(this.destroy$))
101
+ .subscribe({
102
+ next: (types) => {
103
+ this.jobTypes = types;
104
+ this.isLoading = false;
105
+ this.cdr.markForCheck();
106
+ },
107
+ error: (error) => {
108
+ console.error('Error loading job types:', error);
109
+ this.isLoading = false;
110
+ this.cdr.markForCheck();
111
+ }
112
+ });
113
+ }
114
+ onRefresh() {
115
+ this.schedulingService.refresh();
116
+ }
117
+ formatPercentage(value) {
118
+ return (value * 100).toFixed(1) + '%';
119
+ }
120
+ getTypeIcon(typeName) {
121
+ if (typeName.toLowerCase().includes('agent')) {
122
+ return 'fa-robot';
123
+ }
124
+ else if (typeName.toLowerCase().includes('action')) {
125
+ return 'fa-bolt';
126
+ }
127
+ else {
128
+ return 'fa-cog';
129
+ }
130
+ }
131
+ static ɵfac = function SchedulingTypesComponent_Factory(t) { return new (t || SchedulingTypesComponent)(i0.ɵɵdirectiveInject(i1.SchedulingInstrumentationService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
132
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SchedulingTypesComponent, selectors: [["app-scheduling-types"]], inputs: { initialState: "initialState" }, outputs: { stateChange: "stateChange" }, decls: 11, vars: 6, consts: [[1, "scheduling-types"], [1, "types-header"], [1, "fa-solid", "fa-cogs"], ["kendoButton", "", 3, "click", "disabled"], [1, "fa-solid", "fa-refresh"], [1, "loading-overlay"], [1, "empty-state"], [1, "types-grid"], [1, "fa-solid", "fa-spinner", "fa-spin", "fa-3x"], [1, "fa-solid", "fa-inbox"], [1, "type-card"], [1, "type-card-header"], [1, "type-icon"], [1, "fa-solid", 3, "ngClass"], [1, "type-card-body"], [1, "type-stat"], [1, "stat-label"], [1, "stat-value", "primary"], [1, "stat-value"], [1, "success-rate-bar"], [1, "rate-fill"]], template: function SchedulingTypesComponent_Template(rf, ctx) { if (rf & 1) {
133
+ i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "h2");
134
+ i0.ɵɵelement(3, "i", 2);
135
+ i0.ɵɵtext(4, " Job Type Registry");
136
+ i0.ɵɵelementEnd();
137
+ i0.ɵɵelementStart(5, "button", 3);
138
+ i0.ɵɵlistener("click", function SchedulingTypesComponent_Template_button_click_5_listener() { return ctx.onRefresh(); });
139
+ i0.ɵɵelement(6, "i", 4);
140
+ i0.ɵɵtext(7, " Refresh ");
141
+ i0.ɵɵelementEnd()();
142
+ i0.ɵɵtemplate(8, SchedulingTypesComponent_Conditional_8_Template, 4, 0, "div", 5)(9, SchedulingTypesComponent_Conditional_9_Template, 4, 0, "div", 6)(10, SchedulingTypesComponent_Conditional_10_Template, 3, 0, "div", 7);
143
+ i0.ɵɵelementEnd();
144
+ } if (rf & 2) {
145
+ i0.ɵɵadvance(5);
146
+ i0.ɵɵproperty("disabled", ctx.isLoading);
147
+ i0.ɵɵadvance();
148
+ i0.ɵɵclassProp("fa-spin", ctx.isLoading);
149
+ i0.ɵɵadvance(2);
150
+ i0.ɵɵconditional(ctx.isLoading && ctx.jobTypes.length === 0 ? 8 : -1);
151
+ i0.ɵɵadvance();
152
+ i0.ɵɵconditional(!ctx.isLoading && ctx.jobTypes.length === 0 ? 9 : -1);
153
+ i0.ɵɵadvance();
154
+ i0.ɵɵconditional(ctx.jobTypes.length > 0 ? 10 : -1);
155
+ } }, dependencies: [i2.NgClass, i3.ButtonComponent], styles: [".scheduling-types[_ngcontent-%COMP%] {\n height: 100%;\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n\n.types-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n\n h2 {\n margin: 0;\n font-size: 20px;\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 12px;\n\n i {\n color: #0078d4;\n }\n }\n}\n\n.loading-overlay[_ngcontent-%COMP%], \n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px;\n color: #6c757d;\n\n i {\n margin-bottom: 16px;\n font-size: 48px;\n opacity: 0.3;\n }\n\n p {\n margin: 0;\n font-size: 14px;\n }\n}\n\n.types-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 20px;\n overflow: auto;\n}\n\n.type-card[_ngcontent-%COMP%] {\n background: white;\n border-radius: 8px;\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n transition: transform 0.2s;\n\n &:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 8px rgba(0,0,0,0.15);\n }\n}\n\n.type-card-header[_ngcontent-%COMP%] {\n padding: 24px;\n border-bottom: 1px solid #dee2e6;\n text-align: center;\n\n .type-icon {\n width: 80px;\n height: 80px;\n margin: 0 auto 16px;\n background: linear-gradient(135deg, #0078d4 0%, #5c2d91 100%);\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n\n i {\n font-size: 40px;\n color: white;\n }\n }\n\n h3 {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: #212529;\n }\n}\n\n.type-card-body[_ngcontent-%COMP%] {\n padding: 24px;\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n\n.type-stat[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n\n .stat-label {\n font-size: 13px;\n color: #6c757d;\n font-weight: 500;\n }\n\n .stat-value {\n font-size: 24px;\n font-weight: 700;\n color: #212529;\n\n &.primary {\n color: #0078d4;\n }\n\n &.success {\n color: #107c10;\n }\n\n &.warning {\n color: #ff8c00;\n }\n\n &.error {\n color: #d13438;\n }\n }\n}\n\n.success-rate-bar[_ngcontent-%COMP%] {\n height: 12px;\n background: #e9ecef;\n border-radius: 6px;\n overflow: hidden;\n margin-top: 8px;\n\n .rate-fill {\n height: 100%;\n background: linear-gradient(90deg, #107c10 0%, #86d16f 100%);\n transition: width 0.3s;\n }\n}"] });
156
+ }
157
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SchedulingTypesComponent, [{
158
+ type: Component,
159
+ args: [{ selector: 'app-scheduling-types', template: "<div class=\"scheduling-types\">\n <div class=\"types-header\">\n <h2><i class=\"fa-solid fa-cogs\"></i> Job Type Registry</h2>\n <button kendoButton (click)=\"onRefresh()\" [disabled]=\"isLoading\">\n <i class=\"fa-solid fa-refresh\" [class.fa-spin]=\"isLoading\"></i>\n Refresh\n </button>\n </div>\n\n @if (isLoading && jobTypes.length === 0) {\n <div class=\"loading-overlay\">\n <i class=\"fa-solid fa-spinner fa-spin fa-3x\"></i>\n <p>Loading job types...</p>\n </div>\n }\n\n @if (!isLoading && jobTypes.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-inbox\"></i>\n <p>No job types found</p>\n </div>\n }\n\n @if (jobTypes.length > 0) {\n <div class=\"types-grid\">\n @for (type of jobTypes; track type.typeId) {\n <div class=\"type-card\">\n <div class=\"type-card-header\">\n <div class=\"type-icon\">\n <i class=\"fa-solid\" [ngClass]=\"getTypeIcon(type.typeName)\"></i>\n </div>\n <h3>{{ type.typeName }}</h3>\n </div>\n\n <div class=\"type-card-body\">\n <div class=\"type-stat\">\n <div class=\"stat-label\">Active Jobs</div>\n <div class=\"stat-value primary\">{{ type.activeJobsCount }}</div>\n </div>\n\n <div class=\"type-stat\">\n <div class=\"stat-label\">Total Runs</div>\n <div class=\"stat-value\">{{ type.totalRuns }}</div>\n </div>\n\n <div class=\"type-stat\">\n <div class=\"stat-label\">Success Rate</div>\n <div class=\"stat-value\" [class.success]=\"type.successRate >= 0.9\" [class.warning]=\"type.successRate < 0.9 && type.successRate >= 0.7\" [class.error]=\"type.successRate < 0.7\">\n {{ formatPercentage(type.successRate) }}\n </div>\n </div>\n\n <div class=\"success-rate-bar\">\n <div class=\"rate-fill\" [style.width.%]=\"type.successRate * 100\"></div>\n </div>\n </div>\n </div>\n }\n </div>\n }\n</div>\n", styles: [".scheduling-types {\n height: 100%;\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n\n.types-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n\n h2 {\n margin: 0;\n font-size: 20px;\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 12px;\n\n i {\n color: #0078d4;\n }\n }\n}\n\n.loading-overlay,\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px;\n color: #6c757d;\n\n i {\n margin-bottom: 16px;\n font-size: 48px;\n opacity: 0.3;\n }\n\n p {\n margin: 0;\n font-size: 14px;\n }\n}\n\n.types-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 20px;\n overflow: auto;\n}\n\n.type-card {\n background: white;\n border-radius: 8px;\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n transition: transform 0.2s;\n\n &:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 8px rgba(0,0,0,0.15);\n }\n}\n\n.type-card-header {\n padding: 24px;\n border-bottom: 1px solid #dee2e6;\n text-align: center;\n\n .type-icon {\n width: 80px;\n height: 80px;\n margin: 0 auto 16px;\n background: linear-gradient(135deg, #0078d4 0%, #5c2d91 100%);\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n\n i {\n font-size: 40px;\n color: white;\n }\n }\n\n h3 {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: #212529;\n }\n}\n\n.type-card-body {\n padding: 24px;\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n\n.type-stat {\n display: flex;\n justify-content: space-between;\n align-items: center;\n\n .stat-label {\n font-size: 13px;\n color: #6c757d;\n font-weight: 500;\n }\n\n .stat-value {\n font-size: 24px;\n font-weight: 700;\n color: #212529;\n\n &.primary {\n color: #0078d4;\n }\n\n &.success {\n color: #107c10;\n }\n\n &.warning {\n color: #ff8c00;\n }\n\n &.error {\n color: #d13438;\n }\n }\n}\n\n.success-rate-bar {\n height: 12px;\n background: #e9ecef;\n border-radius: 6px;\n overflow: hidden;\n margin-top: 8px;\n\n .rate-fill {\n height: 100%;\n background: linear-gradient(90deg, #107c10 0%, #86d16f 100%);\n transition: width 0.3s;\n }\n}\n"] }]
160
+ }], () => [{ type: i1.SchedulingInstrumentationService }, { type: i0.ChangeDetectorRef }], { initialState: [{
161
+ type: Input
162
+ }], stateChange: [{
163
+ type: Output
164
+ }] }); })();
165
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SchedulingTypesComponent, { className: "SchedulingTypesComponent", filePath: "src/Scheduling/components/scheduling-types.component.ts", lineNumber: 11 }); })();
166
+ //# sourceMappingURL=scheduling-types.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduling-types.component.js","sourceRoot":"","sources":["../../../src/Scheduling/components/scheduling-types.component.ts","../../../src/Scheduling/components/scheduling-types.component.html"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAqB,KAAK,EAAE,MAAM,EAAE,YAAY,EAAqB,MAAM,eAAe,CAAC;AAC7G,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;;;;;;;ICQvC,8BAA6B;IAC3B,uBAAiD;IACjD,yBAAG;IAAA,oCAAoB;IACzB,AADyB,iBAAI,EACvB;;;IAIN,8BAAyB;IACvB,uBAAiC;IACjC,yBAAG;IAAA,kCAAkB;IACvB,AADuB,iBAAI,EACrB;;;IAQE,AADF,AADF,+BAAuB,cACS,cACL;IACrB,wBAA+D;IACjE,iBAAM;IACN,0BAAI;IAAA,YAAmB;IACzB,AADyB,iBAAK,EACxB;IAIF,AADF,AADF,+BAA4B,cACH,cACG;IAAA,2BAAW;IAAA,iBAAM;IACzC,gCAAgC;IAAA,aAA0B;IAC5D,AAD4D,iBAAM,EAC5D;IAGJ,AADF,gCAAuB,eACG;IAAA,2BAAU;IAAA,iBAAM;IACxC,gCAAwB;IAAA,aAAoB;IAC9C,AAD8C,iBAAM,EAC9C;IAGJ,AADF,gCAAuB,eACG;IAAA,6BAAY;IAAA,iBAAM;IAC1C,gCAA6K;IAC3K,aACF;IACF,AADE,iBAAM,EACF;IAEN,gCAA8B;IAC5B,2BAAsE;IAG5E,AADE,AADE,iBAAM,EACF,EACF;;;;IA3BoB,eAAsC;IAAtC,8DAAsC;IAExD,eAAmB;IAAnB,sCAAmB;IAMW,eAA0B;IAA1B,6CAA0B;IAKlC,eAAoB;IAApB,uCAAoB;IAKpB,eAAyC;IAAqE,AAApE,AAA1C,qDAAyC,oEAAoE,oCAAuC;IAC1K,cACF;IADE,6EACF;IAIuB,eAAwC;IAAxC,uDAAwC;;;IA7BzE,8BAAwB;IACtB,6GAgCC;IACH,iBAAM;;;IAjCJ,cAgCC;IAhCD,8BAgCC;;AD/CP,MAAM,OAAO,wBAAwB;IAUzB;IACA;IAVD,YAAY,CAAM;IACjB,WAAW,GAAG,IAAI,YAAY,EAAO,CAAC;IAEzC,QAAQ,GAAwB,EAAE,CAAC;IACnC,SAAS,GAAG,KAAK,CAAC;IAEjB,QAAQ,GAAG,IAAI,OAAO,EAAQ,CAAC;IAEvC,YACU,iBAAmD,EACnD,GAAsB;QADtB,sBAAiB,GAAjB,iBAAiB,CAAkC;QACnD,QAAG,GAAH,GAAG,CAAmB;IAC7B,CAAC;IAEJ,QAAQ;QACN,IAAI,CAAC,QAAQ,EAAE,CAAC;IAClB,CAAC;IAED,WAAW;QACT,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;IAEO,QAAQ;QACd,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAEtB,IAAI,CAAC,iBAAiB,CAAC,SAAS;aAC7B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC9B,SAAS,CAAC;YACT,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE;gBACd,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;gBACtB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;gBACvB,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;YAC1B,CAAC;YACD,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;gBACf,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;gBACjD,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;gBACvB,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;YAC1B,CAAC;SACF,CAAC,CAAC;IACP,CAAC;IAEM,SAAS;QACd,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC;IACnC,CAAC;IAEM,gBAAgB,CAAC,KAAa;QACnC,OAAO,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IACxC,CAAC;IAEM,WAAW,CAAC,QAAgB;QACjC,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7C,OAAO,UAAU,CAAC;QACpB,CAAC;aAAM,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrD,OAAO,SAAS,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC;kFA1DU,wBAAwB;6DAAxB,wBAAwB;YCRjC,AADF,AADF,8BAA8B,aACF,SACpB;YAAA,uBAAgC;YAAC,kCAAiB;YAAA,iBAAK;YAC3D,iCAAiE;YAA7C,qGAAS,eAAW,IAAC;YACvC,uBAA+D;YAC/D,yBACF;YACF,AADE,iBAAS,EACL;YAgBN,AAPA,AAPA,iFAA0C,oEAOC,sEAOhB;YAqC7B,iBAAM;;YAzDwC,eAAsB;YAAtB,wCAAsB;YAC/B,cAA2B;YAA3B,wCAA2B;YAK9D,eAKC;YALD,qEAKC;YAED,cAKC;YALD,sEAKC;YAED,cAoCC;YApCD,mDAoCC;;;iFDjDU,wBAAwB;cALpC,SAAS;2BACE,sBAAsB;iGAKvB,YAAY;kBAApB,KAAK;YACI,WAAW;kBAApB,MAAM;;kFAFI,wBAAwB"}
@@ -0,0 +1,52 @@
1
+ import { AfterViewInit, OnDestroy, ChangeDetectorRef } from '@angular/core';
2
+ import { BaseDashboard } from '../generic/base-dashboard';
3
+ import * as i0 from "@angular/core";
4
+ interface SchedulingDashboardState {
5
+ activeTab: string;
6
+ monitoringState: any;
7
+ jobsState: any;
8
+ historyState: any;
9
+ typesState: any;
10
+ healthState: any;
11
+ }
12
+ export declare class SchedulingDashboardComponent extends BaseDashboard implements AfterViewInit, OnDestroy {
13
+ private cdr;
14
+ isLoading: boolean;
15
+ activeTab: string;
16
+ selectedIndex: number;
17
+ monitoringState: any;
18
+ jobsState: any;
19
+ historyState: any;
20
+ typesState: any;
21
+ healthState: any;
22
+ private visitedTabs;
23
+ navigationItems: string[];
24
+ navigationConfig: {
25
+ text: string;
26
+ icon: string;
27
+ selected: boolean;
28
+ }[];
29
+ private stateChangeSubject;
30
+ constructor(cdr: ChangeDetectorRef);
31
+ ngAfterViewInit(): void;
32
+ ngOnDestroy(): void;
33
+ onTabChange(tabId: string): void;
34
+ hasVisited(tabId: string): boolean;
35
+ private setupStateManagement;
36
+ private emitStateChange;
37
+ onMonitoringStateChange(state: any): void;
38
+ onJobsStateChange(state: any): void;
39
+ onHistoryStateChange(state: any): void;
40
+ onTypesStateChange(state: any): void;
41
+ onHealthStateChange(state: any): void;
42
+ loadUserState(state: Partial<SchedulingDashboardState>): void;
43
+ initDashboard(): void;
44
+ loadData(): void;
45
+ getCurrentTabLabel(): string;
46
+ private updateNavigationSelection;
47
+ static ɵfac: i0.ɵɵFactoryDeclaration<SchedulingDashboardComponent, never>;
48
+ static ɵcmp: i0.ɵɵComponentDeclaration<SchedulingDashboardComponent, "mj-scheduling-dashboard", never, {}, {}, never, never, false, never>;
49
+ }
50
+ export declare function LoadSchedulingDashboard(): void;
51
+ export {};
52
+ //# sourceMappingURL=scheduling-dashboard.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduling-dashboard.component.d.ts","sourceRoot":"","sources":["../../src/Scheduling/scheduling-dashboard.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,aAAa,EAAE,SAAS,EAAE,iBAAiB,EAA2B,MAAM,eAAe,CAAC;AAChH,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;;AAM1D,UAAU,wBAAwB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,GAAG,CAAC;IACrB,SAAS,EAAE,GAAG,CAAC;IACf,YAAY,EAAE,GAAG,CAAC;IAClB,UAAU,EAAE,GAAG,CAAC;IAChB,WAAW,EAAE,GAAG,CAAC;CAClB;AAED,qBAOa,4BAA6B,SAAQ,aAAc,YAAW,aAAa,EAAE,SAAS;IA4BrF,OAAO,CAAC,GAAG;IA3BhB,SAAS,UAAS;IAClB,SAAS,SAAgB;IACzB,aAAa,SAAK;IAGlB,eAAe,EAAE,GAAG,CAAQ;IAC5B,SAAS,EAAE,GAAG,CAAQ;IACtB,YAAY,EAAE,GAAG,CAAQ;IACzB,UAAU,EAAE,GAAG,CAAQ;IACvB,WAAW,EAAE,GAAG,CAAQ;IAG/B,OAAO,CAAC,WAAW,CAAqB;IAGjC,eAAe,EAAE,MAAM,EAAE,CAAwD;IAEjF,gBAAgB;;;;QAMrB;IAEF,OAAO,CAAC,kBAAkB,CAA2C;gBAEjD,GAAG,EAAE,iBAAiB;IAM1C,eAAe,IAAI,IAAI;IAOvB,WAAW,IAAI,IAAI;IAIZ,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAgBhC,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAIzC,OAAO,CAAC,oBAAoB;IAQ5B,OAAO,CAAC,eAAe;IAahB,uBAAuB,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IAKzC,iBAAiB,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IAKnC,oBAAoB,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IAKtC,kBAAkB,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IAKpC,mBAAmB,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IAKrC,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,wBAAwB,CAAC,GAAG,IAAI;IAkBpE,aAAa,IAAI,IAAI;IAWrB,QAAQ,IAAI,IAAI;IAYT,kBAAkB,IAAI,MAAM;IAMnC,OAAO,CAAC,yBAAyB;yCA9JtB,4BAA4B;2CAA5B,4BAA4B;CAmKxC;AAED,wBAAgB,uBAAuB,SAEtC"}
@@ -0,0 +1,256 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { Component, ChangeDetectionStrategy } from '@angular/core';
8
+ import { BaseDashboard } from '../generic/base-dashboard';
9
+ import { RegisterClass } from '@memberjunction/global';
10
+ import { Subject } from 'rxjs';
11
+ import { debounceTime } from 'rxjs/operators';
12
+ import { SharedService } from '@memberjunction/ng-shared';
13
+ import * as i0 from "@angular/core";
14
+ import * as i1 from "./components/scheduling-monitoring.component";
15
+ import * as i2 from "./components/scheduling-jobs.component";
16
+ import * as i3 from "./components/scheduling-history.component";
17
+ import * as i4 from "./components/scheduling-types.component";
18
+ import * as i5 from "./components/scheduling-health.component";
19
+ function SchedulingDashboardComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
20
+ const _r1 = i0.ɵɵgetCurrentView();
21
+ i0.ɵɵelementStart(0, "app-scheduling-monitoring", 5);
22
+ i0.ɵɵlistener("stateChange", function SchedulingDashboardComponent_Conditional_2_Template_app_scheduling_monitoring_stateChange_0_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onMonitoringStateChange($event)); });
23
+ i0.ɵɵelementEnd();
24
+ } if (rf & 2) {
25
+ const ctx_r1 = i0.ɵɵnextContext();
26
+ i0.ɵɵproperty("initialState", ctx_r1.monitoringState);
27
+ } }
28
+ function SchedulingDashboardComponent_Conditional_3_Template(rf, ctx) { if (rf & 1) {
29
+ const _r3 = i0.ɵɵgetCurrentView();
30
+ i0.ɵɵelementStart(0, "app-scheduling-jobs", 5);
31
+ i0.ɵɵlistener("stateChange", function SchedulingDashboardComponent_Conditional_3_Template_app_scheduling_jobs_stateChange_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onJobsStateChange($event)); });
32
+ i0.ɵɵelementEnd();
33
+ } if (rf & 2) {
34
+ const ctx_r1 = i0.ɵɵnextContext();
35
+ i0.ɵɵproperty("initialState", ctx_r1.jobsState);
36
+ } }
37
+ function SchedulingDashboardComponent_Conditional_4_Template(rf, ctx) { if (rf & 1) {
38
+ const _r4 = i0.ɵɵgetCurrentView();
39
+ i0.ɵɵelementStart(0, "app-scheduling-history", 5);
40
+ i0.ɵɵlistener("stateChange", function SchedulingDashboardComponent_Conditional_4_Template_app_scheduling_history_stateChange_0_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onHistoryStateChange($event)); });
41
+ i0.ɵɵelementEnd();
42
+ } if (rf & 2) {
43
+ const ctx_r1 = i0.ɵɵnextContext();
44
+ i0.ɵɵproperty("initialState", ctx_r1.historyState);
45
+ } }
46
+ function SchedulingDashboardComponent_Conditional_5_Template(rf, ctx) { if (rf & 1) {
47
+ const _r5 = i0.ɵɵgetCurrentView();
48
+ i0.ɵɵelementStart(0, "app-scheduling-types", 5);
49
+ i0.ɵɵlistener("stateChange", function SchedulingDashboardComponent_Conditional_5_Template_app_scheduling_types_stateChange_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onTypesStateChange($event)); });
50
+ i0.ɵɵelementEnd();
51
+ } if (rf & 2) {
52
+ const ctx_r1 = i0.ɵɵnextContext();
53
+ i0.ɵɵproperty("initialState", ctx_r1.typesState);
54
+ } }
55
+ function SchedulingDashboardComponent_Conditional_6_Template(rf, ctx) { if (rf & 1) {
56
+ const _r6 = i0.ɵɵgetCurrentView();
57
+ i0.ɵɵelementStart(0, "app-scheduling-health", 5);
58
+ i0.ɵɵlistener("stateChange", function SchedulingDashboardComponent_Conditional_6_Template_app_scheduling_health_stateChange_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onHealthStateChange($event)); });
59
+ i0.ɵɵelementEnd();
60
+ } if (rf & 2) {
61
+ const ctx_r1 = i0.ɵɵnextContext();
62
+ i0.ɵɵproperty("initialState", ctx_r1.healthState);
63
+ } }
64
+ function SchedulingDashboardComponent_For_9_Template(rf, ctx) { if (rf & 1) {
65
+ const _r7 = i0.ɵɵgetCurrentView();
66
+ i0.ɵɵelementStart(0, "div", 6);
67
+ i0.ɵɵlistener("click", function SchedulingDashboardComponent_For_9_Template_div_click_0_listener() { const $index_r8 = i0.ɵɵrestoreView(_r7).$index; const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onTabChange(ctx_r1.navigationItems[$index_r8])); });
68
+ i0.ɵɵelement(1, "i");
69
+ i0.ɵɵelementStart(2, "span");
70
+ i0.ɵɵtext(3);
71
+ i0.ɵɵelementEnd()();
72
+ } if (rf & 2) {
73
+ const navItem_r9 = ctx.$implicit;
74
+ i0.ɵɵclassProp("active", navItem_r9.selected);
75
+ i0.ɵɵadvance();
76
+ i0.ɵɵclassMap(navItem_r9.icon);
77
+ i0.ɵɵadvance(2);
78
+ i0.ɵɵtextInterpolate(navItem_r9.text);
79
+ } }
80
+ let SchedulingDashboardComponent = class SchedulingDashboardComponent extends BaseDashboard {
81
+ cdr;
82
+ isLoading = false;
83
+ activeTab = 'monitoring';
84
+ selectedIndex = 0;
85
+ // Component states
86
+ monitoringState = null;
87
+ jobsState = null;
88
+ historyState = null;
89
+ typesState = null;
90
+ healthState = null;
91
+ // Track visited tabs for lazy loading
92
+ visitedTabs = new Set();
93
+ // Navigation items
94
+ navigationItems = ['monitoring', 'jobs', 'history', 'types', 'health'];
95
+ navigationConfig = [
96
+ { text: 'Monitor', icon: 'fa-solid fa-chart-line', selected: false },
97
+ { text: 'Jobs', icon: 'fa-solid fa-calendar-alt', selected: false },
98
+ { text: 'History', icon: 'fa-solid fa-history', selected: false },
99
+ { text: 'Types', icon: 'fa-solid fa-cogs', selected: false },
100
+ { text: 'Health', icon: 'fa-solid fa-heartbeat', selected: false }
101
+ ];
102
+ stateChangeSubject = new Subject();
103
+ constructor(cdr) {
104
+ super();
105
+ this.cdr = cdr;
106
+ this.setupStateManagement();
107
+ this.updateNavigationSelection();
108
+ }
109
+ ngAfterViewInit() {
110
+ this.visitedTabs.add(this.activeTab);
111
+ this.updateNavigationSelection();
112
+ this.emitStateChange();
113
+ this.cdr.detectChanges();
114
+ }
115
+ ngOnDestroy() {
116
+ this.stateChangeSubject.complete();
117
+ }
118
+ onTabChange(tabId) {
119
+ this.activeTab = tabId;
120
+ const index = this.navigationItems.indexOf(tabId);
121
+ this.selectedIndex = index >= 0 ? index : 0;
122
+ this.updateNavigationSelection();
123
+ setTimeout(() => {
124
+ SharedService.Instance.InvokeManualResize();
125
+ }, 100);
126
+ this.visitedTabs.add(tabId);
127
+ this.emitStateChange();
128
+ this.cdr.markForCheck();
129
+ }
130
+ hasVisited(tabId) {
131
+ return this.visitedTabs.has(tabId);
132
+ }
133
+ setupStateManagement() {
134
+ this.stateChangeSubject.pipe(debounceTime(50)).subscribe(state => {
135
+ this.UserStateChanged.emit(state);
136
+ });
137
+ }
138
+ emitStateChange() {
139
+ const state = {
140
+ activeTab: this.activeTab,
141
+ monitoringState: this.monitoringState || {},
142
+ jobsState: this.jobsState || {},
143
+ historyState: this.historyState || {},
144
+ typesState: this.typesState || {},
145
+ healthState: this.healthState || {}
146
+ };
147
+ this.stateChangeSubject.next(state);
148
+ }
149
+ onMonitoringStateChange(state) {
150
+ this.monitoringState = state;
151
+ this.emitStateChange();
152
+ }
153
+ onJobsStateChange(state) {
154
+ this.jobsState = state;
155
+ this.emitStateChange();
156
+ }
157
+ onHistoryStateChange(state) {
158
+ this.historyState = state;
159
+ this.emitStateChange();
160
+ }
161
+ onTypesStateChange(state) {
162
+ this.typesState = state;
163
+ this.emitStateChange();
164
+ }
165
+ onHealthStateChange(state) {
166
+ this.healthState = state;
167
+ this.emitStateChange();
168
+ }
169
+ loadUserState(state) {
170
+ if (state.activeTab) {
171
+ this.activeTab = state.activeTab;
172
+ const index = this.navigationItems.indexOf(state.activeTab);
173
+ this.selectedIndex = index >= 0 ? index : 0;
174
+ this.visitedTabs.add(state.activeTab);
175
+ this.updateNavigationSelection();
176
+ }
177
+ if (state.monitoringState)
178
+ this.monitoringState = state.monitoringState;
179
+ if (state.jobsState)
180
+ this.jobsState = state.jobsState;
181
+ if (state.historyState)
182
+ this.historyState = state.historyState;
183
+ if (state.typesState)
184
+ this.typesState = state.typesState;
185
+ if (state.healthState)
186
+ this.healthState = state.healthState;
187
+ this.cdr.markForCheck();
188
+ }
189
+ initDashboard() {
190
+ try {
191
+ this.isLoading = true;
192
+ }
193
+ catch (error) {
194
+ console.error('Error initializing Scheduling dashboard:', error);
195
+ this.Error.emit(new Error('Failed to initialize Scheduling dashboard. Please try again.'));
196
+ }
197
+ finally {
198
+ this.isLoading = false;
199
+ }
200
+ }
201
+ loadData() {
202
+ if (this.Config?.userState) {
203
+ setTimeout(() => {
204
+ if (this.Config?.userState) {
205
+ this.loadUserState(this.Config.userState);
206
+ }
207
+ }, 0);
208
+ }
209
+ this.LoadingComplete.emit();
210
+ }
211
+ getCurrentTabLabel() {
212
+ const tabIndex = this.navigationItems.indexOf(this.activeTab);
213
+ const labels = ['Monitor', 'Jobs', 'History', 'Types', 'Health'];
214
+ return tabIndex >= 0 ? labels[tabIndex] : 'Scheduling Management';
215
+ }
216
+ updateNavigationSelection() {
217
+ this.navigationConfig.forEach((item, index) => {
218
+ item.selected = this.navigationItems[index] === this.activeTab;
219
+ });
220
+ }
221
+ static ɵfac = function SchedulingDashboardComponent_Factory(t) { return new (t || SchedulingDashboardComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
222
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SchedulingDashboardComponent, selectors: [["mj-scheduling-dashboard"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 10, vars: 5, consts: [[1, "scheduling-dashboard"], [1, "dashboard-content"], [3, "initialState"], [1, "scheduling-dashboard-nav"], [1, "nav-item", 3, "active"], [3, "stateChange", "initialState"], [1, "nav-item", 3, "click"]], template: function SchedulingDashboardComponent_Template(rf, ctx) { if (rf & 1) {
223
+ i0.ɵɵelementStart(0, "div", 0)(1, "div", 1);
224
+ i0.ɵɵtemplate(2, SchedulingDashboardComponent_Conditional_2_Template, 1, 1, "app-scheduling-monitoring", 2)(3, SchedulingDashboardComponent_Conditional_3_Template, 1, 1, "app-scheduling-jobs", 2)(4, SchedulingDashboardComponent_Conditional_4_Template, 1, 1, "app-scheduling-history", 2)(5, SchedulingDashboardComponent_Conditional_5_Template, 1, 1, "app-scheduling-types", 2)(6, SchedulingDashboardComponent_Conditional_6_Template, 1, 1, "app-scheduling-health", 2);
225
+ i0.ɵɵelementEnd();
226
+ i0.ɵɵelementStart(7, "div", 3);
227
+ i0.ɵɵrepeaterCreate(8, SchedulingDashboardComponent_For_9_Template, 4, 5, "div", 4, i0.ɵɵrepeaterTrackByIndex);
228
+ i0.ɵɵelementEnd()();
229
+ } if (rf & 2) {
230
+ i0.ɵɵadvance(2);
231
+ i0.ɵɵconditional(ctx.activeTab === "monitoring" && ctx.hasVisited("monitoring") ? 2 : -1);
232
+ i0.ɵɵadvance();
233
+ i0.ɵɵconditional(ctx.activeTab === "jobs" && ctx.hasVisited("jobs") ? 3 : -1);
234
+ i0.ɵɵadvance();
235
+ i0.ɵɵconditional(ctx.activeTab === "history" && ctx.hasVisited("history") ? 4 : -1);
236
+ i0.ɵɵadvance();
237
+ i0.ɵɵconditional(ctx.activeTab === "types" && ctx.hasVisited("types") ? 5 : -1);
238
+ i0.ɵɵadvance();
239
+ i0.ɵɵconditional(ctx.activeTab === "health" && ctx.hasVisited("health") ? 6 : -1);
240
+ i0.ɵɵadvance(2);
241
+ i0.ɵɵrepeater(ctx.navigationConfig);
242
+ } }, dependencies: [i1.SchedulingMonitoringComponent, i2.SchedulingJobsComponent, i3.SchedulingHistoryComponent, i4.SchedulingTypesComponent, i5.SchedulingHealthComponent], styles: [".scheduling-dashboard[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 100%;\n overflow: hidden;\n}\n\n.dashboard-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow: auto;\n padding: 20px;\n}\n\n.scheduling-dashboard-nav[_ngcontent-%COMP%] {\n display: flex;\n background: #f8f9fa;\n border-top: 1px solid #dee2e6;\n padding: 8px;\n gap: 4px;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.nav-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 12px 20px;\n cursor: pointer;\n border-radius: 8px;\n transition: all 0.2s;\n color: #6c757d;\n min-width: 80px;\n\n i {\n font-size: 24px;\n margin-bottom: 4px;\n }\n\n span {\n font-size: 12px;\n font-weight: 500;\n }\n\n &:hover {\n background: #e9ecef;\n color: #495057;\n }\n\n &.active {\n background: #0078d4;\n color: white;\n }\n}"], changeDetection: 0 });
243
+ };
244
+ SchedulingDashboardComponent = __decorate([
245
+ RegisterClass(BaseDashboard, 'SchedulingDashboard')
246
+ ], SchedulingDashboardComponent);
247
+ export { SchedulingDashboardComponent };
248
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SchedulingDashboardComponent, [{
249
+ type: Component,
250
+ args: [{ selector: 'mj-scheduling-dashboard', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"scheduling-dashboard\">\n <div class=\"dashboard-content\">\n @if (activeTab === 'monitoring' && hasVisited('monitoring')) {\n <app-scheduling-monitoring\n [initialState]=\"monitoringState\"\n (stateChange)=\"onMonitoringStateChange($event)\">\n </app-scheduling-monitoring>\n }\n\n @if (activeTab === 'jobs' && hasVisited('jobs')) {\n <app-scheduling-jobs\n [initialState]=\"jobsState\"\n (stateChange)=\"onJobsStateChange($event)\">\n </app-scheduling-jobs>\n }\n\n @if (activeTab === 'history' && hasVisited('history')) {\n <app-scheduling-history\n [initialState]=\"historyState\"\n (stateChange)=\"onHistoryStateChange($event)\">\n </app-scheduling-history>\n }\n\n @if (activeTab === 'types' && hasVisited('types')) {\n <app-scheduling-types\n [initialState]=\"typesState\"\n (stateChange)=\"onTypesStateChange($event)\">\n </app-scheduling-types>\n }\n\n @if (activeTab === 'health' && hasVisited('health')) {\n <app-scheduling-health\n [initialState]=\"healthState\"\n (stateChange)=\"onHealthStateChange($event)\">\n </app-scheduling-health>\n }\n </div>\n\n <div class=\"scheduling-dashboard-nav\">\n @for (navItem of navigationConfig; track $index) {\n <div\n class=\"nav-item\"\n [class.active]=\"navItem.selected\"\n (click)=\"onTabChange(navigationItems[$index])\">\n <i [class]=\"navItem.icon\"></i>\n <span>{{ navItem.text }}</span>\n </div>\n }\n </div>\n</div>\n", styles: [".scheduling-dashboard {\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 100%;\n overflow: hidden;\n}\n\n.dashboard-content {\n flex: 1;\n overflow: auto;\n padding: 20px;\n}\n\n.scheduling-dashboard-nav {\n display: flex;\n background: #f8f9fa;\n border-top: 1px solid #dee2e6;\n padding: 8px;\n gap: 4px;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.nav-item {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 12px 20px;\n cursor: pointer;\n border-radius: 8px;\n transition: all 0.2s;\n color: #6c757d;\n min-width: 80px;\n\n i {\n font-size: 24px;\n margin-bottom: 4px;\n }\n\n span {\n font-size: 12px;\n font-weight: 500;\n }\n\n &:hover {\n background: #e9ecef;\n color: #495057;\n }\n\n &.active {\n background: #0078d4;\n color: white;\n }\n}\n"] }]
251
+ }], () => [{ type: i0.ChangeDetectorRef }], null); })();
252
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SchedulingDashboardComponent, { className: "SchedulingDashboardComponent", filePath: "src/Scheduling/scheduling-dashboard.component.ts", lineNumber: 24 }); })();
253
+ export function LoadSchedulingDashboard() {
254
+ // Prevents tree-shaking
255
+ }
256
+ //# sourceMappingURL=scheduling-dashboard.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduling-dashboard.component.js","sourceRoot":"","sources":["../../src/Scheduling/scheduling-dashboard.component.ts","../../src/Scheduling/scheduling-dashboard.component.html"],"names":[],"mappings":"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"}
@@ -0,0 +1,102 @@
1
+ import * as i0 from "@angular/core";
2
+ export interface SchedulingKPIs {
3
+ totalActiveJobs: number;
4
+ jobsDueInNextHour: number;
5
+ recentExecutions24h: number;
6
+ successRate24h: number;
7
+ currentlyRunning: number;
8
+ lockedJobs: number;
9
+ totalCost24h: number;
10
+ failureRate7d: number;
11
+ totalFailures7d: number;
12
+ pollingInterval: number;
13
+ }
14
+ export interface JobExecution {
15
+ id: string;
16
+ jobId: string;
17
+ jobName: string;
18
+ jobType: string;
19
+ status: 'Running' | 'Completed' | 'Failed' | 'Cancelled' | 'Timeout';
20
+ startedAt: Date;
21
+ completedAt?: Date;
22
+ duration?: number;
23
+ success?: boolean;
24
+ errorMessage?: string;
25
+ lockedBy?: string;
26
+ }
27
+ export interface UpcomingExecution {
28
+ jobId: string;
29
+ jobName: string;
30
+ jobType: string;
31
+ nextRunAt: Date;
32
+ cronExpression: string;
33
+ timezone: string;
34
+ }
35
+ export interface JobStatistics {
36
+ jobId: string;
37
+ jobName: string;
38
+ jobType: string;
39
+ status: string;
40
+ totalRuns: number;
41
+ successCount: number;
42
+ failureCount: number;
43
+ successRate: number;
44
+ lastRunAt?: Date;
45
+ nextRunAt?: Date;
46
+ averageDuration?: number;
47
+ }
48
+ export interface JobTypeStatistics {
49
+ typeId: string;
50
+ typeName: string;
51
+ activeJobsCount: number;
52
+ totalRuns: number;
53
+ successRate: number;
54
+ }
55
+ export interface ExecutionTrendData {
56
+ timestamp: Date;
57
+ executions: number;
58
+ successes: number;
59
+ failures: number;
60
+ }
61
+ export interface LockInfo {
62
+ jobId: string;
63
+ jobName: string;
64
+ lockToken: string;
65
+ lockedAt: Date;
66
+ lockedBy: string;
67
+ expectedCompletion: Date;
68
+ isStale: boolean;
69
+ }
70
+ export declare class SchedulingInstrumentationService {
71
+ private readonly _dateRange$;
72
+ private readonly _refreshTrigger$;
73
+ private readonly _isLoading$;
74
+ private readonly metadata;
75
+ readonly isLoading$: import("rxjs").Observable<boolean>;
76
+ constructor();
77
+ readonly kpis$: import("rxjs").Observable<SchedulingKPIs>;
78
+ readonly liveExecutions$: import("rxjs").Observable<JobExecution[]>;
79
+ readonly upcomingExecutions$: import("rxjs").Observable<UpcomingExecution[]>;
80
+ readonly executionHistory$: import("rxjs").Observable<JobExecution[]>;
81
+ readonly executionTrends$: import("rxjs").Observable<ExecutionTrendData[]>;
82
+ readonly jobStatistics$: import("rxjs").Observable<JobStatistics[]>;
83
+ readonly jobTypes$: import("rxjs").Observable<JobTypeStatistics[]>;
84
+ readonly lockInfo$: import("rxjs").Observable<LockInfo[]>;
85
+ setDateRange(start: Date, end: Date): void;
86
+ refresh(): void;
87
+ private loadKPIs;
88
+ private loadLiveExecutions;
89
+ private loadUpcomingExecutions;
90
+ private loadExecutionHistory;
91
+ private loadExecutionTrends;
92
+ private loadJobStatistics;
93
+ private loadJobTypes;
94
+ private loadLockInfo;
95
+ private createTimeBuckets;
96
+ executeJobManually(jobId: string): Promise<boolean>;
97
+ updateJobStatus(jobId: string, status: 'Pending' | 'Active' | 'Paused' | 'Disabled' | 'Expired'): Promise<boolean>;
98
+ releaseLock(jobId: string): Promise<boolean>;
99
+ static ɵfac: i0.ɵɵFactoryDeclaration<SchedulingInstrumentationService, never>;
100
+ static ɵprov: i0.ɵɵInjectableDeclaration<SchedulingInstrumentationService>;
101
+ }
102
+ //# sourceMappingURL=scheduling-instrumentation.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduling-instrumentation.service.d.ts","sourceRoot":"","sources":["../../../src/Scheduling/services/scheduling-instrumentation.service.ts"],"names":[],"mappings":"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"}