@memberjunction/ng-dashboards 2.126.0 → 2.127.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.
- package/dist/Communication/communication-dashboard.component.d.ts +37 -0
- package/dist/Communication/communication-dashboard.component.d.ts.map +1 -0
- package/dist/Communication/communication-dashboard.component.js +225 -0
- package/dist/Communication/communication-dashboard.component.js.map +1 -0
- package/dist/Communication/communication-logs-resource.component.d.ts +26 -0
- package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -0
- package/dist/Communication/communication-logs-resource.component.js +244 -0
- package/dist/Communication/communication-logs-resource.component.js.map +1 -0
- package/dist/Communication/communication-monitor-resource.component.d.ts +36 -0
- package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -0
- package/dist/Communication/communication-monitor-resource.component.js +382 -0
- package/dist/Communication/communication-monitor-resource.component.js.map +1 -0
- package/dist/Communication/communication-providers-resource.component.d.ts +27 -0
- package/dist/Communication/communication-providers-resource.component.d.ts.map +1 -0
- package/dist/Communication/communication-providers-resource.component.js +253 -0
- package/dist/Communication/communication-providers-resource.component.js.map +1 -0
- package/dist/Communication/communication-runs-resource.component.d.ts +27 -0
- package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -0
- package/dist/Communication/communication-runs-resource.component.js +291 -0
- package/dist/Communication/communication-runs-resource.component.js.map +1 -0
- package/dist/module.d.ts +31 -26
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +33 -4
- package/dist/module.js.map +1 -1
- package/dist/public-api.d.ts +5 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +18 -0
- package/dist/public-api.js.map +1 -1
- package/package.json +25 -25
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { AfterViewInit, OnDestroy, ChangeDetectorRef } from '@angular/core';
|
|
2
|
+
import { BaseDashboard } from '@memberjunction/ng-shared';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
interface CommunicationDashboardState {
|
|
5
|
+
activeTab: string;
|
|
6
|
+
}
|
|
7
|
+
export declare class CommunicationDashboardComponent extends BaseDashboard implements AfterViewInit, OnDestroy {
|
|
8
|
+
private cdr;
|
|
9
|
+
isLoading: boolean;
|
|
10
|
+
activeTab: string;
|
|
11
|
+
selectedIndex: number;
|
|
12
|
+
private visitedTabs;
|
|
13
|
+
navigationItems: string[];
|
|
14
|
+
navigationConfig: {
|
|
15
|
+
text: string;
|
|
16
|
+
icon: string;
|
|
17
|
+
selected: boolean;
|
|
18
|
+
}[];
|
|
19
|
+
private stateChangeSubject;
|
|
20
|
+
constructor(cdr: ChangeDetectorRef);
|
|
21
|
+
ngAfterViewInit(): void;
|
|
22
|
+
ngOnDestroy(): void;
|
|
23
|
+
onTabChange(tabId: string): void;
|
|
24
|
+
hasVisited(tabId: string): boolean;
|
|
25
|
+
private setupStateManagement;
|
|
26
|
+
private emitStateChange;
|
|
27
|
+
loadUserState(state: Partial<CommunicationDashboardState>): void;
|
|
28
|
+
initDashboard(): void;
|
|
29
|
+
loadData(): void;
|
|
30
|
+
getCurrentTabLabel(): string;
|
|
31
|
+
private updateNavigationSelection;
|
|
32
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<CommunicationDashboardComponent, never>;
|
|
33
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<CommunicationDashboardComponent, "mj-communication-dashboard", never, {}, {}, never, never, false, never>;
|
|
34
|
+
}
|
|
35
|
+
export declare function LoadCommunicationDashboard(): void;
|
|
36
|
+
export {};
|
|
37
|
+
//# sourceMappingURL=communication-dashboard.component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"communication-dashboard.component.d.ts","sourceRoot":"","sources":["../../src/Communication/communication-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,2BAA2B;IACjC,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,qBAOa,+BAAgC,SAAQ,aAAc,YAAW,aAAa,EAAE,SAAS;IAoBtF,OAAO,CAAC,GAAG;IAnBhB,SAAS,UAAS;IAClB,SAAS,SAAa;IACtB,aAAa,SAAK;IAGzB,OAAO,CAAC,WAAW,CAAqB;IAGjC,eAAe,EAAE,MAAM,EAAE,CAA4C;IAErE,gBAAgB;;;;QAKrB;IAEF,OAAO,CAAC,kBAAkB,CAA8C;gBAEpD,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;IAQhB,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,2BAA2B,CAAC,GAAG,IAAI;IAYvE,aAAa,IAAI,IAAI;IAWrB,QAAQ,IAAI,IAAI;IAYT,kBAAkB,IAAI,MAAM;IAMnC,OAAO,CAAC,yBAAyB;yCAlHxB,+BAA+B;2CAA/B,+BAA+B;CAuH3C;AAED,wBAAgB,0BAA0B,SAEzC"}
|
|
@@ -0,0 +1,225 @@
|
|
|
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 '@memberjunction/ng-shared';
|
|
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 "@angular/common";
|
|
15
|
+
function CommunicationDashboardComponent_div_11_Template(rf, ctx) { if (rf & 1) {
|
|
16
|
+
const _r1 = i0.ɵɵgetCurrentView();
|
|
17
|
+
i0.ɵɵelementStart(0, "div", 12);
|
|
18
|
+
i0.ɵɵlistener("click", function CommunicationDashboardComponent_div_11_Template_div_click_0_listener() { const i_r2 = i0.ɵɵrestoreView(_r1).index; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.onTabChange(ctx_r2.navigationItems[i_r2])); });
|
|
19
|
+
i0.ɵɵelement(1, "i");
|
|
20
|
+
i0.ɵɵelementStart(2, "span");
|
|
21
|
+
i0.ɵɵtext(3);
|
|
22
|
+
i0.ɵɵelementEnd()();
|
|
23
|
+
} if (rf & 2) {
|
|
24
|
+
const item_r4 = ctx.$implicit;
|
|
25
|
+
i0.ɵɵclassProp("selected", item_r4.selected);
|
|
26
|
+
i0.ɵɵadvance();
|
|
27
|
+
i0.ɵɵclassMap(item_r4.icon);
|
|
28
|
+
i0.ɵɵadvance(2);
|
|
29
|
+
i0.ɵɵtextInterpolate(item_r4.text);
|
|
30
|
+
} }
|
|
31
|
+
function CommunicationDashboardComponent_div_14_Template(rf, ctx) { if (rf & 1) {
|
|
32
|
+
i0.ɵɵelementStart(0, "div", 13)(1, "div", 14)(2, "h3");
|
|
33
|
+
i0.ɵɵtext(3, "Communication Monitoring");
|
|
34
|
+
i0.ɵɵelementEnd();
|
|
35
|
+
i0.ɵɵelementStart(4, "p");
|
|
36
|
+
i0.ɵɵtext(5, "Real-time overview of communication health and delivery metrics.");
|
|
37
|
+
i0.ɵɵelementEnd();
|
|
38
|
+
i0.ɵɵelementStart(6, "div", 15)(7, "div", 16)(8, "span", 17);
|
|
39
|
+
i0.ɵɵtext(9, "Total Messages (24h)");
|
|
40
|
+
i0.ɵɵelementEnd();
|
|
41
|
+
i0.ɵɵelementStart(10, "span", 18);
|
|
42
|
+
i0.ɵɵtext(11, "1,284");
|
|
43
|
+
i0.ɵɵelementEnd()();
|
|
44
|
+
i0.ɵɵelementStart(12, "div", 16)(13, "span", 17);
|
|
45
|
+
i0.ɵɵtext(14, "Delivery Rate");
|
|
46
|
+
i0.ɵɵelementEnd();
|
|
47
|
+
i0.ɵɵelementStart(15, "span", 19);
|
|
48
|
+
i0.ɵɵtext(16, "98.2%");
|
|
49
|
+
i0.ɵɵelementEnd()();
|
|
50
|
+
i0.ɵɵelementStart(17, "div", 16)(18, "span", 17);
|
|
51
|
+
i0.ɵɵtext(19, "Failed Messages");
|
|
52
|
+
i0.ɵɵelementEnd();
|
|
53
|
+
i0.ɵɵelementStart(20, "span", 20);
|
|
54
|
+
i0.ɵɵtext(21, "23");
|
|
55
|
+
i0.ɵɵelementEnd()()()()();
|
|
56
|
+
} }
|
|
57
|
+
function CommunicationDashboardComponent_div_15_Template(rf, ctx) { if (rf & 1) {
|
|
58
|
+
i0.ɵɵelementStart(0, "div", 13)(1, "div", 14)(2, "h3");
|
|
59
|
+
i0.ɵɵtext(3, "Communication Logs");
|
|
60
|
+
i0.ɵɵelementEnd();
|
|
61
|
+
i0.ɵɵelementStart(4, "p");
|
|
62
|
+
i0.ɵɵtext(5, "Detailed history of all outgoing and incoming communications.");
|
|
63
|
+
i0.ɵɵelementEnd()()();
|
|
64
|
+
} }
|
|
65
|
+
function CommunicationDashboardComponent_div_16_Template(rf, ctx) { if (rf & 1) {
|
|
66
|
+
i0.ɵɵelementStart(0, "div", 13)(1, "div", 14)(2, "h3");
|
|
67
|
+
i0.ɵɵtext(3, "Communication Providers");
|
|
68
|
+
i0.ɵɵelementEnd();
|
|
69
|
+
i0.ɵɵelementStart(4, "p");
|
|
70
|
+
i0.ɵɵtext(5, "Manage integrations with SendGrid, Twilio, and other services.");
|
|
71
|
+
i0.ɵɵelementEnd()()();
|
|
72
|
+
} }
|
|
73
|
+
function CommunicationDashboardComponent_div_17_Template(rf, ctx) { if (rf & 1) {
|
|
74
|
+
i0.ɵɵelementStart(0, "div", 13)(1, "div", 14)(2, "h3");
|
|
75
|
+
i0.ɵɵtext(3, "Communication Runs");
|
|
76
|
+
i0.ɵɵelementEnd();
|
|
77
|
+
i0.ɵɵelementStart(4, "p");
|
|
78
|
+
i0.ɵɵtext(5, "Track and manage bulk communication campaigns and automated runs.");
|
|
79
|
+
i0.ɵɵelementEnd()()();
|
|
80
|
+
} }
|
|
81
|
+
let CommunicationDashboardComponent = class CommunicationDashboardComponent extends BaseDashboard {
|
|
82
|
+
cdr;
|
|
83
|
+
isLoading = false;
|
|
84
|
+
activeTab = 'monitor';
|
|
85
|
+
selectedIndex = 0;
|
|
86
|
+
// Track visited tabs for lazy loading
|
|
87
|
+
visitedTabs = new Set();
|
|
88
|
+
// Navigation items
|
|
89
|
+
navigationItems = ['monitor', 'logs', 'providers', 'runs'];
|
|
90
|
+
navigationConfig = [
|
|
91
|
+
{ text: 'Monitor', icon: 'fa-solid fa-chart-line', selected: false },
|
|
92
|
+
{ text: 'Logs', icon: 'fa-solid fa-list-ul', selected: false },
|
|
93
|
+
{ text: 'Providers', icon: 'fa-solid fa-server', selected: false },
|
|
94
|
+
{ text: 'Runs', icon: 'fa-solid fa-play', selected: false }
|
|
95
|
+
];
|
|
96
|
+
stateChangeSubject = new Subject();
|
|
97
|
+
constructor(cdr) {
|
|
98
|
+
super();
|
|
99
|
+
this.cdr = cdr;
|
|
100
|
+
this.setupStateManagement();
|
|
101
|
+
this.updateNavigationSelection();
|
|
102
|
+
}
|
|
103
|
+
ngAfterViewInit() {
|
|
104
|
+
this.visitedTabs.add(this.activeTab);
|
|
105
|
+
this.updateNavigationSelection();
|
|
106
|
+
this.emitStateChange();
|
|
107
|
+
this.cdr.detectChanges();
|
|
108
|
+
}
|
|
109
|
+
ngOnDestroy() {
|
|
110
|
+
this.stateChangeSubject.complete();
|
|
111
|
+
}
|
|
112
|
+
onTabChange(tabId) {
|
|
113
|
+
this.activeTab = tabId;
|
|
114
|
+
const index = this.navigationItems.indexOf(tabId);
|
|
115
|
+
this.selectedIndex = index >= 0 ? index : 0;
|
|
116
|
+
this.updateNavigationSelection();
|
|
117
|
+
setTimeout(() => {
|
|
118
|
+
SharedService.Instance.InvokeManualResize();
|
|
119
|
+
}, 100);
|
|
120
|
+
this.visitedTabs.add(tabId);
|
|
121
|
+
this.emitStateChange();
|
|
122
|
+
this.cdr.markForCheck();
|
|
123
|
+
}
|
|
124
|
+
hasVisited(tabId) {
|
|
125
|
+
return this.visitedTabs.has(tabId);
|
|
126
|
+
}
|
|
127
|
+
setupStateManagement() {
|
|
128
|
+
this.stateChangeSubject.pipe(debounceTime(50)).subscribe(state => {
|
|
129
|
+
this.UserStateChanged.emit(state);
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
emitStateChange() {
|
|
133
|
+
const state = {
|
|
134
|
+
activeTab: this.activeTab
|
|
135
|
+
};
|
|
136
|
+
this.stateChangeSubject.next(state);
|
|
137
|
+
}
|
|
138
|
+
loadUserState(state) {
|
|
139
|
+
if (state.activeTab) {
|
|
140
|
+
this.activeTab = state.activeTab;
|
|
141
|
+
const index = this.navigationItems.indexOf(state.activeTab);
|
|
142
|
+
this.selectedIndex = index >= 0 ? index : 0;
|
|
143
|
+
this.visitedTabs.add(state.activeTab);
|
|
144
|
+
this.updateNavigationSelection();
|
|
145
|
+
}
|
|
146
|
+
this.cdr.markForCheck();
|
|
147
|
+
}
|
|
148
|
+
initDashboard() {
|
|
149
|
+
try {
|
|
150
|
+
this.isLoading = true;
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
console.error('Error initializing Communication dashboard:', error);
|
|
154
|
+
this.Error.emit(new Error('Failed to initialize Communication dashboard. Please try again.'));
|
|
155
|
+
}
|
|
156
|
+
finally {
|
|
157
|
+
this.isLoading = false;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
loadData() {
|
|
161
|
+
if (this.Config?.userState) {
|
|
162
|
+
setTimeout(() => {
|
|
163
|
+
if (this.Config?.userState) {
|
|
164
|
+
this.loadUserState(this.Config.userState);
|
|
165
|
+
}
|
|
166
|
+
}, 0);
|
|
167
|
+
}
|
|
168
|
+
this.LoadingComplete.emit();
|
|
169
|
+
}
|
|
170
|
+
getCurrentTabLabel() {
|
|
171
|
+
const tabIndex = this.navigationItems.indexOf(this.activeTab);
|
|
172
|
+
const labels = ['Monitor', 'Logs', 'Providers', 'Runs'];
|
|
173
|
+
return tabIndex >= 0 ? labels[tabIndex] : 'Communication Management';
|
|
174
|
+
}
|
|
175
|
+
updateNavigationSelection() {
|
|
176
|
+
this.navigationConfig.forEach((item, index) => {
|
|
177
|
+
item.selected = this.navigationItems[index] === this.activeTab;
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
static ɵfac = function CommunicationDashboardComponent_Factory(t) { return new (t || CommunicationDashboardComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
|
|
181
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CommunicationDashboardComponent, selectors: [["mj-communication-dashboard"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 18, vars: 7, consts: [[1, "communication-dashboard-container"], [1, "dashboard-header"], [1, "header-title"], [1, "fa-solid", "fa-comments"], [1, "header-actions"], [1, "tab-label"], [1, "dashboard-content"], [1, "sidebar"], ["class", "nav-item", 3, "selected", "click", 4, "ngFor", "ngForOf"], [1, "main-content"], [1, "tab-container", 3, "ngSwitch"], ["class", "tab-content", 4, "ngSwitchCase"], [1, "nav-item", 3, "click"], [1, "tab-content"], [1, "placeholder-content"], [1, "stats-grid"], [1, "stat-card"], [1, "stat-label"], [1, "stat-value"], [1, "stat-value", "success"], [1, "stat-value", "error"]], template: function CommunicationDashboardComponent_Template(rf, ctx) { if (rf & 1) {
|
|
182
|
+
i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2);
|
|
183
|
+
i0.ɵɵelement(3, "i", 3);
|
|
184
|
+
i0.ɵɵelementStart(4, "span");
|
|
185
|
+
i0.ɵɵtext(5, "Communication Management");
|
|
186
|
+
i0.ɵɵelementEnd()();
|
|
187
|
+
i0.ɵɵelementStart(6, "div", 4)(7, "span", 5);
|
|
188
|
+
i0.ɵɵtext(8);
|
|
189
|
+
i0.ɵɵelementEnd()()();
|
|
190
|
+
i0.ɵɵelementStart(9, "div", 6)(10, "div", 7);
|
|
191
|
+
i0.ɵɵtemplate(11, CommunicationDashboardComponent_div_11_Template, 4, 5, "div", 8);
|
|
192
|
+
i0.ɵɵelementEnd();
|
|
193
|
+
i0.ɵɵelementStart(12, "div", 9)(13, "div", 10);
|
|
194
|
+
i0.ɵɵtemplate(14, CommunicationDashboardComponent_div_14_Template, 22, 0, "div", 11)(15, CommunicationDashboardComponent_div_15_Template, 6, 0, "div", 11)(16, CommunicationDashboardComponent_div_16_Template, 6, 0, "div", 11)(17, CommunicationDashboardComponent_div_17_Template, 6, 0, "div", 11);
|
|
195
|
+
i0.ɵɵelementEnd()()()();
|
|
196
|
+
} if (rf & 2) {
|
|
197
|
+
i0.ɵɵadvance(8);
|
|
198
|
+
i0.ɵɵtextInterpolate(ctx.getCurrentTabLabel());
|
|
199
|
+
i0.ɵɵadvance(3);
|
|
200
|
+
i0.ɵɵproperty("ngForOf", ctx.navigationConfig);
|
|
201
|
+
i0.ɵɵadvance(2);
|
|
202
|
+
i0.ɵɵproperty("ngSwitch", ctx.activeTab);
|
|
203
|
+
i0.ɵɵadvance();
|
|
204
|
+
i0.ɵɵproperty("ngSwitchCase", "monitor");
|
|
205
|
+
i0.ɵɵadvance();
|
|
206
|
+
i0.ɵɵproperty("ngSwitchCase", "logs");
|
|
207
|
+
i0.ɵɵadvance();
|
|
208
|
+
i0.ɵɵproperty("ngSwitchCase", "providers");
|
|
209
|
+
i0.ɵɵadvance();
|
|
210
|
+
i0.ɵɵproperty("ngSwitchCase", "runs");
|
|
211
|
+
} }, dependencies: [i1.NgForOf, i1.NgSwitch, i1.NgSwitchCase], styles: [".communication-dashboard-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 100%;\n background-color: #f5f7f9;\n color: #333;\n font-family: 'Inter', -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\n}\n\n.dashboard-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 24px;\n background-color: #fff;\n border-bottom: 1px solid #e0e4e8;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.02);\n}\n\n.header-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n font-size: 1.25rem;\n font-weight: 600;\n color: #1a1a1a;\n}\n\n.header-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #00bcd4;\n}\n\n.tab-label[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n font-weight: 500;\n color: #666;\n background: #f0f2f5;\n padding: 4px 12px;\n border-radius: 16px;\n}\n\n.dashboard-content[_ngcontent-%COMP%] {\n display: flex;\n flex: 1;\n overflow: hidden;\n}\n\n.sidebar[_ngcontent-%COMP%] {\n width: 240px;\n background-color: #fff;\n border-right: 1px solid #e0e4e8;\n padding: 16px 0;\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.nav-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 24px;\n cursor: pointer;\n transition: all 0.2s ease;\n color: #555;\n font-weight: 500;\n}\n\n.nav-item[_ngcontent-%COMP%]:hover {\n background-color: #f0f7ff;\n color: #007bff;\n}\n\n.nav-item.selected[_ngcontent-%COMP%] {\n background-color: #e6f0ff;\n color: #007bff;\n border-right: 3px solid #007bff;\n}\n\n.nav-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n width: 20px;\n text-align: center;\n font-size: 1.1rem;\n}\n\n.main-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 24px;\n}\n\n.tab-container[_ngcontent-%COMP%] {\n height: 100%;\n}\n\n.tab-content[_ngcontent-%COMP%] {\n background: #fff;\n border-radius: 8px;\n padding: 32px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n min-height: 400px;\n}\n\n.placeholder-content[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin-top: 0;\n font-size: 1.5rem;\n color: #1a1a1a;\n}\n\n.placeholder-content[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n color: #666;\n line-height: 1.6;\n}\n\n.stats-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 20px;\n margin-top: 32px;\n}\n\n.stat-card[_ngcontent-%COMP%] {\n background: #f8fafc;\n border: 1px solid #e2e8f0;\n padding: 20px;\n border-radius: 8px;\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.stat-label[_ngcontent-%COMP%] {\n font-size: 0.875rem;\n color: #64748b;\n text-transform: uppercase;\n letter-spacing: 0.025em;\n}\n\n.stat-value[_ngcontent-%COMP%] {\n font-size: 2rem;\n font-weight: 700;\n color: #1e293b;\n}\n\n.stat-value.success[_ngcontent-%COMP%] {\n color: #10b981;\n}\n\n.stat-value.error[_ngcontent-%COMP%] {\n color: #ef4444;\n}"], changeDetection: 0 });
|
|
212
|
+
};
|
|
213
|
+
CommunicationDashboardComponent = __decorate([
|
|
214
|
+
RegisterClass(BaseDashboard, 'CommunicationDashboard')
|
|
215
|
+
], CommunicationDashboardComponent);
|
|
216
|
+
export { CommunicationDashboardComponent };
|
|
217
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CommunicationDashboardComponent, [{
|
|
218
|
+
type: Component,
|
|
219
|
+
args: [{ selector: 'mj-communication-dashboard', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"communication-dashboard-container\">\n <div class=\"dashboard-header\">\n <div class=\"header-title\">\n <i class=\"fa-solid fa-comments\"></i>\n <span>Communication Management</span>\n </div>\n <div class=\"header-actions\">\n <span class=\"tab-label\">{{getCurrentTabLabel()}}</span>\n </div>\n </div>\n\n <div class=\"dashboard-content\">\n <div class=\"sidebar\">\n <div *ngFor=\"let item of navigationConfig; let i = index\" class=\"nav-item\" [class.selected]=\"item.selected\"\n (click)=\"onTabChange(navigationItems[i])\">\n <i [class]=\"item.icon\"></i>\n <span>{{item.text}}</span>\n </div>\n </div>\n\n <div class=\"main-content\">\n <div [ngSwitch]=\"activeTab\" class=\"tab-container\">\n <div *ngSwitchCase=\"'monitor'\" class=\"tab-content\">\n <div class=\"placeholder-content\">\n <h3>Communication Monitoring</h3>\n <p>Real-time overview of communication health and delivery metrics.</p>\n <div class=\"stats-grid\">\n <div class=\"stat-card\">\n <span class=\"stat-label\">Total Messages (24h)</span>\n <span class=\"stat-value\">1,284</span>\n </div>\n <div class=\"stat-card\">\n <span class=\"stat-label\">Delivery Rate</span>\n <span class=\"stat-value success\">98.2%</span>\n </div>\n <div class=\"stat-card\">\n <span class=\"stat-label\">Failed Messages</span>\n <span class=\"stat-value error\">23</span>\n </div>\n </div>\n </div>\n </div>\n <div *ngSwitchCase=\"'logs'\" class=\"tab-content\">\n <div class=\"placeholder-content\">\n <h3>Communication Logs</h3>\n <p>Detailed history of all outgoing and incoming communications.</p>\n </div>\n </div>\n <div *ngSwitchCase=\"'providers'\" class=\"tab-content\">\n <div class=\"placeholder-content\">\n <h3>Communication Providers</h3>\n <p>Manage integrations with SendGrid, Twilio, and other services.</p>\n </div>\n </div>\n <div *ngSwitchCase=\"'runs'\" class=\"tab-content\">\n <div class=\"placeholder-content\">\n <h3>Communication Runs</h3>\n <p>Track and manage bulk communication campaigns and automated runs.</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>", styles: [".communication-dashboard-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 100%;\n background-color: #f5f7f9;\n color: #333;\n font-family: 'Inter', -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\n}\n\n.dashboard-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 24px;\n background-color: #fff;\n border-bottom: 1px solid #e0e4e8;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.02);\n}\n\n.header-title {\n display: flex;\n align-items: center;\n gap: 12px;\n font-size: 1.25rem;\n font-weight: 600;\n color: #1a1a1a;\n}\n\n.header-title i {\n color: #00bcd4;\n}\n\n.tab-label {\n font-size: 0.875rem;\n font-weight: 500;\n color: #666;\n background: #f0f2f5;\n padding: 4px 12px;\n border-radius: 16px;\n}\n\n.dashboard-content {\n display: flex;\n flex: 1;\n overflow: hidden;\n}\n\n.sidebar {\n width: 240px;\n background-color: #fff;\n border-right: 1px solid #e0e4e8;\n padding: 16px 0;\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.nav-item {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 24px;\n cursor: pointer;\n transition: all 0.2s ease;\n color: #555;\n font-weight: 500;\n}\n\n.nav-item:hover {\n background-color: #f0f7ff;\n color: #007bff;\n}\n\n.nav-item.selected {\n background-color: #e6f0ff;\n color: #007bff;\n border-right: 3px solid #007bff;\n}\n\n.nav-item i {\n width: 20px;\n text-align: center;\n font-size: 1.1rem;\n}\n\n.main-content {\n flex: 1;\n overflow-y: auto;\n padding: 24px;\n}\n\n.tab-container {\n height: 100%;\n}\n\n.tab-content {\n background: #fff;\n border-radius: 8px;\n padding: 32px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n min-height: 400px;\n}\n\n.placeholder-content h3 {\n margin-top: 0;\n font-size: 1.5rem;\n color: #1a1a1a;\n}\n\n.placeholder-content p {\n color: #666;\n line-height: 1.6;\n}\n\n.stats-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 20px;\n margin-top: 32px;\n}\n\n.stat-card {\n background: #f8fafc;\n border: 1px solid #e2e8f0;\n padding: 20px;\n border-radius: 8px;\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.stat-label {\n font-size: 0.875rem;\n color: #64748b;\n text-transform: uppercase;\n letter-spacing: 0.025em;\n}\n\n.stat-value {\n font-size: 2rem;\n font-weight: 700;\n color: #1e293b;\n}\n\n.stat-value.success {\n color: #10b981;\n}\n\n.stat-value.error {\n color: #ef4444;\n}"] }]
|
|
220
|
+
}], () => [{ type: i0.ChangeDetectorRef }], null); })();
|
|
221
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CommunicationDashboardComponent, { className: "CommunicationDashboardComponent", filePath: "src/Communication/communication-dashboard.component.ts", lineNumber: 19 }); })();
|
|
222
|
+
export function LoadCommunicationDashboard() {
|
|
223
|
+
// Prevents tree-shaking
|
|
224
|
+
}
|
|
225
|
+
//# sourceMappingURL=communication-dashboard.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"communication-dashboard.component.js","sourceRoot":"","sources":["../../src/Communication/communication-dashboard.component.ts","../../src/Communication/communication-dashboard.component.html"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { OnInit, OnDestroy, ChangeDetectorRef } from '@angular/core';
|
|
2
|
+
import { ResourceData } from '@memberjunction/core-entities';
|
|
3
|
+
import { BaseResourceComponent } from '@memberjunction/ng-shared';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
/**
|
|
6
|
+
* Tree-shaking prevention function
|
|
7
|
+
*/
|
|
8
|
+
export declare function LoadCommunicationLogsResource(): void;
|
|
9
|
+
export declare class CommunicationLogsResourceComponent extends BaseResourceComponent implements OnInit, OnDestroy {
|
|
10
|
+
private cdr;
|
|
11
|
+
logs: any[];
|
|
12
|
+
filteredLogs: any[];
|
|
13
|
+
isLoading: boolean;
|
|
14
|
+
private searchTerm;
|
|
15
|
+
constructor(cdr: ChangeDetectorRef);
|
|
16
|
+
ngOnInit(): Promise<void>;
|
|
17
|
+
ngOnDestroy(): void;
|
|
18
|
+
loadData(): Promise<void>;
|
|
19
|
+
onSearch(event: any): void;
|
|
20
|
+
private applyFilter;
|
|
21
|
+
GetResourceDisplayName(data: ResourceData): Promise<string>;
|
|
22
|
+
GetResourceIconClass(data: ResourceData): Promise<string>;
|
|
23
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<CommunicationLogsResourceComponent, never>;
|
|
24
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<CommunicationLogsResourceComponent, "mj-communication-logs-resource", never, {}, {}, never, never, false, never>;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=communication-logs-resource.component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"communication-logs-resource.component.d.ts","sourceRoot":"","sources":["../../src/Communication/communication-logs-resource.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;;AAGlE;;GAEG;AACH,wBAAgB,6BAA6B,SAE5C;AAED,qBAgNa,kCAAmC,SAAQ,qBAAsB,YAAW,MAAM,EAAE,SAAS;IAM1F,OAAO,CAAC,GAAG;IALhB,IAAI,EAAE,GAAG,EAAE,CAAM;IACjB,YAAY,EAAE,GAAG,EAAE,CAAM;IACzB,SAAS,UAAS;IACzB,OAAO,CAAC,UAAU,CAAM;gBAEJ,GAAG,EAAE,iBAAiB;IAIpC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAK/B,WAAW,IAAI,IAAI;IAEN,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAyB/B,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IAKjC,OAAO,CAAC,WAAW;IAcb,sBAAsB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAI3D,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;yCAjEtD,kCAAkC;2CAAlC,kCAAkC;CAoE9C"}
|
|
@@ -0,0 +1,244 @@
|
|
|
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 } from '@angular/core';
|
|
8
|
+
import { RegisterClass } from '@memberjunction/global';
|
|
9
|
+
import { BaseResourceComponent } from '@memberjunction/ng-shared';
|
|
10
|
+
import { RunView } from '@memberjunction/core';
|
|
11
|
+
import * as i0 from "@angular/core";
|
|
12
|
+
import * as i1 from "@angular/common";
|
|
13
|
+
function CommunicationLogsResourceComponent_div_12_Template(rf, ctx) { if (rf & 1) {
|
|
14
|
+
i0.ɵɵelementStart(0, "div", 12);
|
|
15
|
+
i0.ɵɵelement(1, "div", 13);
|
|
16
|
+
i0.ɵɵelementEnd();
|
|
17
|
+
} }
|
|
18
|
+
function CommunicationLogsResourceComponent_tr_29_Template(rf, ctx) { if (rf & 1) {
|
|
19
|
+
i0.ɵɵelementStart(0, "tr")(1, "td")(2, "span", 14);
|
|
20
|
+
i0.ɵɵtext(3);
|
|
21
|
+
i0.ɵɵelementEnd()();
|
|
22
|
+
i0.ɵɵelementStart(4, "td")(5, "span", 15);
|
|
23
|
+
i0.ɵɵelement(6, "i");
|
|
24
|
+
i0.ɵɵtext(7);
|
|
25
|
+
i0.ɵɵelementEnd()();
|
|
26
|
+
i0.ɵɵelementStart(8, "td");
|
|
27
|
+
i0.ɵɵtext(9);
|
|
28
|
+
i0.ɵɵelementEnd();
|
|
29
|
+
i0.ɵɵelementStart(10, "td");
|
|
30
|
+
i0.ɵɵtext(11);
|
|
31
|
+
i0.ɵɵelementEnd();
|
|
32
|
+
i0.ɵɵelementStart(12, "td");
|
|
33
|
+
i0.ɵɵtext(13);
|
|
34
|
+
i0.ɵɵpipe(14, "date");
|
|
35
|
+
i0.ɵɵelementEnd();
|
|
36
|
+
i0.ɵɵelementStart(15, "td", 16);
|
|
37
|
+
i0.ɵɵtext(16);
|
|
38
|
+
i0.ɵɵelementEnd()();
|
|
39
|
+
} if (rf & 2) {
|
|
40
|
+
const log_r1 = ctx.$implicit;
|
|
41
|
+
i0.ɵɵadvance(2);
|
|
42
|
+
i0.ɵɵclassMap(log_r1.Status.toLowerCase());
|
|
43
|
+
i0.ɵɵadvance();
|
|
44
|
+
i0.ɵɵtextInterpolate1(" ", log_r1.Status, " ");
|
|
45
|
+
i0.ɵɵadvance(2);
|
|
46
|
+
i0.ɵɵclassMap(log_r1.Direction.toLowerCase());
|
|
47
|
+
i0.ɵɵadvance();
|
|
48
|
+
i0.ɵɵclassMap(log_r1.Direction === "Sending" ? "fa-solid fa-arrow-up" : "fa-solid fa-arrow-down");
|
|
49
|
+
i0.ɵɵadvance();
|
|
50
|
+
i0.ɵɵtextInterpolate1(" ", log_r1.Direction, " ");
|
|
51
|
+
i0.ɵɵadvance(2);
|
|
52
|
+
i0.ɵɵtextInterpolate(log_r1.CommunicationProvider);
|
|
53
|
+
i0.ɵɵadvance(2);
|
|
54
|
+
i0.ɵɵtextInterpolate(log_r1.CommunicationProviderMessageType);
|
|
55
|
+
i0.ɵɵadvance(2);
|
|
56
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(14, 13, log_r1.MessageDate, "medium"));
|
|
57
|
+
i0.ɵɵadvance(2);
|
|
58
|
+
i0.ɵɵproperty("title", log_r1.ErrorMessage);
|
|
59
|
+
i0.ɵɵadvance();
|
|
60
|
+
i0.ɵɵtextInterpolate(log_r1.ErrorMessage || "-");
|
|
61
|
+
} }
|
|
62
|
+
function CommunicationLogsResourceComponent_tr_30_Template(rf, ctx) { if (rf & 1) {
|
|
63
|
+
i0.ɵɵelementStart(0, "tr")(1, "td", 17);
|
|
64
|
+
i0.ɵɵtext(2, "No logs found matching your criteria");
|
|
65
|
+
i0.ɵɵelementEnd()();
|
|
66
|
+
} }
|
|
67
|
+
/**
|
|
68
|
+
* Tree-shaking prevention function
|
|
69
|
+
*/
|
|
70
|
+
export function LoadCommunicationLogsResource() {
|
|
71
|
+
// Force inclusion in production builds
|
|
72
|
+
}
|
|
73
|
+
let CommunicationLogsResourceComponent = class CommunicationLogsResourceComponent extends BaseResourceComponent {
|
|
74
|
+
cdr;
|
|
75
|
+
logs = [];
|
|
76
|
+
filteredLogs = [];
|
|
77
|
+
isLoading = false;
|
|
78
|
+
searchTerm = '';
|
|
79
|
+
constructor(cdr) {
|
|
80
|
+
super();
|
|
81
|
+
this.cdr = cdr;
|
|
82
|
+
}
|
|
83
|
+
async ngOnInit() {
|
|
84
|
+
await this.loadData();
|
|
85
|
+
this.NotifyLoadComplete();
|
|
86
|
+
}
|
|
87
|
+
ngOnDestroy() { }
|
|
88
|
+
async loadData() {
|
|
89
|
+
try {
|
|
90
|
+
this.isLoading = true;
|
|
91
|
+
this.cdr.detectChanges();
|
|
92
|
+
const rv = new RunView();
|
|
93
|
+
const result = await rv.RunView({
|
|
94
|
+
EntityName: 'Communication Logs',
|
|
95
|
+
OrderBy: 'MessageDate DESC',
|
|
96
|
+
MaxRows: 100,
|
|
97
|
+
ResultType: 'entity_object'
|
|
98
|
+
});
|
|
99
|
+
if (result.Success) {
|
|
100
|
+
this.logs = result.Results;
|
|
101
|
+
this.applyFilter();
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
console.error('Error loading logs:', error);
|
|
106
|
+
}
|
|
107
|
+
finally {
|
|
108
|
+
this.isLoading = false;
|
|
109
|
+
this.cdr.detectChanges();
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
onSearch(event) {
|
|
113
|
+
this.searchTerm = event.target.value.toLowerCase();
|
|
114
|
+
this.applyFilter();
|
|
115
|
+
}
|
|
116
|
+
applyFilter() {
|
|
117
|
+
if (!this.searchTerm) {
|
|
118
|
+
this.filteredLogs = this.logs;
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
this.filteredLogs = this.logs.filter(l => l.CommunicationProvider?.toLowerCase().includes(this.searchTerm) ||
|
|
122
|
+
l.CommunicationProviderMessageType?.toLowerCase().includes(this.searchTerm) ||
|
|
123
|
+
l.Status?.toLowerCase().includes(this.searchTerm) ||
|
|
124
|
+
l.ErrorMessage?.toLowerCase().includes(this.searchTerm));
|
|
125
|
+
}
|
|
126
|
+
this.cdr.detectChanges();
|
|
127
|
+
}
|
|
128
|
+
async GetResourceDisplayName(data) {
|
|
129
|
+
return 'Logs';
|
|
130
|
+
}
|
|
131
|
+
async GetResourceIconClass(data) {
|
|
132
|
+
return 'fa-solid fa-list-ul';
|
|
133
|
+
}
|
|
134
|
+
static ɵfac = function CommunicationLogsResourceComponent_Factory(t) { return new (t || CommunicationLogsResourceComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
|
|
135
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CommunicationLogsResourceComponent, selectors: [["mj-communication-logs-resource"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 31, vars: 3, consts: [[1, "logs-container"], [1, "logs-header"], [1, "title-area"], [1, "header-actions"], [1, "search-box"], [1, "fa-solid", "fa-magnifying-glass"], ["type", "text", "placeholder", "Search logs...", 3, "input"], [1, "grid-wrapper"], ["class", "loading-overlay", 4, "ngIf"], [1, "custom-grid"], [4, "ngFor", "ngForOf"], [4, "ngIf"], [1, "loading-overlay"], [1, "spinner"], [1, "status-pill"], [1, "direction-icon"], [1, "error-cell", 3, "title"], ["colspan", "6", 1, "no-data"]], template: function CommunicationLogsResourceComponent_Template(rf, ctx) { if (rf & 1) {
|
|
136
|
+
i0.ɵɵelementStart(0, "div", 0)(1, "header", 1)(2, "div", 2)(3, "h1");
|
|
137
|
+
i0.ɵɵtext(4, "Communication Logs");
|
|
138
|
+
i0.ɵɵelementEnd();
|
|
139
|
+
i0.ɵɵelementStart(5, "p");
|
|
140
|
+
i0.ɵɵtext(6, "Full audit trail of all messages");
|
|
141
|
+
i0.ɵɵelementEnd()();
|
|
142
|
+
i0.ɵɵelementStart(7, "div", 3)(8, "div", 4);
|
|
143
|
+
i0.ɵɵelement(9, "i", 5);
|
|
144
|
+
i0.ɵɵelementStart(10, "input", 6);
|
|
145
|
+
i0.ɵɵlistener("input", function CommunicationLogsResourceComponent_Template_input_input_10_listener($event) { return ctx.onSearch($event); });
|
|
146
|
+
i0.ɵɵelementEnd()()()();
|
|
147
|
+
i0.ɵɵelementStart(11, "div", 7);
|
|
148
|
+
i0.ɵɵtemplate(12, CommunicationLogsResourceComponent_div_12_Template, 2, 0, "div", 8);
|
|
149
|
+
i0.ɵɵelementStart(13, "table", 9)(14, "thead")(15, "tr")(16, "th");
|
|
150
|
+
i0.ɵɵtext(17, "Status");
|
|
151
|
+
i0.ɵɵelementEnd();
|
|
152
|
+
i0.ɵɵelementStart(18, "th");
|
|
153
|
+
i0.ɵɵtext(19, "Direction");
|
|
154
|
+
i0.ɵɵelementEnd();
|
|
155
|
+
i0.ɵɵelementStart(20, "th");
|
|
156
|
+
i0.ɵɵtext(21, "Provider");
|
|
157
|
+
i0.ɵɵelementEnd();
|
|
158
|
+
i0.ɵɵelementStart(22, "th");
|
|
159
|
+
i0.ɵɵtext(23, "Type");
|
|
160
|
+
i0.ɵɵelementEnd();
|
|
161
|
+
i0.ɵɵelementStart(24, "th");
|
|
162
|
+
i0.ɵɵtext(25, "Date");
|
|
163
|
+
i0.ɵɵelementEnd();
|
|
164
|
+
i0.ɵɵelementStart(26, "th");
|
|
165
|
+
i0.ɵɵtext(27, "Error Message");
|
|
166
|
+
i0.ɵɵelementEnd()()();
|
|
167
|
+
i0.ɵɵelementStart(28, "tbody");
|
|
168
|
+
i0.ɵɵtemplate(29, CommunicationLogsResourceComponent_tr_29_Template, 17, 16, "tr", 10)(30, CommunicationLogsResourceComponent_tr_30_Template, 3, 0, "tr", 11);
|
|
169
|
+
i0.ɵɵelementEnd()()()();
|
|
170
|
+
} if (rf & 2) {
|
|
171
|
+
i0.ɵɵadvance(12);
|
|
172
|
+
i0.ɵɵproperty("ngIf", ctx.isLoading);
|
|
173
|
+
i0.ɵɵadvance(17);
|
|
174
|
+
i0.ɵɵproperty("ngForOf", ctx.filteredLogs);
|
|
175
|
+
i0.ɵɵadvance();
|
|
176
|
+
i0.ɵɵproperty("ngIf", ctx.filteredLogs.length === 0 && !ctx.isLoading);
|
|
177
|
+
} }, dependencies: [i1.NgForOf, i1.NgIf, i1.DatePipe], styles: [".logs-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background-color: #f8fafc;\n font-family: 'Inter', system-ui, -apple-system, sans-serif;\n }\n .logs-header[_ngcontent-%COMP%] {\n padding: 24px 32px;\n background: white;\n border-bottom: 1px solid #e2e8f0;\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n .title-area[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1.5rem;\n font-weight: 800;\n color: #0f172a;\n }\n .title-area[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 4px 0 0;\n color: #64748b;\n font-size: 0.875rem;\n }\n .search-box[_ngcontent-%COMP%] {\n position: relative;\n width: 300px;\n }\n .search-box[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n position: absolute;\n left: 12px;\n top: 50%;\n transform: translateY(-50%);\n color: #94a3b8;\n }\n .search-box[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n width: 100%;\n padding: 10px 12px 10px 40px;\n border: 1px solid #e2e8f0;\n border-radius: 8px;\n font-size: 0.875rem;\n transition: all 0.2s;\n }\n .search-box[_ngcontent-%COMP%] input[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: #3b82f6;\n box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n }\n\n .grid-wrapper[_ngcontent-%COMP%] {\n flex: 1;\n padding: 24px 32px;\n overflow-y: auto;\n position: relative;\n }\n\n .custom-grid[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: separate;\n border-spacing: 0;\n background: white;\n border-radius: 12px;\n overflow: hidden;\n box-shadow: 0 1px 3px rgba(0,0,0,0.05);\n border: 1px solid #e2e8f0;\n }\n .custom-grid[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n background: #f8fafc;\n padding: 16px;\n text-align: left;\n font-size: 0.75rem;\n font-weight: 700;\n color: #64748b;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n border-bottom: 1px solid #e2e8f0;\n }\n .custom-grid[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 16px;\n font-size: 0.875rem;\n color: #1e293b;\n border-bottom: 1px solid #f1f5f9;\n }\n .custom-grid[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:last-child td[_ngcontent-%COMP%] {\n border-bottom: none;\n }\n .custom-grid[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover td[_ngcontent-%COMP%] {\n background: #f8fafc;\n }\n\n .status-pill[_ngcontent-%COMP%] {\n padding: 4px 10px;\n border-radius: 20px;\n font-size: 0.75rem;\n font-weight: 700;\n text-transform: uppercase;\n }\n .status-pill.complete[_ngcontent-%COMP%] { background: #dcfce7; color: #166534; }\n .status-pill.failed[_ngcontent-%COMP%] { background: #fee2e2; color: #991b1b; }\n .status-pill.pending[_ngcontent-%COMP%] { background: #fef3c7; color: #92400e; }\n\n .direction-icon[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 500;\n }\n .direction-icon.sending[_ngcontent-%COMP%] { color: #3b82f6; }\n .direction-icon.receiving[_ngcontent-%COMP%] { color: #8b5cf6; }\n\n .error-cell[_ngcontent-%COMP%] {\n color: #ef4444;\n max-width: 200px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .no-data[_ngcontent-%COMP%] {\n text-align: center;\n padding: 48px !important;\n color: #94a3b8;\n font-style: italic;\n }\n\n .loading-overlay[_ngcontent-%COMP%] {\n position: absolute;\n top: 0; left: 0; right: 0; bottom: 0;\n background: rgba(255,255,255,0.7);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 10;\n }\n .spinner[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n border: 3px solid #e2e8f0;\n border-top-color: #3b82f6;\n border-radius: 50%;\n animation: _ngcontent-%COMP%_spin 0.8s linear infinite;\n }\n @keyframes _ngcontent-%COMP%_spin { to { transform: rotate(360deg); } }"] });
|
|
178
|
+
};
|
|
179
|
+
CommunicationLogsResourceComponent = __decorate([
|
|
180
|
+
RegisterClass(BaseResourceComponent, 'CommunicationLogsResource')
|
|
181
|
+
], CommunicationLogsResourceComponent);
|
|
182
|
+
export { CommunicationLogsResourceComponent };
|
|
183
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CommunicationLogsResourceComponent, [{
|
|
184
|
+
type: Component,
|
|
185
|
+
args: [{ selector: 'mj-communication-logs-resource', template: `
|
|
186
|
+
<div class="logs-container">
|
|
187
|
+
<header class="logs-header">
|
|
188
|
+
<div class="title-area">
|
|
189
|
+
<h1>Communication Logs</h1>
|
|
190
|
+
<p>Full audit trail of all messages</p>
|
|
191
|
+
</div>
|
|
192
|
+
<div class="header-actions">
|
|
193
|
+
<div class="search-box">
|
|
194
|
+
<i class="fa-solid fa-magnifying-glass"></i>
|
|
195
|
+
<input type="text" placeholder="Search logs..." (input)="onSearch($event)">
|
|
196
|
+
</div>
|
|
197
|
+
</div>
|
|
198
|
+
</header>
|
|
199
|
+
|
|
200
|
+
<div class="grid-wrapper">
|
|
201
|
+
<div *ngIf="isLoading" class="loading-overlay">
|
|
202
|
+
<div class="spinner"></div>
|
|
203
|
+
</div>
|
|
204
|
+
|
|
205
|
+
<table class="custom-grid">
|
|
206
|
+
<thead>
|
|
207
|
+
<tr>
|
|
208
|
+
<th>Status</th>
|
|
209
|
+
<th>Direction</th>
|
|
210
|
+
<th>Provider</th>
|
|
211
|
+
<th>Type</th>
|
|
212
|
+
<th>Date</th>
|
|
213
|
+
<th>Error Message</th>
|
|
214
|
+
</tr>
|
|
215
|
+
</thead>
|
|
216
|
+
<tbody>
|
|
217
|
+
<tr *ngFor="let log of filteredLogs">
|
|
218
|
+
<td>
|
|
219
|
+
<span class="status-pill" [class]="log.Status.toLowerCase()">
|
|
220
|
+
{{log.Status}}
|
|
221
|
+
</span>
|
|
222
|
+
</td>
|
|
223
|
+
<td>
|
|
224
|
+
<span class="direction-icon" [class]="log.Direction.toLowerCase()">
|
|
225
|
+
<i [class]="log.Direction === 'Sending' ? 'fa-solid fa-arrow-up' : 'fa-solid fa-arrow-down'"></i>
|
|
226
|
+
{{log.Direction}}
|
|
227
|
+
</span>
|
|
228
|
+
</td>
|
|
229
|
+
<td>{{log.CommunicationProvider}}</td>
|
|
230
|
+
<td>{{log.CommunicationProviderMessageType}}</td>
|
|
231
|
+
<td>{{log.MessageDate | date:'medium'}}</td>
|
|
232
|
+
<td class="error-cell" [title]="log.ErrorMessage">{{log.ErrorMessage || '-'}}</td>
|
|
233
|
+
</tr>
|
|
234
|
+
<tr *ngIf="filteredLogs.length === 0 && !isLoading">
|
|
235
|
+
<td colspan="6" class="no-data">No logs found matching your criteria</td>
|
|
236
|
+
</tr>
|
|
237
|
+
</tbody>
|
|
238
|
+
</table>
|
|
239
|
+
</div>
|
|
240
|
+
</div>
|
|
241
|
+
`, styles: ["\n .logs-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n background-color: #f8fafc;\n font-family: 'Inter', system-ui, -apple-system, sans-serif;\n }\n .logs-header {\n padding: 24px 32px;\n background: white;\n border-bottom: 1px solid #e2e8f0;\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n .title-area h1 {\n margin: 0;\n font-size: 1.5rem;\n font-weight: 800;\n color: #0f172a;\n }\n .title-area p {\n margin: 4px 0 0;\n color: #64748b;\n font-size: 0.875rem;\n }\n .search-box {\n position: relative;\n width: 300px;\n }\n .search-box i {\n position: absolute;\n left: 12px;\n top: 50%;\n transform: translateY(-50%);\n color: #94a3b8;\n }\n .search-box input {\n width: 100%;\n padding: 10px 12px 10px 40px;\n border: 1px solid #e2e8f0;\n border-radius: 8px;\n font-size: 0.875rem;\n transition: all 0.2s;\n }\n .search-box input:focus {\n outline: none;\n border-color: #3b82f6;\n box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n }\n\n .grid-wrapper {\n flex: 1;\n padding: 24px 32px;\n overflow-y: auto;\n position: relative;\n }\n\n .custom-grid {\n width: 100%;\n border-collapse: separate;\n border-spacing: 0;\n background: white;\n border-radius: 12px;\n overflow: hidden;\n box-shadow: 0 1px 3px rgba(0,0,0,0.05);\n border: 1px solid #e2e8f0;\n }\n .custom-grid th {\n background: #f8fafc;\n padding: 16px;\n text-align: left;\n font-size: 0.75rem;\n font-weight: 700;\n color: #64748b;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n border-bottom: 1px solid #e2e8f0;\n }\n .custom-grid td {\n padding: 16px;\n font-size: 0.875rem;\n color: #1e293b;\n border-bottom: 1px solid #f1f5f9;\n }\n .custom-grid tr:last-child td {\n border-bottom: none;\n }\n .custom-grid tr:hover td {\n background: #f8fafc;\n }\n\n .status-pill {\n padding: 4px 10px;\n border-radius: 20px;\n font-size: 0.75rem;\n font-weight: 700;\n text-transform: uppercase;\n }\n .status-pill.complete { background: #dcfce7; color: #166534; }\n .status-pill.failed { background: #fee2e2; color: #991b1b; }\n .status-pill.pending { background: #fef3c7; color: #92400e; }\n\n .direction-icon {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 500;\n }\n .direction-icon.sending { color: #3b82f6; }\n .direction-icon.receiving { color: #8b5cf6; }\n\n .error-cell {\n color: #ef4444;\n max-width: 200px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .no-data {\n text-align: center;\n padding: 48px !important;\n color: #94a3b8;\n font-style: italic;\n }\n\n .loading-overlay {\n position: absolute;\n top: 0; left: 0; right: 0; bottom: 0;\n background: rgba(255,255,255,0.7);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 10;\n }\n .spinner {\n width: 32px;\n height: 32px;\n border: 3px solid #e2e8f0;\n border-top-color: #3b82f6;\n border-radius: 50%;\n animation: spin 0.8s linear infinite;\n }\n @keyframes spin { to { transform: rotate(360deg); } }\n "] }]
|
|
242
|
+
}], () => [{ type: i0.ChangeDetectorRef }], null); })();
|
|
243
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CommunicationLogsResourceComponent, { className: "CommunicationLogsResourceComponent", filePath: "src/Communication/communication-logs-resource.component.ts", lineNumber: 222 }); })();
|
|
244
|
+
//# sourceMappingURL=communication-logs-resource.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"communication-logs-resource.component.js","sourceRoot":"","sources":["../../src/Communication/communication-logs-resource.component.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { OnInit, OnDestroy, ChangeDetectorRef } from '@angular/core';
|
|
2
|
+
import { ResourceData } from '@memberjunction/core-entities';
|
|
3
|
+
import { BaseResourceComponent } from '@memberjunction/ng-shared';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
/**
|
|
6
|
+
* Tree-shaking prevention function
|
|
7
|
+
*/
|
|
8
|
+
export declare function LoadCommunicationMonitorResource(): void;
|
|
9
|
+
export declare class CommunicationMonitorResourceComponent extends BaseResourceComponent implements OnInit, OnDestroy {
|
|
10
|
+
private cdr;
|
|
11
|
+
isLoading: boolean;
|
|
12
|
+
stats: {
|
|
13
|
+
totalSent: number;
|
|
14
|
+
deliveryRate: number;
|
|
15
|
+
pending: number;
|
|
16
|
+
failed: number;
|
|
17
|
+
};
|
|
18
|
+
recentLogs: any[];
|
|
19
|
+
chartData: any[];
|
|
20
|
+
chartConfig: {
|
|
21
|
+
useDualAxis: boolean;
|
|
22
|
+
showGrid: boolean;
|
|
23
|
+
showTooltip: boolean;
|
|
24
|
+
colors: string[];
|
|
25
|
+
};
|
|
26
|
+
constructor(cdr: ChangeDetectorRef);
|
|
27
|
+
ngOnInit(): Promise<void>;
|
|
28
|
+
ngOnDestroy(): void;
|
|
29
|
+
loadData(): Promise<void>;
|
|
30
|
+
private processTrendData;
|
|
31
|
+
GetResourceDisplayName(data: ResourceData): Promise<string>;
|
|
32
|
+
GetResourceIconClass(data: ResourceData): Promise<string>;
|
|
33
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<CommunicationMonitorResourceComponent, never>;
|
|
34
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<CommunicationMonitorResourceComponent, "mj-communication-monitor-resource", never, {}, {}, never, never, false, never>;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=communication-monitor-resource.component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"communication-monitor-resource.component.d.ts","sourceRoot":"","sources":["../../src/Communication/communication-monitor-resource.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;;AAGlE;;GAEG;AACH,wBAAgB,gCAAgC,SAE/C;AAED,qBAuVa,qCAAsC,SAAQ,qBAAsB,YAAW,MAAM,EAAE,SAAS;IAiB7F,OAAO,CAAC,GAAG;IAhBhB,SAAS,UAAS;IAClB,KAAK;;;;;MAKV;IACK,UAAU,EAAE,GAAG,EAAE,CAAM;IACvB,SAAS,EAAE,GAAG,EAAE,CAAM;IACtB,WAAW;;;;;MAKhB;gBAEkB,GAAG,EAAE,iBAAiB;IAIpC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAK/B,WAAW,IAAI,IAAI;IAEN,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAoEtC,OAAO,CAAC,gBAAgB;IA6BlB,sBAAsB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAI3D,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;yCAjItD,qCAAqC;2CAArC,qCAAqC;CAoIjD"}
|