@memberjunction/ng-record-changes 2.42.0 → 2.43.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.
|
@@ -1,32 +1,61 @@
|
|
|
1
1
|
import { EventEmitter, OnInit, Renderer2, ElementRef, AfterViewInit, OnDestroy } from '@angular/core';
|
|
2
|
-
import { DomSanitizer } from '@angular/platform-browser';
|
|
2
|
+
import { DomSanitizer, SafeHtml } from '@angular/platform-browser';
|
|
3
3
|
import { SortDescriptor } from '@progress/kendo-data-query';
|
|
4
|
-
import { BaseEntity } from '@memberjunction/core';
|
|
4
|
+
import { BaseEntity, CompositeKey } from '@memberjunction/core';
|
|
5
|
+
import { RecordChangeEntity } from '@memberjunction/core-entities';
|
|
6
|
+
import { MJNotificationService } from '@memberjunction/ng-notifications';
|
|
5
7
|
import * as i0 from "@angular/core";
|
|
6
8
|
export declare class RecordChangesComponent implements OnInit, AfterViewInit, OnDestroy {
|
|
7
|
-
private sanitizer;
|
|
8
9
|
private renderer;
|
|
10
|
+
private mjNotificationService;
|
|
11
|
+
private sanitizer;
|
|
9
12
|
showloader: boolean;
|
|
10
13
|
dialogClosed: EventEmitter<any>;
|
|
11
14
|
record: BaseEntity;
|
|
12
15
|
wrapper: ElementRef;
|
|
13
|
-
viewData:
|
|
14
|
-
|
|
16
|
+
viewData: RecordChangeEntity[];
|
|
17
|
+
filteredData: RecordChangeEntity[];
|
|
18
|
+
expandedItems: Set<string>;
|
|
19
|
+
searchTerm: string;
|
|
20
|
+
selectedType: string;
|
|
21
|
+
selectedSource: string;
|
|
15
22
|
sortSettings: SortDescriptor[];
|
|
16
|
-
constructor(
|
|
23
|
+
constructor(renderer: Renderer2, mjNotificationService: MJNotificationService, sanitizer: DomSanitizer);
|
|
17
24
|
ngOnInit(): void;
|
|
18
25
|
ngAfterViewInit(): void;
|
|
19
26
|
ngOnDestroy(): void;
|
|
20
|
-
LoadRecordChanges(
|
|
21
|
-
prepareColumns(): void;
|
|
27
|
+
LoadRecordChanges(pkey: CompositeKey, appName: string, entityName: string): Promise<void>;
|
|
22
28
|
closePropertiesDialog(): void;
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
29
|
+
onSearchChange(): void;
|
|
30
|
+
onFilterChange(): void;
|
|
31
|
+
private applyFilters;
|
|
32
|
+
toggleExpansion(changeId: string): void;
|
|
33
|
+
onTimelineItemKeydown(event: KeyboardEvent, changeId: string): void;
|
|
34
|
+
getChangeTypeClass(type: string): string;
|
|
35
|
+
getChangeTypeIcon(type: string): string;
|
|
36
|
+
getChangeTypeBadgeClass(type: string): string;
|
|
37
|
+
getSourceClass(source: string): string;
|
|
38
|
+
getStatusClass(status: string): string;
|
|
39
|
+
getTimelineItemLabel(change: RecordChangeEntity): string;
|
|
40
|
+
formatRelativeTime(date: Date): string;
|
|
41
|
+
formatFullDateTime(date: Date): string;
|
|
42
|
+
getChangeSummary(change: RecordChangeEntity): string;
|
|
43
|
+
getFieldChanges(change: RecordChangeEntity): Array<{
|
|
26
44
|
field: string;
|
|
45
|
+
displayName: string;
|
|
27
46
|
oldValue: any;
|
|
28
47
|
newValue: any;
|
|
29
|
-
|
|
48
|
+
isBooleanField: boolean;
|
|
49
|
+
diffHtml?: SafeHtml;
|
|
50
|
+
}>;
|
|
51
|
+
getCreatedFields(change: RecordChangeEntity): Array<{
|
|
52
|
+
name: string;
|
|
53
|
+
displayName: string;
|
|
54
|
+
value: any;
|
|
55
|
+
}>;
|
|
56
|
+
private generateDiffHtml;
|
|
57
|
+
private shouldUseWordDiff;
|
|
58
|
+
private escapeHtml;
|
|
30
59
|
static ɵfac: i0.ɵɵFactoryDeclaration<RecordChangesComponent, never>;
|
|
31
60
|
static ɵcmp: i0.ɵɵComponentDeclaration<RecordChangesComponent, "mj-record-changes", never, { "record": { "alias": "record"; "required": false; }; }, { "dialogClosed": "dialogClosed"; }, never, never, false, never>;
|
|
32
61
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ng-record-changes.component.d.ts","sourceRoot":"","sources":["../../src/lib/ng-record-changes.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,YAAY,EAAS,MAAM,EAAU,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"ng-record-changes.component.d.ts","sourceRoot":"","sources":["../../src/lib/ng-record-changes.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,YAAY,EAAS,MAAM,EAAU,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAgC,MAAM,eAAe,CAAC;AAC9J,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,YAAY,EAAgD,MAAM,sBAAsB,CAAC;AAC9G,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;;AAGzE,qBAMa,sBAAuB,YAAW,MAAM,EAAE,aAAa,EAAE,SAAS;IAwBjE,OAAO,CAAC,QAAQ;IAAa,OAAO,CAAC,qBAAqB;IAAyB,OAAO,CAAC,SAAS;IAvBzG,UAAU,EAAE,OAAO,CAAS;IACzB,YAAY,oBAAsB;IACnC,MAAM,EAAG,UAAU,CAAC;IAEwB,OAAO,EAAG,UAAU,CAAC;IAE1E,QAAQ,EAAE,kBAAkB,EAAE,CAAM;IACpC,YAAY,EAAE,kBAAkB,EAAE,CAAM;IACxC,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAa;IAGvC,UAAU,EAAE,MAAM,CAAM;IACxB,YAAY,EAAE,MAAM,CAAM;IAC1B,cAAc,EAAE,MAAM,CAAM;IAE5B,YAAY,EAAE,cAAc,EAAE,CAK5B;gBAGkB,QAAQ,EAAE,SAAS,EAAU,qBAAqB,EAAE,qBAAqB,EAAU,SAAS,EAAE,YAAY;IAE9H,QAAQ,IAAI,IAAI;IAOhB,eAAe,IAAI,IAAI;IAMvB,WAAW,IAAI,IAAI;IAMN,iBAAiB,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAetF,qBAAqB;IAKrB,cAAc,IAAI,IAAI;IAItB,cAAc,IAAI,IAAI;IAItB,OAAO,CAAC,YAAY;IA2BpB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAQvC,qBAAqB,CAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAQnE,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IASxC,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IASvC,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAS7C,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAItC,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAStC,oBAAoB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM;IAIxD,kBAAkB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM;IAmBtC,kBAAkB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM;IAYtC,gBAAgB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM;IAwCpD,eAAe,CAAC,MAAM,EAAE,kBAAkB,GAAG,KAAK,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,GAAG,CAAC;QAAC,QAAQ,EAAE,GAAG,CAAC;QAAC,cAAc,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,QAAQ,CAAA;KAAC,CAAC;IAuCpK,gBAAgB,CAAC,MAAM,EAAE,kBAAkB,GAAG,KAAK,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,GAAG,CAAA;KAAC,CAAC;IAmBpG,OAAO,CAAC,gBAAgB;IAoCxB,OAAO,CAAC,iBAAiB;IAUzB,OAAO,CAAC,UAAU;yCA/UP,sBAAsB;2CAAtB,sBAAsB;CAoVlC"}
|
|
@@ -7,56 +7,372 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
7
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
|
-
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
|
11
|
-
import { EntityFieldTSType,
|
|
10
|
+
import { Component, EventEmitter, Input, Output, ViewChild, ViewEncapsulation } from '@angular/core';
|
|
11
|
+
import { EntityFieldTSType, Metadata } from '@memberjunction/core';
|
|
12
|
+
import { diffChars, diffWords } from 'diff';
|
|
12
13
|
import * as i0 from "@angular/core";
|
|
13
|
-
import * as i1 from "@
|
|
14
|
-
import * as i2 from "@angular/
|
|
15
|
-
import * as i3 from "@
|
|
16
|
-
import * as i4 from "@
|
|
17
|
-
import * as i5 from "@progress/kendo-angular-
|
|
14
|
+
import * as i1 from "@memberjunction/ng-notifications";
|
|
15
|
+
import * as i2 from "@angular/platform-browser";
|
|
16
|
+
import * as i3 from "@angular/common";
|
|
17
|
+
import * as i4 from "@angular/forms";
|
|
18
|
+
import * as i5 from "@progress/kendo-angular-dialog";
|
|
19
|
+
import * as i6 from "@progress/kendo-angular-indicators";
|
|
18
20
|
const _c0 = ["recordChangesWrapper"];
|
|
19
|
-
const
|
|
21
|
+
const _forTrack0 = ($index, $item) => $item.ID;
|
|
22
|
+
const _forTrack1 = ($index, $item) => $item.name;
|
|
23
|
+
const _forTrack2 = ($index, $item) => $item.field;
|
|
20
24
|
function RecordChangesComponent_kendo_loader_4_Template(rf, ctx) { if (rf & 1) {
|
|
21
25
|
i0.ɵɵelement(0, "kendo-loader", 6);
|
|
22
26
|
} }
|
|
23
|
-
function
|
|
24
|
-
i0.ɵɵ
|
|
27
|
+
function RecordChangesComponent_Conditional_5_Conditional_21_Template(rf, ctx) { if (rf & 1) {
|
|
28
|
+
i0.ɵɵelementStart(0, "div", 18);
|
|
29
|
+
i0.ɵɵtext(1);
|
|
30
|
+
i0.ɵɵelementEnd();
|
|
31
|
+
} if (rf & 2) {
|
|
32
|
+
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
33
|
+
i0.ɵɵadvance();
|
|
34
|
+
i0.ɵɵtextInterpolate2(" Showing ", ctx_r2.filteredData.length, " of ", ctx_r2.viewData.length, " changes ");
|
|
35
|
+
} }
|
|
36
|
+
function RecordChangesComponent_Conditional_5_Conditional_23_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
37
|
+
i0.ɵɵelement(0, "i", 22);
|
|
38
|
+
i0.ɵɵtext(1, " No changes found for this record. ");
|
|
39
|
+
} }
|
|
40
|
+
function RecordChangesComponent_Conditional_5_Conditional_23_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
41
|
+
i0.ɵɵelement(0, "i", 23);
|
|
42
|
+
i0.ɵɵtext(1, " No changes match your current filters. ");
|
|
43
|
+
} }
|
|
44
|
+
function RecordChangesComponent_Conditional_5_Conditional_23_Template(rf, ctx) { if (rf & 1) {
|
|
45
|
+
i0.ɵɵelementStart(0, "div", 20);
|
|
46
|
+
i0.ɵɵtemplate(1, RecordChangesComponent_Conditional_5_Conditional_23_Conditional_1_Template, 2, 0)(2, RecordChangesComponent_Conditional_5_Conditional_23_Conditional_2_Template, 2, 0);
|
|
47
|
+
i0.ɵɵelementEnd();
|
|
48
|
+
} if (rf & 2) {
|
|
49
|
+
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
50
|
+
i0.ɵɵadvance();
|
|
51
|
+
i0.ɵɵconditional(ctx_r2.viewData.length === 0 ? 1 : 2);
|
|
52
|
+
} }
|
|
53
|
+
function RecordChangesComponent_Conditional_5_Conditional_24_For_2_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
54
|
+
i0.ɵɵelement(0, "div", 28);
|
|
55
|
+
} }
|
|
56
|
+
function RecordChangesComponent_Conditional_5_Conditional_24_For_2_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
57
|
+
i0.ɵɵelementStart(0, "span", 38);
|
|
58
|
+
i0.ɵɵtext(1);
|
|
59
|
+
i0.ɵɵelementEnd();
|
|
60
|
+
} if (rf & 2) {
|
|
61
|
+
const change_r5 = i0.ɵɵnextContext().$implicit;
|
|
62
|
+
i0.ɵɵadvance();
|
|
63
|
+
i0.ɵɵtextInterpolate1(" via ", change_r5.Integration, " ");
|
|
64
|
+
} }
|
|
65
|
+
function RecordChangesComponent_Conditional_5_Conditional_24_For_2_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
66
|
+
i0.ɵɵelementStart(0, "div", 39);
|
|
67
|
+
i0.ɵɵtext(1);
|
|
68
|
+
i0.ɵɵelementEnd();
|
|
69
|
+
} if (rf & 2) {
|
|
70
|
+
const change_r5 = i0.ɵɵnextContext().$implicit;
|
|
71
|
+
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
72
|
+
i0.ɵɵadvance();
|
|
73
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r2.getChangeSummary(change_r5), " ");
|
|
74
|
+
} }
|
|
75
|
+
function RecordChangesComponent_Conditional_5_Conditional_24_For_2_Conditional_21_Conditional_5_Conditional_4_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
76
|
+
i0.ɵɵelementStart(0, "div", 50)(1, "span", 51);
|
|
77
|
+
i0.ɵɵtext(2);
|
|
78
|
+
i0.ɵɵelementEnd();
|
|
79
|
+
i0.ɵɵelementStart(3, "span", 52);
|
|
80
|
+
i0.ɵɵtext(4);
|
|
81
|
+
i0.ɵɵelementEnd()();
|
|
82
|
+
} if (rf & 2) {
|
|
83
|
+
const field_r6 = ctx.$implicit;
|
|
84
|
+
i0.ɵɵadvance(2);
|
|
85
|
+
i0.ɵɵtextInterpolate(field_r6.displayName);
|
|
86
|
+
i0.ɵɵadvance(2);
|
|
87
|
+
i0.ɵɵtextInterpolate(field_r6.value);
|
|
88
|
+
} }
|
|
89
|
+
function RecordChangesComponent_Conditional_5_Conditional_24_For_2_Conditional_21_Conditional_5_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
90
|
+
i0.ɵɵelementStart(0, "div", 49);
|
|
91
|
+
i0.ɵɵrepeaterCreate(1, RecordChangesComponent_Conditional_5_Conditional_24_For_2_Conditional_21_Conditional_5_Conditional_4_For_2_Template, 5, 2, "div", 50, _forTrack1);
|
|
92
|
+
i0.ɵɵelementEnd();
|
|
93
|
+
} if (rf & 2) {
|
|
94
|
+
const change_r5 = i0.ɵɵnextContext(3).$implicit;
|
|
95
|
+
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
96
|
+
i0.ɵɵadvance();
|
|
97
|
+
i0.ɵɵrepeater(ctx_r2.getCreatedFields(change_r5));
|
|
98
|
+
} }
|
|
99
|
+
function RecordChangesComponent_Conditional_5_Conditional_24_For_2_Conditional_21_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
100
|
+
i0.ɵɵelementStart(0, "div", 43)(1, "h4");
|
|
101
|
+
i0.ɵɵelement(2, "i", 48);
|
|
102
|
+
i0.ɵɵtext(3, " Record Created");
|
|
103
|
+
i0.ɵɵelementEnd();
|
|
104
|
+
i0.ɵɵtemplate(4, RecordChangesComponent_Conditional_5_Conditional_24_For_2_Conditional_21_Conditional_5_Conditional_4_Template, 3, 0, "div", 49);
|
|
105
|
+
i0.ɵɵelementEnd();
|
|
25
106
|
} if (rf & 2) {
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
i0.ɵɵproperty("innerHTML", ctx_r3.FormatColumnValue(item_r3, dataItem_r2[item_r3.field], dataItem_r2), i0.ɵɵsanitizeHtml);
|
|
107
|
+
const change_r5 = i0.ɵɵnextContext(2).$implicit;
|
|
108
|
+
i0.ɵɵadvance(4);
|
|
109
|
+
i0.ɵɵconditional(change_r5.FullRecordJSON ? 4 : -1);
|
|
30
110
|
} }
|
|
31
|
-
function
|
|
32
|
-
i0.ɵɵelementStart(0, "
|
|
33
|
-
i0.ɵɵ
|
|
111
|
+
function RecordChangesComponent_Conditional_5_Conditional_24_For_2_Conditional_21_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
112
|
+
i0.ɵɵelementStart(0, "div", 44)(1, "h4");
|
|
113
|
+
i0.ɵɵelement(2, "i", 53);
|
|
114
|
+
i0.ɵɵtext(3, " Record Deleted");
|
|
34
115
|
i0.ɵɵelementEnd();
|
|
116
|
+
i0.ɵɵelementStart(4, "p", 54);
|
|
117
|
+
i0.ɵɵtext(5, "This record was permanently removed from the system.");
|
|
118
|
+
i0.ɵɵelementEnd()();
|
|
119
|
+
} }
|
|
120
|
+
function RecordChangesComponent_Conditional_5_Conditional_24_For_2_Conditional_21_Conditional_7_For_6_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
121
|
+
i0.ɵɵelementStart(0, "div", 57)(1, "span", 60);
|
|
122
|
+
i0.ɵɵtext(2);
|
|
123
|
+
i0.ɵɵelementEnd()();
|
|
35
124
|
} if (rf & 2) {
|
|
36
|
-
const
|
|
37
|
-
i0.ɵɵ
|
|
38
|
-
i0.ɵɵ
|
|
39
|
-
i0.ɵɵproperty("width", item_r3.width)("headerStyle", i0.ɵɵpureFunction0(4, _c1));
|
|
125
|
+
const fieldChange_r7 = i0.ɵɵnextContext().$implicit;
|
|
126
|
+
i0.ɵɵadvance(2);
|
|
127
|
+
i0.ɵɵtextInterpolate(fieldChange_r7.newValue);
|
|
40
128
|
} }
|
|
41
|
-
function
|
|
42
|
-
i0.ɵɵelementStart(0, "div",
|
|
43
|
-
i0.ɵɵ
|
|
129
|
+
function RecordChangesComponent_Conditional_5_Conditional_24_For_2_Conditional_21_Conditional_7_For_6_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
130
|
+
i0.ɵɵelementStart(0, "div", 58);
|
|
131
|
+
i0.ɵɵelement(1, "div", 61);
|
|
132
|
+
i0.ɵɵelementEnd();
|
|
133
|
+
} if (rf & 2) {
|
|
134
|
+
const fieldChange_r7 = i0.ɵɵnextContext().$implicit;
|
|
135
|
+
i0.ɵɵadvance();
|
|
136
|
+
i0.ɵɵproperty("innerHTML", fieldChange_r7.diffHtml, i0.ɵɵsanitizeHtml);
|
|
137
|
+
} }
|
|
138
|
+
function RecordChangesComponent_Conditional_5_Conditional_24_For_2_Conditional_21_Conditional_7_For_6_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
139
|
+
i0.ɵɵelementStart(0, "div", 59)(1, "div", 62)(2, "span", 63);
|
|
140
|
+
i0.ɵɵtext(3, "From:");
|
|
141
|
+
i0.ɵɵelementEnd();
|
|
142
|
+
i0.ɵɵelementStart(4, "span", 64);
|
|
143
|
+
i0.ɵɵtext(5);
|
|
144
|
+
i0.ɵɵelementEnd()();
|
|
145
|
+
i0.ɵɵelementStart(6, "div", 65);
|
|
146
|
+
i0.ɵɵelement(7, "i", 66);
|
|
147
|
+
i0.ɵɵelementEnd();
|
|
148
|
+
i0.ɵɵelementStart(8, "div", 60)(9, "span", 63);
|
|
149
|
+
i0.ɵɵtext(10, "To:");
|
|
150
|
+
i0.ɵɵelementEnd();
|
|
151
|
+
i0.ɵɵelementStart(11, "span", 64);
|
|
152
|
+
i0.ɵɵtext(12);
|
|
44
153
|
i0.ɵɵelementEnd()()();
|
|
45
154
|
} if (rf & 2) {
|
|
46
|
-
const
|
|
155
|
+
const fieldChange_r7 = i0.ɵɵnextContext().$implicit;
|
|
156
|
+
i0.ɵɵadvance(5);
|
|
157
|
+
i0.ɵɵtextInterpolate(fieldChange_r7.oldValue || "(empty)");
|
|
158
|
+
i0.ɵɵadvance(7);
|
|
159
|
+
i0.ɵɵtextInterpolate(fieldChange_r7.newValue || "(empty)");
|
|
160
|
+
} }
|
|
161
|
+
function RecordChangesComponent_Conditional_5_Conditional_24_For_2_Conditional_21_Conditional_7_For_6_Template(rf, ctx) { if (rf & 1) {
|
|
162
|
+
i0.ɵɵelementStart(0, "div", 56)(1, "div", 51);
|
|
163
|
+
i0.ɵɵtext(2);
|
|
164
|
+
i0.ɵɵelementEnd();
|
|
165
|
+
i0.ɵɵtemplate(3, RecordChangesComponent_Conditional_5_Conditional_24_For_2_Conditional_21_Conditional_7_For_6_Conditional_3_Template, 3, 1, "div", 57)(4, RecordChangesComponent_Conditional_5_Conditional_24_For_2_Conditional_21_Conditional_7_For_6_Conditional_4_Template, 2, 1, "div", 58)(5, RecordChangesComponent_Conditional_5_Conditional_24_For_2_Conditional_21_Conditional_7_For_6_Conditional_5_Template, 13, 2, "div", 59);
|
|
166
|
+
i0.ɵɵelementEnd();
|
|
167
|
+
} if (rf & 2) {
|
|
168
|
+
const fieldChange_r7 = ctx.$implicit;
|
|
169
|
+
i0.ɵɵadvance(2);
|
|
170
|
+
i0.ɵɵtextInterpolate(fieldChange_r7.displayName);
|
|
171
|
+
i0.ɵɵadvance();
|
|
172
|
+
i0.ɵɵconditional(fieldChange_r7.isBooleanField ? 3 : fieldChange_r7.diffHtml ? 4 : 5);
|
|
173
|
+
} }
|
|
174
|
+
function RecordChangesComponent_Conditional_5_Conditional_24_For_2_Conditional_21_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
175
|
+
i0.ɵɵelementStart(0, "div", 45)(1, "h4");
|
|
176
|
+
i0.ɵɵelement(2, "i", 55);
|
|
177
|
+
i0.ɵɵtext(3, " Fields Changed");
|
|
178
|
+
i0.ɵɵelementEnd();
|
|
179
|
+
i0.ɵɵelementStart(4, "div", 49);
|
|
180
|
+
i0.ɵɵrepeaterCreate(5, RecordChangesComponent_Conditional_5_Conditional_24_For_2_Conditional_21_Conditional_7_For_6_Template, 6, 2, "div", 56, _forTrack2);
|
|
181
|
+
i0.ɵɵelementEnd()();
|
|
182
|
+
} if (rf & 2) {
|
|
183
|
+
const change_r5 = i0.ɵɵnextContext(2).$implicit;
|
|
184
|
+
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
185
|
+
i0.ɵɵadvance(5);
|
|
186
|
+
i0.ɵɵrepeater(ctx_r2.getFieldChanges(change_r5));
|
|
187
|
+
} }
|
|
188
|
+
function RecordChangesComponent_Conditional_5_Conditional_24_For_2_Conditional_21_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
189
|
+
i0.ɵɵelementStart(0, "div", 46)(1, "h5");
|
|
190
|
+
i0.ɵɵelement(2, "i", 67);
|
|
191
|
+
i0.ɵɵtext(3, " Comments");
|
|
192
|
+
i0.ɵɵelementEnd();
|
|
193
|
+
i0.ɵɵelementStart(4, "p");
|
|
194
|
+
i0.ɵɵtext(5);
|
|
195
|
+
i0.ɵɵelementEnd()();
|
|
196
|
+
} if (rf & 2) {
|
|
197
|
+
const change_r5 = i0.ɵɵnextContext(2).$implicit;
|
|
198
|
+
i0.ɵɵadvance(5);
|
|
199
|
+
i0.ɵɵtextInterpolate(change_r5.Comments);
|
|
200
|
+
} }
|
|
201
|
+
function RecordChangesComponent_Conditional_5_Conditional_24_For_2_Conditional_21_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
202
|
+
i0.ɵɵelementStart(0, "div", 47)(1, "h5");
|
|
203
|
+
i0.ɵɵelement(2, "i", 68);
|
|
204
|
+
i0.ɵɵtext(3, " Errors");
|
|
205
|
+
i0.ɵɵelementEnd();
|
|
206
|
+
i0.ɵɵelementStart(4, "pre", 69);
|
|
207
|
+
i0.ɵɵtext(5);
|
|
208
|
+
i0.ɵɵelementEnd()();
|
|
209
|
+
} if (rf & 2) {
|
|
210
|
+
const change_r5 = i0.ɵɵnextContext(2).$implicit;
|
|
211
|
+
i0.ɵɵadvance(5);
|
|
212
|
+
i0.ɵɵtextInterpolate(change_r5.ErrorLog);
|
|
213
|
+
} }
|
|
214
|
+
function RecordChangesComponent_Conditional_5_Conditional_24_For_2_Conditional_21_Template(rf, ctx) { if (rf & 1) {
|
|
215
|
+
i0.ɵɵelementStart(0, "div", 40)(1, "div", 41);
|
|
216
|
+
i0.ɵɵelement(2, "i", 42);
|
|
217
|
+
i0.ɵɵelementStart(3, "strong");
|
|
218
|
+
i0.ɵɵtext(4);
|
|
219
|
+
i0.ɵɵelementEnd()();
|
|
220
|
+
i0.ɵɵtemplate(5, RecordChangesComponent_Conditional_5_Conditional_24_For_2_Conditional_21_Conditional_5_Template, 5, 1, "div", 43)(6, RecordChangesComponent_Conditional_5_Conditional_24_For_2_Conditional_21_Conditional_6_Template, 6, 0, "div", 44)(7, RecordChangesComponent_Conditional_5_Conditional_24_For_2_Conditional_21_Conditional_7_Template, 7, 0, "div", 45)(8, RecordChangesComponent_Conditional_5_Conditional_24_For_2_Conditional_21_Conditional_8_Template, 6, 1, "div", 46)(9, RecordChangesComponent_Conditional_5_Conditional_24_For_2_Conditional_21_Conditional_9_Template, 6, 1, "div", 47);
|
|
221
|
+
i0.ɵɵelementEnd();
|
|
222
|
+
} if (rf & 2) {
|
|
223
|
+
const change_r5 = i0.ɵɵnextContext().$implicit;
|
|
224
|
+
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
225
|
+
i0.ɵɵadvance(4);
|
|
226
|
+
i0.ɵɵtextInterpolate(ctx_r2.formatFullDateTime(change_r5.ChangedAt));
|
|
227
|
+
i0.ɵɵadvance();
|
|
228
|
+
i0.ɵɵconditional(change_r5.Type === "Create" ? 5 : change_r5.Type === "Delete" ? 6 : 7);
|
|
47
229
|
i0.ɵɵadvance(3);
|
|
48
|
-
i0.ɵɵ
|
|
230
|
+
i0.ɵɵconditional(change_r5.Comments ? 8 : -1);
|
|
49
231
|
i0.ɵɵadvance();
|
|
50
|
-
i0.ɵɵ
|
|
232
|
+
i0.ɵɵconditional(change_r5.ErrorLog ? 9 : -1);
|
|
233
|
+
} }
|
|
234
|
+
function RecordChangesComponent_Conditional_5_Conditional_24_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
235
|
+
const _r4 = i0.ɵɵgetCurrentView();
|
|
236
|
+
i0.ɵɵelementStart(0, "div", 25);
|
|
237
|
+
i0.ɵɵlistener("click", function RecordChangesComponent_Conditional_5_Conditional_24_For_2_Template_div_click_0_listener() { const change_r5 = i0.ɵɵrestoreView(_r4).$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.toggleExpansion(change_r5.ID)); })("keydown", function RecordChangesComponent_Conditional_5_Conditional_24_For_2_Template_div_keydown_0_listener($event) { const change_r5 = i0.ɵɵrestoreView(_r4).$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.onTimelineItemKeydown($event, change_r5.ID)); });
|
|
238
|
+
i0.ɵɵelementStart(1, "div", 26)(2, "div", 27);
|
|
239
|
+
i0.ɵɵelement(3, "i");
|
|
240
|
+
i0.ɵɵelementEnd();
|
|
241
|
+
i0.ɵɵtemplate(4, RecordChangesComponent_Conditional_5_Conditional_24_For_2_Conditional_4_Template, 1, 0, "div", 28);
|
|
242
|
+
i0.ɵɵelementEnd();
|
|
243
|
+
i0.ɵɵelementStart(5, "div", 29)(6, "div", 30)(7, "div", 31)(8, "span", 32);
|
|
244
|
+
i0.ɵɵtext(9);
|
|
245
|
+
i0.ɵɵelementEnd();
|
|
246
|
+
i0.ɵɵelementStart(10, "span", 33);
|
|
247
|
+
i0.ɵɵtext(11);
|
|
248
|
+
i0.ɵɵelementEnd();
|
|
249
|
+
i0.ɵɵelementStart(12, "span", 34);
|
|
250
|
+
i0.ɵɵtext(13);
|
|
251
|
+
i0.ɵɵelementEnd()();
|
|
252
|
+
i0.ɵɵelementStart(14, "div", 35)(15, "span", 36);
|
|
253
|
+
i0.ɵɵtext(16);
|
|
254
|
+
i0.ɵɵelementEnd();
|
|
255
|
+
i0.ɵɵelementStart(17, "span", 37);
|
|
256
|
+
i0.ɵɵtext(18);
|
|
257
|
+
i0.ɵɵelementEnd();
|
|
258
|
+
i0.ɵɵtemplate(19, RecordChangesComponent_Conditional_5_Conditional_24_For_2_Conditional_19_Template, 2, 1, "span", 38);
|
|
259
|
+
i0.ɵɵelementEnd()();
|
|
260
|
+
i0.ɵɵtemplate(20, RecordChangesComponent_Conditional_5_Conditional_24_For_2_Conditional_20_Template, 2, 1, "div", 39)(21, RecordChangesComponent_Conditional_5_Conditional_24_For_2_Conditional_21_Template, 10, 4, "div", 40);
|
|
261
|
+
i0.ɵɵelementEnd()();
|
|
262
|
+
} if (rf & 2) {
|
|
263
|
+
const change_r5 = ctx.$implicit;
|
|
264
|
+
const ɵ$index_65_r8 = ctx.$index;
|
|
265
|
+
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
266
|
+
i0.ɵɵclassProp("expanded", ctx_r2.expandedItems.has(change_r5.ID));
|
|
267
|
+
i0.ɵɵattribute("tabindex", 0)("aria-expanded", ctx_r2.expandedItems.has(change_r5.ID))("aria-label", ctx_r2.getTimelineItemLabel(change_r5));
|
|
268
|
+
i0.ɵɵadvance(2);
|
|
269
|
+
i0.ɵɵclassMap(ctx_r2.getChangeTypeClass(change_r5.Type));
|
|
270
|
+
i0.ɵɵadvance();
|
|
271
|
+
i0.ɵɵclassMap(ctx_r2.getChangeTypeIcon(change_r5.Type));
|
|
272
|
+
i0.ɵɵattribute("aria-hidden", true);
|
|
273
|
+
i0.ɵɵadvance();
|
|
274
|
+
i0.ɵɵconditional(ɵ$index_65_r8 < ctx_r2.filteredData.length - 1 ? 4 : -1);
|
|
275
|
+
i0.ɵɵadvance(4);
|
|
276
|
+
i0.ɵɵclassMap(ctx_r2.getChangeTypeBadgeClass(change_r5.Type));
|
|
277
|
+
i0.ɵɵadvance();
|
|
278
|
+
i0.ɵɵtextInterpolate1(" ", change_r5.Type, " ");
|
|
279
|
+
i0.ɵɵadvance(2);
|
|
280
|
+
i0.ɵɵtextInterpolate(change_r5.User || "Unknown User");
|
|
281
|
+
i0.ɵɵadvance();
|
|
282
|
+
i0.ɵɵclassMap(ctx_r2.getSourceClass(change_r5.Source));
|
|
283
|
+
i0.ɵɵadvance();
|
|
284
|
+
i0.ɵɵtextInterpolate1(" ", change_r5.Source, " ");
|
|
285
|
+
i0.ɵɵadvance(2);
|
|
286
|
+
i0.ɵɵproperty("title", ctx_r2.formatFullDateTime(change_r5.ChangedAt));
|
|
287
|
+
i0.ɵɵadvance();
|
|
288
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r2.formatRelativeTime(change_r5.ChangedAt), " ");
|
|
289
|
+
i0.ɵɵadvance();
|
|
290
|
+
i0.ɵɵclassMap(ctx_r2.getStatusClass(change_r5.Status));
|
|
291
|
+
i0.ɵɵadvance();
|
|
292
|
+
i0.ɵɵtextInterpolate1(" ", change_r5.Status, " ");
|
|
293
|
+
i0.ɵɵadvance();
|
|
294
|
+
i0.ɵɵconditional(change_r5.Integration ? 19 : -1);
|
|
295
|
+
i0.ɵɵadvance();
|
|
296
|
+
i0.ɵɵconditional(!ctx_r2.expandedItems.has(change_r5.ID) ? 20 : -1);
|
|
297
|
+
i0.ɵɵadvance();
|
|
298
|
+
i0.ɵɵconditional(ctx_r2.expandedItems.has(change_r5.ID) ? 21 : -1);
|
|
299
|
+
} }
|
|
300
|
+
function RecordChangesComponent_Conditional_5_Conditional_24_Template(rf, ctx) { if (rf & 1) {
|
|
301
|
+
i0.ɵɵelementStart(0, "div", 21);
|
|
302
|
+
i0.ɵɵrepeaterCreate(1, RecordChangesComponent_Conditional_5_Conditional_24_For_2_Template, 22, 26, "div", 24, _forTrack0);
|
|
303
|
+
i0.ɵɵelementEnd();
|
|
304
|
+
} if (rf & 2) {
|
|
305
|
+
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
306
|
+
i0.ɵɵadvance();
|
|
307
|
+
i0.ɵɵrepeater(ctx_r2.filteredData);
|
|
308
|
+
} }
|
|
309
|
+
function RecordChangesComponent_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
310
|
+
const _r2 = i0.ɵɵgetCurrentView();
|
|
311
|
+
i0.ɵɵelementStart(0, "div", 5, 1)(2, "div", 7)(3, "div", 8)(4, "input", 9);
|
|
312
|
+
i0.ɵɵtwoWayListener("ngModelChange", function RecordChangesComponent_Conditional_5_Template_input_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r2.searchTerm, $event) || (ctx_r2.searchTerm = $event); return i0.ɵɵresetView($event); });
|
|
313
|
+
i0.ɵɵlistener("input", function RecordChangesComponent_Conditional_5_Template_input_input_4_listener() { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.onSearchChange()); });
|
|
314
|
+
i0.ɵɵelementEnd();
|
|
315
|
+
i0.ɵɵelementStart(5, "select", 10);
|
|
316
|
+
i0.ɵɵtwoWayListener("ngModelChange", function RecordChangesComponent_Conditional_5_Template_select_ngModelChange_5_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r2.selectedType, $event) || (ctx_r2.selectedType = $event); return i0.ɵɵresetView($event); });
|
|
317
|
+
i0.ɵɵlistener("change", function RecordChangesComponent_Conditional_5_Template_select_change_5_listener() { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.onFilterChange()); });
|
|
318
|
+
i0.ɵɵelementStart(6, "option", 11);
|
|
319
|
+
i0.ɵɵtext(7, "All Changes");
|
|
320
|
+
i0.ɵɵelementEnd();
|
|
321
|
+
i0.ɵɵelementStart(8, "option", 12);
|
|
322
|
+
i0.ɵɵtext(9, "Created");
|
|
323
|
+
i0.ɵɵelementEnd();
|
|
324
|
+
i0.ɵɵelementStart(10, "option", 13);
|
|
325
|
+
i0.ɵɵtext(11, "Updated");
|
|
326
|
+
i0.ɵɵelementEnd();
|
|
327
|
+
i0.ɵɵelementStart(12, "option", 14);
|
|
328
|
+
i0.ɵɵtext(13, "Deleted");
|
|
329
|
+
i0.ɵɵelementEnd()();
|
|
330
|
+
i0.ɵɵelementStart(14, "select", 15);
|
|
331
|
+
i0.ɵɵtwoWayListener("ngModelChange", function RecordChangesComponent_Conditional_5_Template_select_ngModelChange_14_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r2.selectedSource, $event) || (ctx_r2.selectedSource = $event); return i0.ɵɵresetView($event); });
|
|
332
|
+
i0.ɵɵlistener("change", function RecordChangesComponent_Conditional_5_Template_select_change_14_listener() { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.onFilterChange()); });
|
|
333
|
+
i0.ɵɵelementStart(15, "option", 11);
|
|
334
|
+
i0.ɵɵtext(16, "All Sources");
|
|
335
|
+
i0.ɵɵelementEnd();
|
|
336
|
+
i0.ɵɵelementStart(17, "option", 16);
|
|
337
|
+
i0.ɵɵtext(18, "Internal");
|
|
338
|
+
i0.ɵɵelementEnd();
|
|
339
|
+
i0.ɵɵelementStart(19, "option", 17);
|
|
340
|
+
i0.ɵɵtext(20, "External");
|
|
341
|
+
i0.ɵɵelementEnd()()();
|
|
342
|
+
i0.ɵɵtemplate(21, RecordChangesComponent_Conditional_5_Conditional_21_Template, 2, 2, "div", 18);
|
|
343
|
+
i0.ɵɵelementEnd();
|
|
344
|
+
i0.ɵɵelementStart(22, "div", 19);
|
|
345
|
+
i0.ɵɵtemplate(23, RecordChangesComponent_Conditional_5_Conditional_23_Template, 3, 1, "div", 20)(24, RecordChangesComponent_Conditional_5_Conditional_24_Template, 3, 0, "div", 21);
|
|
346
|
+
i0.ɵɵelementEnd()();
|
|
347
|
+
} if (rf & 2) {
|
|
348
|
+
const ctx_r2 = i0.ɵɵnextContext();
|
|
349
|
+
i0.ɵɵadvance(4);
|
|
350
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r2.searchTerm);
|
|
351
|
+
i0.ɵɵadvance();
|
|
352
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r2.selectedType);
|
|
353
|
+
i0.ɵɵadvance(9);
|
|
354
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r2.selectedSource);
|
|
355
|
+
i0.ɵɵadvance(7);
|
|
356
|
+
i0.ɵɵconditional(ctx_r2.filteredData.length !== ctx_r2.viewData.length ? 21 : -1);
|
|
357
|
+
i0.ɵɵadvance();
|
|
358
|
+
i0.ɵɵattribute("aria-label", "Timeline of changes for " + ctx_r2.record.EntityInfo.Name + " record");
|
|
359
|
+
i0.ɵɵadvance();
|
|
360
|
+
i0.ɵɵconditional(ctx_r2.filteredData.length === 0 ? 23 : 24);
|
|
51
361
|
} }
|
|
52
362
|
export class RecordChangesComponent {
|
|
53
|
-
constructor(
|
|
54
|
-
this.sanitizer = sanitizer;
|
|
363
|
+
constructor(renderer, mjNotificationService, sanitizer) {
|
|
55
364
|
this.renderer = renderer;
|
|
365
|
+
this.mjNotificationService = mjNotificationService;
|
|
366
|
+
this.sanitizer = sanitizer;
|
|
56
367
|
this.showloader = false;
|
|
57
368
|
this.dialogClosed = new EventEmitter();
|
|
58
369
|
this.viewData = [];
|
|
59
|
-
this.
|
|
370
|
+
this.filteredData = [];
|
|
371
|
+
this.expandedItems = new Set();
|
|
372
|
+
// Filter properties
|
|
373
|
+
this.searchTerm = '';
|
|
374
|
+
this.selectedType = '';
|
|
375
|
+
this.selectedSource = '';
|
|
60
376
|
this.sortSettings = [
|
|
61
377
|
{
|
|
62
378
|
field: "ChangedAt",
|
|
@@ -67,8 +383,7 @@ export class RecordChangesComponent {
|
|
|
67
383
|
ngOnInit() {
|
|
68
384
|
if (this.record) {
|
|
69
385
|
this.showloader = true;
|
|
70
|
-
this.LoadRecordChanges(this.record.PrimaryKey
|
|
71
|
-
this.prepareColumns();
|
|
386
|
+
this.LoadRecordChanges(this.record.PrimaryKey, '', this.record.EntityInfo.Name);
|
|
72
387
|
}
|
|
73
388
|
}
|
|
74
389
|
ngAfterViewInit() {
|
|
@@ -81,131 +396,296 @@ export class RecordChangesComponent {
|
|
|
81
396
|
if (this.renderer && this.wrapper && this.wrapper.nativeElement)
|
|
82
397
|
this.renderer.removeChild(document.body, this.wrapper.nativeElement);
|
|
83
398
|
}
|
|
84
|
-
LoadRecordChanges(
|
|
399
|
+
LoadRecordChanges(pkey, appName, entityName) {
|
|
85
400
|
return __awaiter(this, void 0, void 0, function* () {
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
const
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
this.
|
|
401
|
+
if (pkey && entityName) {
|
|
402
|
+
const md = new Metadata();
|
|
403
|
+
const changes = yield md.GetRecordChanges(entityName, pkey);
|
|
404
|
+
if (changes) {
|
|
405
|
+
this.viewData = changes.sort((a, b) => new Date(b.ChangedAt).getTime() - new Date(a.ChangedAt).getTime());
|
|
406
|
+
this.filteredData = [...this.viewData];
|
|
92
407
|
this.showloader = false;
|
|
93
408
|
}
|
|
94
409
|
else {
|
|
95
|
-
|
|
410
|
+
this.mjNotificationService.CreateSimpleNotification(`Error loading record changes for ${entityName} with primary key ${pkey.ToString()}.`, 'error');
|
|
96
411
|
this.showloader = false;
|
|
97
412
|
}
|
|
98
413
|
}
|
|
99
414
|
});
|
|
100
415
|
}
|
|
101
|
-
prepareColumns() {
|
|
102
|
-
this.visibleColumns = [{
|
|
103
|
-
field: 'ChangedAt',
|
|
104
|
-
title: 'Date',
|
|
105
|
-
type: 'datetime',
|
|
106
|
-
width: 175,
|
|
107
|
-
},
|
|
108
|
-
{
|
|
109
|
-
field: 'ChangesDescription',
|
|
110
|
-
title: 'Changes',
|
|
111
|
-
type: 'description',
|
|
112
|
-
}];
|
|
113
|
-
}
|
|
114
416
|
closePropertiesDialog() {
|
|
115
417
|
this.dialogClosed.emit();
|
|
116
418
|
}
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
419
|
+
// Filter and search methods
|
|
420
|
+
onSearchChange() {
|
|
421
|
+
this.applyFilters();
|
|
422
|
+
}
|
|
423
|
+
onFilterChange() {
|
|
424
|
+
this.applyFilters();
|
|
425
|
+
}
|
|
426
|
+
applyFilters() {
|
|
427
|
+
let filtered = [...this.viewData];
|
|
428
|
+
// Apply search filter
|
|
429
|
+
if (this.searchTerm.trim()) {
|
|
430
|
+
const search = this.searchTerm.toLowerCase();
|
|
431
|
+
filtered = filtered.filter(change => {
|
|
432
|
+
var _a, _b, _c;
|
|
433
|
+
return ((_a = change.ChangesDescription) === null || _a === void 0 ? void 0 : _a.toLowerCase().includes(search)) ||
|
|
434
|
+
((_b = change.User) === null || _b === void 0 ? void 0 : _b.toLowerCase().includes(search)) ||
|
|
435
|
+
((_c = change.Comments) === null || _c === void 0 ? void 0 : _c.toLowerCase().includes(search));
|
|
436
|
+
});
|
|
437
|
+
}
|
|
438
|
+
// Apply type filter
|
|
439
|
+
if (this.selectedType) {
|
|
440
|
+
filtered = filtered.filter(change => change.Type === this.selectedType);
|
|
441
|
+
}
|
|
442
|
+
// Apply source filter
|
|
443
|
+
if (this.selectedSource) {
|
|
444
|
+
filtered = filtered.filter(change => change.Source === this.selectedSource);
|
|
445
|
+
}
|
|
446
|
+
this.filteredData = filtered;
|
|
447
|
+
}
|
|
448
|
+
// Timeline interaction methods
|
|
449
|
+
toggleExpansion(changeId) {
|
|
450
|
+
if (this.expandedItems.has(changeId)) {
|
|
451
|
+
this.expandedItems.delete(changeId);
|
|
452
|
+
}
|
|
453
|
+
else {
|
|
454
|
+
this.expandedItems.add(changeId);
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
onTimelineItemKeydown(event, changeId) {
|
|
458
|
+
if (event.key === 'Enter' || event.key === ' ') {
|
|
459
|
+
event.preventDefault();
|
|
460
|
+
this.toggleExpansion(changeId);
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
// Utility methods for timeline display
|
|
464
|
+
getChangeTypeClass(type) {
|
|
465
|
+
switch (type) {
|
|
466
|
+
case 'Create': return 'change-create';
|
|
467
|
+
case 'Update': return 'change-update';
|
|
468
|
+
case 'Delete': return 'change-delete';
|
|
469
|
+
default: return 'change-unknown';
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
getChangeTypeIcon(type) {
|
|
473
|
+
switch (type) {
|
|
474
|
+
case 'Create': return 'fa-solid fa-plus';
|
|
475
|
+
case 'Update': return 'fa-solid fa-edit';
|
|
476
|
+
case 'Delete': return 'fa-solid fa-trash';
|
|
477
|
+
default: return 'fa-solid fa-question';
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
getChangeTypeBadgeClass(type) {
|
|
481
|
+
switch (type) {
|
|
482
|
+
case 'Create': return 'badge-create';
|
|
483
|
+
case 'Update': return 'badge-update';
|
|
484
|
+
case 'Delete': return 'badge-delete';
|
|
485
|
+
default: return 'badge-unknown';
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
getSourceClass(source) {
|
|
489
|
+
return source === 'Internal' ? 'source-internal' : 'source-external';
|
|
490
|
+
}
|
|
491
|
+
getStatusClass(status) {
|
|
492
|
+
switch (status) {
|
|
493
|
+
case 'Complete': return 'status-complete';
|
|
494
|
+
case 'Pending': return 'status-pending';
|
|
495
|
+
case 'Error': return 'status-error';
|
|
496
|
+
default: return 'status-unknown';
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
getTimelineItemLabel(change) {
|
|
500
|
+
return `${change.Type} by ${change.User || 'Unknown User'} on ${this.formatFullDateTime(change.ChangedAt)}`;
|
|
501
|
+
}
|
|
502
|
+
formatRelativeTime(date) {
|
|
503
|
+
const now = new Date();
|
|
504
|
+
const diffMs = now.getTime() - new Date(date).getTime();
|
|
505
|
+
const diffMins = Math.floor(diffMs / 60000);
|
|
506
|
+
const diffHours = Math.floor(diffMins / 60);
|
|
507
|
+
const diffDays = Math.floor(diffHours / 24);
|
|
508
|
+
if (diffMins < 1)
|
|
509
|
+
return 'Just now';
|
|
510
|
+
if (diffMins < 60)
|
|
511
|
+
return `${diffMins} min${diffMins > 1 ? 's' : ''} ago`;
|
|
512
|
+
if (diffHours < 24)
|
|
513
|
+
return `${diffHours} hour${diffHours > 1 ? 's' : ''} ago`;
|
|
514
|
+
if (diffDays < 7)
|
|
515
|
+
return `${diffDays} day${diffDays > 1 ? 's' : ''} ago`;
|
|
516
|
+
return new Intl.DateTimeFormat('en-US', {
|
|
517
|
+
month: 'short',
|
|
518
|
+
day: 'numeric',
|
|
519
|
+
year: diffDays > 365 ? 'numeric' : undefined
|
|
520
|
+
}).format(new Date(date));
|
|
521
|
+
}
|
|
522
|
+
formatFullDateTime(date) {
|
|
523
|
+
return new Intl.DateTimeFormat('en-US', {
|
|
524
|
+
year: 'numeric',
|
|
525
|
+
month: 'long',
|
|
526
|
+
day: 'numeric',
|
|
527
|
+
hour: 'numeric',
|
|
528
|
+
minute: 'numeric',
|
|
529
|
+
hour12: true,
|
|
530
|
+
timeZoneName: 'short'
|
|
531
|
+
}).format(new Date(date));
|
|
532
|
+
}
|
|
533
|
+
getChangeSummary(change) {
|
|
534
|
+
if (change.Type === 'Create') {
|
|
535
|
+
return 'Record was created';
|
|
536
|
+
}
|
|
537
|
+
if (change.Type === 'Delete') {
|
|
538
|
+
return 'Record was deleted';
|
|
539
|
+
}
|
|
120
540
|
try {
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
case 'description':
|
|
137
|
-
// while the database stores a description, it is easier to use the ChangesJSON field to get the structured data and then generate our HTML
|
|
138
|
-
const json = JSON.parse(dataItem.ChangesJSON);
|
|
139
|
-
if (!json)
|
|
140
|
-
return value;
|
|
141
|
-
else {
|
|
142
|
-
const fields = Object.keys(json); // each field that was changed is a key in the JSON object
|
|
143
|
-
let formattedDescription = '<div>';
|
|
144
|
-
for (let i = 0; i < fields.length; i++) {
|
|
145
|
-
const changeInfo = json[fields[i]];
|
|
146
|
-
const field = this.record.EntityInfo.Fields.find((f) => { var _a; return f.Name.trim().toLowerCase() === ((_a = changeInfo.field) === null || _a === void 0 ? void 0 : _a.trim().toLowerCase()); });
|
|
147
|
-
let innerDescription = "";
|
|
148
|
-
if (field) {
|
|
149
|
-
// we have field metadata, so we can use that
|
|
150
|
-
if (field.TSType === EntityFieldTSType.Boolean) {
|
|
151
|
-
// for boolean fields, it is cleaner to just show new value, no need to show old value as it is always the opposite
|
|
152
|
-
innerDescription = `${this.fieldMarkup(field.DisplayNameOrName)} set to ${this.valueMarkup(changeInfo, false)}`;
|
|
153
|
-
}
|
|
154
|
-
else {
|
|
155
|
-
innerDescription = `${this.fieldMarkup(field.DisplayNameOrName)} changed from ${this.valueMarkup(changeInfo, true)} to ${this.valueMarkup(changeInfo, false)}`;
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
else {
|
|
159
|
-
// we don't have field metadata - this could happen if a field was removed or renamed after a record change was recorded in the database, so just use what we have
|
|
160
|
-
innerDescription = `${this.fieldMarkup(changeInfo.field)} changed from ${this.valueMarkup(changeInfo, true)}} to ${this.valueMarkup(changeInfo, false)}`;
|
|
161
|
-
}
|
|
162
|
-
formattedDescription += `<div>${innerDescription}</div>`;
|
|
163
|
-
}
|
|
164
|
-
formattedDescription += '</div>';
|
|
165
|
-
return this.sanitizer.bypassSecurityTrustHtml(formattedDescription);
|
|
166
|
-
}
|
|
167
|
-
default:
|
|
168
|
-
return value;
|
|
541
|
+
const changesJson = JSON.parse(change.ChangesJSON || '{}');
|
|
542
|
+
const fields = Object.keys(changesJson);
|
|
543
|
+
if (fields.length === 0)
|
|
544
|
+
return 'No field changes detected';
|
|
545
|
+
// Get field display names
|
|
546
|
+
const fieldNames = fields.map(fieldKey => {
|
|
547
|
+
const changeInfo = changesJson[fieldKey];
|
|
548
|
+
const field = this.record.EntityInfo.Fields.find((f) => { var _a; return f.Name.trim().toLowerCase() === ((_a = changeInfo.field) === null || _a === void 0 ? void 0 : _a.trim().toLowerCase()); });
|
|
549
|
+
return (field === null || field === void 0 ? void 0 : field.DisplayNameOrName) || changeInfo.field;
|
|
550
|
+
});
|
|
551
|
+
if (fieldNames.length === 1) {
|
|
552
|
+
return `${fieldNames[0]} changed`;
|
|
553
|
+
}
|
|
554
|
+
if (fieldNames.length === 2) {
|
|
555
|
+
return `${fieldNames[0]} and ${fieldNames[1]} changed`;
|
|
169
556
|
}
|
|
557
|
+
if (fieldNames.length <= 4) {
|
|
558
|
+
const lastField = fieldNames.pop();
|
|
559
|
+
return `${fieldNames.join(', ')}, and ${lastField} changed`;
|
|
560
|
+
}
|
|
561
|
+
// For more than 4 fields, show first 3 and count
|
|
562
|
+
return `${fieldNames.slice(0, 3).join(', ')}, and ${fieldNames.length - 3} other field${fieldNames.length - 3 > 1 ? 's' : ''} changed`;
|
|
170
563
|
}
|
|
171
|
-
catch (
|
|
172
|
-
|
|
173
|
-
return value;
|
|
564
|
+
catch (_a) {
|
|
565
|
+
return change.ChangesDescription || 'Changes made';
|
|
174
566
|
}
|
|
175
567
|
}
|
|
176
|
-
|
|
177
|
-
|
|
568
|
+
getFieldChanges(change) {
|
|
569
|
+
try {
|
|
570
|
+
const changesJson = JSON.parse(change.ChangesJSON || '{}');
|
|
571
|
+
const fields = Object.keys(changesJson);
|
|
572
|
+
return fields.map(fieldKey => {
|
|
573
|
+
var _a, _b;
|
|
574
|
+
const changeInfo = changesJson[fieldKey];
|
|
575
|
+
const field = this.record.EntityInfo.Fields.find((f) => { var _a; return f.Name.trim().toLowerCase() === ((_a = changeInfo.field) === null || _a === void 0 ? void 0 : _a.trim().toLowerCase()); });
|
|
576
|
+
const isBooleanField = (field === null || field === void 0 ? void 0 : field.TSType) === EntityFieldTSType.Boolean;
|
|
577
|
+
let diffHtml;
|
|
578
|
+
// Generate diff HTML for non-boolean text fields
|
|
579
|
+
if (!isBooleanField) {
|
|
580
|
+
const oldStr = String((_a = changeInfo.oldValue) !== null && _a !== void 0 ? _a : '');
|
|
581
|
+
const newStr = String((_b = changeInfo.newValue) !== null && _b !== void 0 ? _b : '');
|
|
582
|
+
// Always show diff if values are different, even if one is empty
|
|
583
|
+
if (oldStr !== newStr) {
|
|
584
|
+
diffHtml = this.generateDiffHtml(oldStr, newStr);
|
|
585
|
+
}
|
|
586
|
+
}
|
|
587
|
+
return {
|
|
588
|
+
field: changeInfo.field,
|
|
589
|
+
displayName: (field === null || field === void 0 ? void 0 : field.DisplayNameOrName) || changeInfo.field,
|
|
590
|
+
oldValue: changeInfo.oldValue,
|
|
591
|
+
newValue: changeInfo.newValue,
|
|
592
|
+
isBooleanField,
|
|
593
|
+
diffHtml
|
|
594
|
+
};
|
|
595
|
+
});
|
|
596
|
+
}
|
|
597
|
+
catch (_a) {
|
|
598
|
+
return [];
|
|
599
|
+
}
|
|
600
|
+
}
|
|
601
|
+
getCreatedFields(change) {
|
|
602
|
+
try {
|
|
603
|
+
if (!change.FullRecordJSON)
|
|
604
|
+
return [];
|
|
605
|
+
const record = JSON.parse(change.FullRecordJSON);
|
|
606
|
+
const fields = this.record.EntityInfo.Fields;
|
|
607
|
+
return fields
|
|
608
|
+
.filter((field) => record[field.Name] !== null && record[field.Name] !== undefined && record[field.Name] !== '')
|
|
609
|
+
.map((field) => ({
|
|
610
|
+
name: field.Name,
|
|
611
|
+
displayName: field.DisplayNameOrName,
|
|
612
|
+
value: record[field.Name]
|
|
613
|
+
}));
|
|
614
|
+
}
|
|
615
|
+
catch (_a) {
|
|
616
|
+
return [];
|
|
617
|
+
}
|
|
618
|
+
}
|
|
619
|
+
generateDiffHtml(oldValue, newValue) {
|
|
620
|
+
// Handle empty values
|
|
621
|
+
if (!oldValue && !newValue) {
|
|
622
|
+
return this.sanitizer.bypassSecurityTrustHtml('<div class="diff-container"><span class="diff-unchanged">(no change)</span></div>');
|
|
623
|
+
}
|
|
624
|
+
if (!oldValue) {
|
|
625
|
+
return this.sanitizer.bypassSecurityTrustHtml(`<div class="diff-container"><span class="diff-added">${this.escapeHtml(newValue)}</span></div>`);
|
|
626
|
+
}
|
|
627
|
+
if (!newValue) {
|
|
628
|
+
return this.sanitizer.bypassSecurityTrustHtml(`<div class="diff-container"><span class="diff-removed">${this.escapeHtml(oldValue)}</span></div>`);
|
|
629
|
+
}
|
|
630
|
+
// Decide between character and word diff based on content length and type
|
|
631
|
+
const useWordDiff = this.shouldUseWordDiff(oldValue, newValue);
|
|
632
|
+
const diffs = useWordDiff ? diffWords(oldValue, newValue) : diffChars(oldValue, newValue);
|
|
633
|
+
let html = '<div class="diff-container">';
|
|
634
|
+
diffs.forEach((part) => {
|
|
635
|
+
const escapedValue = this.escapeHtml(part.value);
|
|
636
|
+
if (part.added) {
|
|
637
|
+
html += `<span class="diff-added">${escapedValue}</span>`;
|
|
638
|
+
}
|
|
639
|
+
else if (part.removed) {
|
|
640
|
+
html += `<span class="diff-removed">${escapedValue}</span>`;
|
|
641
|
+
}
|
|
642
|
+
else {
|
|
643
|
+
html += `<span class="diff-unchanged">${escapedValue}</span>`;
|
|
644
|
+
}
|
|
645
|
+
});
|
|
646
|
+
html += '</div>';
|
|
647
|
+
return this.sanitizer.bypassSecurityTrustHtml(html);
|
|
648
|
+
}
|
|
649
|
+
shouldUseWordDiff(oldValue, newValue) {
|
|
650
|
+
// Use word diff for longer text with spaces (sentences/paragraphs)
|
|
651
|
+
// Use character diff for shorter text, codes, IDs, etc.
|
|
652
|
+
const hasMultipleWords = (text) => text.includes(' ') && text.split(' ').length > 3;
|
|
653
|
+
const isLongText = (text) => text.length > 50;
|
|
654
|
+
return (hasMultipleWords(oldValue) || hasMultipleWords(newValue)) &&
|
|
655
|
+
(isLongText(oldValue) || isLongText(newValue));
|
|
178
656
|
}
|
|
179
|
-
|
|
180
|
-
|
|
657
|
+
escapeHtml(text) {
|
|
658
|
+
const div = document.createElement('div');
|
|
659
|
+
div.textContent = text;
|
|
660
|
+
return div.innerHTML;
|
|
181
661
|
}
|
|
182
662
|
}
|
|
183
|
-
RecordChangesComponent.ɵfac = function RecordChangesComponent_Factory(t) { return new (t || RecordChangesComponent)(i0.ɵɵdirectiveInject(i1.
|
|
663
|
+
RecordChangesComponent.ɵfac = function RecordChangesComponent_Factory(t) { return new (t || RecordChangesComponent)(i0.ɵɵdirectiveInject(i0.Renderer2), i0.ɵɵdirectiveInject(i1.MJNotificationService), i0.ɵɵdirectiveInject(i2.DomSanitizer)); };
|
|
184
664
|
RecordChangesComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: RecordChangesComponent, selectors: [["mj-record-changes"]], viewQuery: function RecordChangesComponent_Query(rf, ctx) { if (rf & 1) {
|
|
185
665
|
i0.ɵɵviewQuery(_c0, 7);
|
|
186
666
|
} if (rf & 2) {
|
|
187
667
|
let _t;
|
|
188
668
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.wrapper = _t.first);
|
|
189
|
-
} }, inputs: { record: "record" }, outputs: { dialogClosed: "dialogClosed" }, decls: 6, vars:
|
|
669
|
+
} }, inputs: { record: "record" }, outputs: { dialogClosed: "dialogClosed" }, decls: 6, vars: 9, consts: [["recordChangesWrapper", ""], ["dialogContainer", ""], [1, "k-overlay"], ["title", "Record Changes History", 1, "kendo-window-custom", 3, "close", "width", "height", "minHeight", "minWidth", "resizable", "top", "left"], ["type", "converging-spinner", 4, "ngIf"], [1, "record-changes-container"], ["type", "converging-spinner"], [1, "filter-panel"], [1, "filter-controls"], ["type", "text", "placeholder", "Search changes...", "aria-label", "Search record changes", 1, "search-input", 3, "ngModelChange", "input", "ngModel"], ["aria-label", "Filter by change type", 1, "filter-select", 3, "ngModelChange", "change", "ngModel"], ["value", ""], ["value", "Create"], ["value", "Update"], ["value", "Delete"], ["aria-label", "Filter by change source", 1, "filter-select", 3, "ngModelChange", "change", "ngModel"], ["value", "Internal"], ["value", "External"], [1, "filter-results"], [1, "timeline-container"], [1, "no-changes-message"], [1, "timeline"], [1, "fa-solid", "fa-info-circle"], [1, "fa-solid", "fa-search"], [1, "timeline-item", 3, "expanded"], [1, "timeline-item", 3, "click", "keydown"], [1, "timeline-marker"], [1, "timeline-icon"], [1, "timeline-line"], [1, "timeline-content"], [1, "change-header"], [1, "change-title"], [1, "change-type-badge"], [1, "change-user"], [1, "change-source"], [1, "change-meta"], [1, "change-time", 3, "title"], [1, "change-status"], [1, "change-integration"], [1, "change-summary"], [1, "change-details"], [1, "change-timestamp"], ["aria-hidden", "true", 1, "fa-solid", "fa-clock"], [1, "creation-details"], [1, "deletion-details"], [1, "update-details"], [1, "change-comments"], [1, "change-errors"], [1, "fa-solid", "fa-plus"], [1, "field-changes"], [1, "field-change", "created"], [1, "field-name"], [1, "field-value", "new-value"], [1, "fa-solid", "fa-trash"], [1, "deletion-note"], [1, "fa-solid", "fa-edit"], [1, "field-change"], [1, "boolean-change"], [1, "diff-view"], [1, "value-diff"], [1, "new-value"], [1, "diff-content", 3, "innerHTML"], [1, "old-value"], [1, "value-label"], [1, "value"], [1, "diff-arrow"], ["aria-hidden", "true", 1, "fa-solid", "fa-arrow-right"], [1, "fa-solid", "fa-comment"], [1, "fa-solid", "fa-exclamation-triangle"], [1, "error-log"]], template: function RecordChangesComponent_Template(rf, ctx) { if (rf & 1) {
|
|
190
670
|
const _r1 = i0.ɵɵgetCurrentView();
|
|
191
671
|
i0.ɵɵelementStart(0, "div", null, 0);
|
|
192
672
|
i0.ɵɵelement(2, "div", 2);
|
|
193
673
|
i0.ɵɵelementStart(3, "kendo-window", 3);
|
|
194
674
|
i0.ɵɵlistener("close", function RecordChangesComponent_Template_kendo_window_close_3_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.closePropertiesDialog()); });
|
|
195
|
-
i0.ɵɵtemplate(4, RecordChangesComponent_kendo_loader_4_Template, 1, 0, "kendo-loader", 4)(5,
|
|
675
|
+
i0.ɵɵtemplate(4, RecordChangesComponent_kendo_loader_4_Template, 1, 0, "kendo-loader", 4)(5, RecordChangesComponent_Conditional_5_Template, 25, 6, "div", 5);
|
|
196
676
|
i0.ɵɵelementEnd()();
|
|
197
677
|
} if (rf & 2) {
|
|
198
678
|
i0.ɵɵadvance(3);
|
|
199
|
-
i0.ɵɵproperty("width",
|
|
679
|
+
i0.ɵɵproperty("width", 800)("height", 650)("minHeight", 400)("minWidth", 600)("resizable", true)("top", 50)("left", 50);
|
|
200
680
|
i0.ɵɵadvance();
|
|
201
681
|
i0.ɵɵproperty("ngIf", ctx.showloader);
|
|
202
682
|
i0.ɵɵadvance();
|
|
203
|
-
i0.ɵɵ
|
|
204
|
-
} }, dependencies: [i2.NgForOf, i2.NgIf, i3.GridComponent, i3.DataBindingDirective, i3.ColumnComponent, i3.CellTemplateDirective, i4.WindowComponent, i5.LoaderComponent] });
|
|
683
|
+
i0.ɵɵconditional(!ctx.showloader ? 5 : -1);
|
|
684
|
+
} }, dependencies: [i3.NgIf, i4.NgSelectOption, i4.ɵNgSelectMultipleOption, i4.DefaultValueAccessor, i4.SelectControlValueAccessor, i4.NgControlStatus, i4.NgModel, i5.WindowComponent, i6.LoaderComponent], styles: ["/* Record Changes Timeline Styles */\n.record-changes-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n padding: 1rem;\n}\n\n/* Filter Panel */\n.filter-panel {\n background: #f8f9fa;\n border-radius: 8px;\n padding: 1rem;\n margin-bottom: 1rem;\n border: 1px solid #e9ecef;\n}\n\n.filter-controls {\n display: flex;\n gap: 1rem;\n align-items: center;\n flex-wrap: wrap;\n}\n\n.search-input {\n flex: 1;\n min-width: 200px;\n padding: 0.5rem 1rem;\n border: 1px solid #ced4da;\n border-radius: 4px;\n font-size: 0.9rem;\n}\n\n.search-input:focus {\n outline: none;\n border-color: #007bff;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.filter-select {\n padding: 0.5rem;\n border: 1px solid #ced4da;\n border-radius: 4px;\n background: white;\n font-size: 0.9rem;\n min-width: 120px;\n}\n\n.filter-select:focus {\n outline: none;\n border-color: #007bff;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.filter-results {\n margin-top: 0.5rem;\n font-size: 0.85rem;\n color: #6c757d;\n font-style: italic;\n}\n\n/* Timeline Container */\n.timeline-container {\n flex: 1;\n overflow-y: auto;\n padding-right: 0.5rem;\n}\n\n.no-changes-message {\n text-align: center;\n padding: 3rem 1rem;\n color: #6c757d;\n font-size: 1.1rem;\n}\n\n.no-changes-message i {\n display: block;\n font-size: 2rem;\n margin-bottom: 1rem;\n color: #adb5bd;\n}\n\n/* Timeline */\n.timeline {\n position: relative;\n padding-left: 2rem;\n}\n\n.timeline-item {\n position: relative;\n margin-bottom: 1.5rem;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.timeline-item:hover {\n transform: translateX(2px);\n}\n\n.timeline-item:focus {\n outline: 2px solid #007bff;\n outline-offset: 2px;\n border-radius: 4px;\n}\n\n.timeline-item.expanded {\n margin-bottom: 2rem;\n}\n\n/* Timeline Marker */\n.timeline-marker {\n position: absolute;\n left: -2rem;\n top: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n.timeline-icon {\n width: 2.5rem;\n height: 2.5rem;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 0.9rem;\n color: white;\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n z-index: 2;\n}\n\n.timeline-icon.change-create {\n background: linear-gradient(135deg, #28a745, #20c997);\n}\n\n.timeline-icon.change-update {\n background: linear-gradient(135deg, #007bff, #6f42c1);\n}\n\n.timeline-icon.change-delete {\n background: linear-gradient(135deg, #dc3545, #fd7e14);\n}\n\n.timeline-icon.change-unknown {\n background: linear-gradient(135deg, #6c757d, #adb5bd);\n}\n\n.timeline-line {\n width: 2px;\n height: 2rem;\n background: #e9ecef;\n margin-top: 0.5rem;\n}\n\n/* Timeline Content */\n.timeline-content {\n background: white;\n border: 1px solid #e9ecef;\n border-radius: 8px;\n padding: 1rem;\n box-shadow: 0 2px 4px rgba(0,0,0,0.05);\n transition: box-shadow 0.2s ease;\n}\n\n.timeline-item:hover .timeline-content {\n box-shadow: 0 4px 8px rgba(0,0,0,0.1);\n}\n\n.timeline-item.expanded .timeline-content {\n box-shadow: 0 4px 12px rgba(0,0,0,0.15);\n}\n\n/* Change Header */\n.change-header {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 0.75rem;\n flex-wrap: wrap;\n gap: 0.5rem;\n}\n\n.change-title {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n flex-wrap: wrap;\n}\n\n.change-type-badge {\n font-size: 0.75rem;\n font-weight: 600;\n padding: 0.25rem 0.5rem;\n border-radius: 12px;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n}\n\n.badge-create {\n background: #d4edda;\n color: #155724;\n}\n\n.badge-update {\n background: #cce7ff;\n color: #004085;\n}\n\n.badge-delete {\n background: #f8d7da;\n color: #721c24;\n}\n\n.badge-unknown {\n background: #e2e3e5;\n color: #383d41;\n}\n\n.change-user {\n font-weight: 600;\n color: #495057;\n}\n\n.change-source {\n font-size: 0.8rem;\n padding: 0.2rem 0.4rem;\n border-radius: 8px;\n font-weight: 500;\n}\n\n.source-internal {\n background: #e7f3ff;\n color: #0056b3;\n}\n\n.source-external {\n background: #fff3cd;\n color: #856404;\n}\n\n.change-meta {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n font-size: 0.85rem;\n color: #6c757d;\n flex-wrap: wrap;\n}\n\n.change-time {\n font-weight: 500;\n}\n\n.change-status {\n padding: 0.2rem 0.4rem;\n border-radius: 8px;\n font-size: 0.75rem;\n font-weight: 600;\n text-transform: uppercase;\n}\n\n.status-complete {\n background: #d4edda;\n color: #155724;\n}\n\n.status-pending {\n background: #fff3cd;\n color: #856404;\n}\n\n.status-error {\n background: #f8d7da;\n color: #721c24;\n}\n\n.status-unknown {\n background: #e2e3e5;\n color: #383d41;\n}\n\n.change-integration {\n font-style: italic;\n color: #495057;\n}\n\n/* Change Summary */\n.change-summary {\n color: #6c757d;\n font-size: 0.9rem;\n line-height: 1.4;\n}\n\n/* Change Details */\n.change-details {\n margin-top: 1rem;\n padding-top: 1rem;\n border-top: 1px solid #e9ecef;\n}\n\n.change-timestamp {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n margin-bottom: 1rem;\n padding: 0.5rem;\n background: #f8f9fa;\n border-radius: 6px;\n border-left: 4px solid #6c757d;\n font-size: 0.9rem;\n color: #495057;\n}\n\n.change-timestamp i {\n color: #6c757d;\n}\n\n.change-details h4 {\n font-size: 1rem;\n margin-bottom: 1rem;\n color: #495057;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n\n.change-details h5 {\n font-size: 0.9rem;\n margin-bottom: 0.5rem;\n color: #495057;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n\n/* Field Changes */\n.field-changes {\n display: flex;\n flex-direction: column;\n gap: 1rem;\n}\n\n.field-change {\n background: #f8f9fa;\n border-radius: 6px;\n padding: 0.75rem;\n border-left: 4px solid #007bff;\n}\n\n.field-change.created {\n border-left-color: #28a745;\n}\n\n.field-name {\n font-weight: 600;\n color: #495057;\n margin-bottom: 0.5rem;\n display: block;\n}\n\n.field-value {\n font-family: 'Courier New', monospace;\n font-size: 0.85rem;\n padding: 0.25rem 0.5rem;\n border-radius: 4px;\n background: white;\n border: 1px solid #dee2e6;\n}\n\n.value-diff {\n display: grid;\n grid-template-columns: 1fr auto 1fr;\n gap: 1rem;\n align-items: center;\n}\n\n.old-value, .new-value {\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n}\n\n.value-label {\n font-size: 0.75rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: #6c757d;\n}\n\n.old-value .value {\n color: #6c757d;\n background: #f8f9fa;\n text-decoration: line-through;\n}\n\n.new-value .value {\n color: #155724;\n background: #d4edda;\n font-weight: 500;\n}\n\n.value {\n font-family: 'Courier New', monospace;\n font-size: 0.85rem;\n padding: 0.25rem 0.5rem;\n border-radius: 4px;\n border: 1px solid #dee2e6;\n word-break: break-all;\n}\n\n.diff-arrow {\n color: #007bff;\n font-size: 1.2rem;\n}\n\n.boolean-change .new-value {\n font-weight: 600;\n color: #007bff;\n font-size: 0.9rem;\n}\n\n/* Creation Details */\n.creation-details .field-change {\n border-left-color: #28a745;\n}\n\n.creation-details .field-value {\n color: #155724;\n background: #d4edda;\n font-weight: 500;\n}\n\n/* Deletion Details */\n.deletion-details {\n text-align: center;\n padding: 1rem;\n}\n\n.deletion-note {\n color: #6c757d;\n font-style: italic;\n margin-bottom: 0;\n}\n\n/* Diff View Styles - Scoped to this component */\nmj-record-changes .diff-view,\n.record-changes-container .diff-view {\n margin-top: 0.5rem !important;\n border: 1px dashed #28a745;\n border-radius: 4px;\n padding: 0.25rem;\n}\n\nmj-record-changes .diff-content,\n.record-changes-container .diff-content {\n background: #ffffff !important;\n border: 2px solid #007bff !important;\n border-radius: 6px;\n padding: 0.75rem !important;\n font-family: 'SFMono-Regular', 'Consolas', 'Liberation Mono', 'Menlo', monospace !important;\n font-size: 0.85rem !important;\n line-height: 1.45 !important;\n overflow-x: auto;\n min-height: 2rem;\n}\n\nmj-record-changes .diff-container,\n.record-changes-container .diff-container {\n word-wrap: break-word;\n white-space: pre-wrap;\n}\n\nmj-record-changes .diff-added,\n.record-changes-container .diff-added {\n background-color: #d1f5d3 !important;\n color: #22863a !important;\n text-decoration: none !important;\n border-radius: 3px;\n padding: 2px 4px !important;\n font-weight: 600 !important;\n display: inline;\n border: 1px solid #28a745;\n}\n\nmj-record-changes .diff-removed,\n.record-changes-container .diff-removed {\n background-color: #ffeef0 !important;\n color: #d73a49 !important;\n text-decoration: line-through !important;\n border-radius: 3px;\n padding: 2px 4px !important;\n font-weight: 600 !important;\n display: inline;\n border: 1px solid #dc3545;\n}\n\nmj-record-changes .diff-unchanged,\n.record-changes-container .diff-unchanged {\n color: #24292e !important;\n display: inline;\n}\n\n/* Enhanced diff styling for better readability */\nmj-record-changes .diff-added:not(:empty)::before,\n.record-changes-container .diff-added:not(:empty)::before {\n content: '';\n background: #28a745;\n width: 3px;\n height: 100%;\n position: absolute;\n left: -1px;\n border-radius: 1px;\n}\n\nmj-record-changes .diff-removed:not(:empty)::before,\n.record-changes-container .diff-removed:not(:empty)::before {\n content: '';\n background: #dc3545;\n width: 3px;\n height: 100%;\n position: absolute;\n left: -1px;\n border-radius: 1px;\n}\n\nmj-record-changes .diff-added, \nmj-record-changes .diff-removed,\n.record-changes-container .diff-added, \n.record-changes-container .diff-removed {\n position: relative;\n margin: 0 1px;\n display: inline;\n}\n\n/* Hover effects for diff elements */\nmj-record-changes .diff-added:hover,\n.record-changes-container .diff-added:hover {\n background-color: #c3f0c5 !important;\n box-shadow: 0 0 0 2px rgba(40, 167, 69, 0.15);\n}\n\nmj-record-changes .diff-removed:hover,\n.record-changes-container .diff-removed:hover {\n background-color: #ffd6dd !important;\n box-shadow: 0 0 0 2px rgba(220, 53, 69, 0.15);\n}\n\n/* Multi-line diff styling */\nmj-record-changes .diff-content .diff-added,\nmj-record-changes .diff-content .diff-removed,\n.record-changes-container .diff-content .diff-added,\n.record-changes-container .diff-content .diff-removed {\n padding: 1px 3px;\n border-radius: 3px;\n}\n\nmj-record-changes .diff-content .diff-added + .diff-added,\nmj-record-changes .diff-content .diff-removed + .diff-removed,\n.record-changes-container .diff-content .diff-added + .diff-added,\n.record-changes-container .diff-content .diff-removed + .diff-removed {\n margin-left: 0;\n}\n\n/* Word diff specific styling */\nmj-record-changes .diff-container.word-diff .diff-added,\nmj-record-changes .diff-container.word-diff .diff-removed,\n.record-changes-container .diff-container.word-diff .diff-added,\n.record-changes-container .diff-container.word-diff .diff-removed {\n padding: 2px 4px;\n margin: 0 1px;\n border-radius: 4px;\n}\n\n/* Comments and Errors */\n.change-comments, .change-errors {\n margin-top: 1rem;\n padding: 0.75rem;\n border-radius: 6px;\n}\n\n.change-comments {\n background: #e7f3ff;\n border-left: 4px solid #007bff;\n}\n\n.change-errors {\n background: #f8d7da;\n border-left: 4px solid #dc3545;\n}\n\n.error-log {\n background: #ffffff;\n padding: 0.5rem;\n border-radius: 4px;\n font-family: 'Courier New', monospace;\n font-size: 0.8rem;\n color: #721c24;\n margin: 0;\n white-space: pre-wrap;\n overflow-x: auto;\n}\n\n/* Responsive Design */\n@media (max-width: 768px) {\n .filter-controls {\n flex-direction: column;\n align-items: stretch;\n }\n \n .search-input, .filter-select {\n width: 100%;\n }\n \n .change-header {\n flex-direction: column;\n align-items: flex-start;\n }\n \n .change-meta {\n flex-direction: column;\n align-items: flex-start;\n gap: 0.25rem;\n }\n \n .value-diff {\n grid-template-columns: 1fr;\n gap: 0.5rem;\n }\n \n .diff-arrow {\n justify-self: center;\n transform: rotate(90deg);\n }\n \n .timeline {\n padding-left: 1.5rem;\n }\n \n .timeline-marker {\n left: -1.5rem;\n }\n \n .timeline-icon {\n width: 2rem;\n height: 2rem;\n font-size: 0.8rem;\n }\n \n /* Responsive diff view */\n .diff-content {\n font-size: 0.8rem;\n padding: 0.5rem;\n }\n \n .diff-added, .diff-removed {\n padding: 1px 2px;\n }\n}\n\n@media (max-width: 480px) {\n .record-changes-container {\n padding: 0.5rem;\n }\n \n .timeline-content {\n padding: 0.75rem;\n }\n \n .field-change {\n padding: 0.5rem;\n }\n}"], encapsulation: 2 });
|
|
205
685
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(RecordChangesComponent, [{
|
|
206
686
|
type: Component,
|
|
207
|
-
args: [{ selector: 'mj-record-changes', template: "<div #recordChangesWrapper>\n <div class=\"k-overlay\"></div>\n <kendo-window \n class=\"kendo-window-custom\"\n [width]=\"700\"\n [height]=\"525\"\n [minHeight]=\"300\"\n [minWidth]=\"400\"\n [resizable]=\"true\"\n title=\"Record Changes\"\n (close)=\"closePropertiesDialog()\"\n >\n <kendo-loader *ngIf=\"showloader\" type=\"converging-spinner\" ></kendo-loader>\n <div class=\"k-d-flex k-flex-col k-justify-content-between k-h-full\" #dialogContainer *ngIf=\"!showloader\">\n <div class=\"kendo-grid-container\">\n <kendo-grid \n [kendoGridBinding]=\"viewData\" \n scrollable=\"virtual\" \n [pageSize]=\"100\" \n [sortable]=\"true\"\n [sort]=\"sortSettings\" \n [loading]=\"showloader\" \n [resizable]=\"true\" \n [navigable]=\"true\"\n >\n <kendo-grid-column \n *ngFor=\"let item of visibleColumns; let i = index\" \n field=\"{{item.field}}\"\n title=\"{{item.title}}\" \n [width]=\"item.width\"\n [headerStyle]=\"{ 'font-weight' : 'bold', 'background-color': '#a9c2af' }\"\n >\n <ng-template kendoGridCellTemplate let-dataItem>\n <span [innerHTML]=\"FormatColumnValue(item, dataItem[item.field], dataItem)\"></span>\n </ng-template>\n </kendo-grid-column>\n </kendo-grid>\n </div>\n </div>\n </kendo-window>\n</div>" }]
|
|
208
|
-
}], () => [{ type: i1.
|
|
687
|
+
args: [{ selector: 'mj-record-changes', encapsulation: ViewEncapsulation.None, template: "<div #recordChangesWrapper>\n <div class=\"k-overlay\"></div>\n <kendo-window \n class=\"kendo-window-custom\"\n [width]=\"800\"\n [height]=\"650\"\n [minHeight]=\"400\"\n [minWidth]=\"600\"\n [resizable]=\"true\"\n [top]=\"50\"\n [left]=\"50\"\n title=\"Record Changes History\"\n (close)=\"closePropertiesDialog()\"\n >\n <kendo-loader *ngIf=\"showloader\" type=\"converging-spinner\"></kendo-loader>\n @if (!showloader) {\n <div class=\"record-changes-container\" #dialogContainer>\n <!-- Filter Panel -->\n <div class=\"filter-panel\">\n <div class=\"filter-controls\">\n <input \n type=\"text\" \n class=\"search-input\"\n placeholder=\"Search changes...\"\n [(ngModel)]=\"searchTerm\"\n (input)=\"onSearchChange()\"\n aria-label=\"Search record changes\"\n />\n <select \n class=\"filter-select\"\n [(ngModel)]=\"selectedType\"\n (change)=\"onFilterChange()\"\n aria-label=\"Filter by change type\"\n >\n <option value=\"\">All Changes</option>\n <option value=\"Create\">Created</option>\n <option value=\"Update\">Updated</option>\n <option value=\"Delete\">Deleted</option>\n </select>\n <select \n class=\"filter-select\"\n [(ngModel)]=\"selectedSource\"\n (change)=\"onFilterChange()\"\n aria-label=\"Filter by change source\"\n >\n <option value=\"\">All Sources</option>\n <option value=\"Internal\">Internal</option>\n <option value=\"External\">External</option>\n </select>\n </div>\n @if (filteredData.length !== viewData.length) {\n <div class=\"filter-results\">\n Showing {{ filteredData.length }} of {{ viewData.length }} changes\n </div>\n }\n </div>\n\n <!-- Timeline Container -->\n <div class=\"timeline-container\" [attr.aria-label]=\"'Timeline of changes for ' + record.EntityInfo.Name + ' record'\">\n @if (filteredData.length === 0) {\n <div class=\"no-changes-message\">\n @if (viewData.length === 0) {\n <i class=\"fa-solid fa-info-circle\"></i>\n No changes found for this record.\n } @else {\n <i class=\"fa-solid fa-search\"></i>\n No changes match your current filters.\n }\n </div>\n } @else {\n <div class=\"timeline\">\n @for (change of filteredData; track change.ID; let i = $index) {\n <div \n class=\"timeline-item\"\n [class.expanded]=\"expandedItems.has(change.ID)\"\n [attr.tabindex]=\"0\"\n [attr.aria-expanded]=\"expandedItems.has(change.ID)\"\n [attr.aria-label]=\"getTimelineItemLabel(change)\"\n (click)=\"toggleExpansion(change.ID)\"\n (keydown)=\"onTimelineItemKeydown($event, change.ID)\"\n >\n <div class=\"timeline-marker\">\n <div class=\"timeline-icon\" [class]=\"getChangeTypeClass(change.Type)\">\n <i [class]=\"getChangeTypeIcon(change.Type)\" [attr.aria-hidden]=\"true\"></i>\n </div>\n @if (i < filteredData.length - 1) {\n <div class=\"timeline-line\"></div>\n }\n </div>\n \n <div class=\"timeline-content\">\n <div class=\"change-header\">\n <div class=\"change-title\">\n <span class=\"change-type-badge\" [class]=\"getChangeTypeBadgeClass(change.Type)\">\n {{ change.Type }}\n </span>\n <span class=\"change-user\">{{ change.User || 'Unknown User' }}</span>\n <span class=\"change-source\" [class]=\"getSourceClass(change.Source)\">\n {{ change.Source }}\n </span>\n </div>\n <div class=\"change-meta\">\n <span class=\"change-time\" [title]=\"formatFullDateTime(change.ChangedAt)\">\n {{ formatRelativeTime(change.ChangedAt) }}\n </span>\n <span class=\"change-status\" [class]=\"getStatusClass(change.Status)\">\n {{ change.Status }}\n </span>\n @if (change.Integration) {\n <span class=\"change-integration\">\n via {{ change.Integration }}\n </span>\n }\n </div>\n </div>\n \n @if (!expandedItems.has(change.ID)) {\n <div class=\"change-summary\">\n {{ getChangeSummary(change) }}\n </div>\n }\n \n @if (expandedItems.has(change.ID)) {\n <div class=\"change-details\">\n <div class=\"change-timestamp\">\n <i class=\"fa-solid fa-clock\" aria-hidden=\"true\"></i>\n <strong>{{ formatFullDateTime(change.ChangedAt) }}</strong>\n </div>\n @if (change.Type === 'Create') {\n <div class=\"creation-details\">\n <h4><i class=\"fa-solid fa-plus\"></i> Record Created</h4>\n @if (change.FullRecordJSON) {\n <div class=\"field-changes\">\n @for (field of getCreatedFields(change); track field.name) {\n <div class=\"field-change created\">\n <span class=\"field-name\">{{ field.displayName }}</span>\n <span class=\"field-value new-value\">{{ field.value }}</span>\n </div>\n }\n </div>\n }\n </div>\n } @else if (change.Type === 'Delete') {\n <div class=\"deletion-details\">\n <h4><i class=\"fa-solid fa-trash\"></i> Record Deleted</h4>\n <p class=\"deletion-note\">This record was permanently removed from the system.</p>\n </div>\n } @else {\n <div class=\"update-details\">\n <h4><i class=\"fa-solid fa-edit\"></i> Fields Changed</h4>\n <div class=\"field-changes\">\n @for (fieldChange of getFieldChanges(change); track fieldChange.field) {\n <div class=\"field-change\">\n <div class=\"field-name\">{{ fieldChange.displayName }}</div>\n @if (fieldChange.isBooleanField) {\n <div class=\"boolean-change\">\n <span class=\"new-value\">{{ fieldChange.newValue }}</span>\n </div>\n } @else if (fieldChange.diffHtml) {\n <div class=\"diff-view\">\n <div class=\"diff-content\" [innerHTML]=\"fieldChange.diffHtml\"></div>\n </div>\n } @else {\n <div class=\"value-diff\">\n <div class=\"old-value\">\n <span class=\"value-label\">From:</span>\n <span class=\"value\">{{ fieldChange.oldValue || '(empty)' }}</span>\n </div>\n <div class=\"diff-arrow\">\n <i class=\"fa-solid fa-arrow-right\" aria-hidden=\"true\"></i>\n </div>\n <div class=\"new-value\">\n <span class=\"value-label\">To:</span>\n <span class=\"value\">{{ fieldChange.newValue || '(empty)' }}</span>\n </div>\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n \n @if (change.Comments) {\n <div class=\"change-comments\">\n <h5><i class=\"fa-solid fa-comment\"></i> Comments</h5>\n <p>{{ change.Comments }}</p>\n </div>\n }\n \n @if (change.ErrorLog) {\n <div class=\"change-errors\">\n <h5><i class=\"fa-solid fa-exclamation-triangle\"></i> Errors</h5>\n <pre class=\"error-log\">{{ change.ErrorLog }}</pre>\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n </kendo-window>\n</div>", styles: ["/* Record Changes Timeline Styles */\n.record-changes-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n padding: 1rem;\n}\n\n/* Filter Panel */\n.filter-panel {\n background: #f8f9fa;\n border-radius: 8px;\n padding: 1rem;\n margin-bottom: 1rem;\n border: 1px solid #e9ecef;\n}\n\n.filter-controls {\n display: flex;\n gap: 1rem;\n align-items: center;\n flex-wrap: wrap;\n}\n\n.search-input {\n flex: 1;\n min-width: 200px;\n padding: 0.5rem 1rem;\n border: 1px solid #ced4da;\n border-radius: 4px;\n font-size: 0.9rem;\n}\n\n.search-input:focus {\n outline: none;\n border-color: #007bff;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.filter-select {\n padding: 0.5rem;\n border: 1px solid #ced4da;\n border-radius: 4px;\n background: white;\n font-size: 0.9rem;\n min-width: 120px;\n}\n\n.filter-select:focus {\n outline: none;\n border-color: #007bff;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.filter-results {\n margin-top: 0.5rem;\n font-size: 0.85rem;\n color: #6c757d;\n font-style: italic;\n}\n\n/* Timeline Container */\n.timeline-container {\n flex: 1;\n overflow-y: auto;\n padding-right: 0.5rem;\n}\n\n.no-changes-message {\n text-align: center;\n padding: 3rem 1rem;\n color: #6c757d;\n font-size: 1.1rem;\n}\n\n.no-changes-message i {\n display: block;\n font-size: 2rem;\n margin-bottom: 1rem;\n color: #adb5bd;\n}\n\n/* Timeline */\n.timeline {\n position: relative;\n padding-left: 2rem;\n}\n\n.timeline-item {\n position: relative;\n margin-bottom: 1.5rem;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.timeline-item:hover {\n transform: translateX(2px);\n}\n\n.timeline-item:focus {\n outline: 2px solid #007bff;\n outline-offset: 2px;\n border-radius: 4px;\n}\n\n.timeline-item.expanded {\n margin-bottom: 2rem;\n}\n\n/* Timeline Marker */\n.timeline-marker {\n position: absolute;\n left: -2rem;\n top: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n.timeline-icon {\n width: 2.5rem;\n height: 2.5rem;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 0.9rem;\n color: white;\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n z-index: 2;\n}\n\n.timeline-icon.change-create {\n background: linear-gradient(135deg, #28a745, #20c997);\n}\n\n.timeline-icon.change-update {\n background: linear-gradient(135deg, #007bff, #6f42c1);\n}\n\n.timeline-icon.change-delete {\n background: linear-gradient(135deg, #dc3545, #fd7e14);\n}\n\n.timeline-icon.change-unknown {\n background: linear-gradient(135deg, #6c757d, #adb5bd);\n}\n\n.timeline-line {\n width: 2px;\n height: 2rem;\n background: #e9ecef;\n margin-top: 0.5rem;\n}\n\n/* Timeline Content */\n.timeline-content {\n background: white;\n border: 1px solid #e9ecef;\n border-radius: 8px;\n padding: 1rem;\n box-shadow: 0 2px 4px rgba(0,0,0,0.05);\n transition: box-shadow 0.2s ease;\n}\n\n.timeline-item:hover .timeline-content {\n box-shadow: 0 4px 8px rgba(0,0,0,0.1);\n}\n\n.timeline-item.expanded .timeline-content {\n box-shadow: 0 4px 12px rgba(0,0,0,0.15);\n}\n\n/* Change Header */\n.change-header {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 0.75rem;\n flex-wrap: wrap;\n gap: 0.5rem;\n}\n\n.change-title {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n flex-wrap: wrap;\n}\n\n.change-type-badge {\n font-size: 0.75rem;\n font-weight: 600;\n padding: 0.25rem 0.5rem;\n border-radius: 12px;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n}\n\n.badge-create {\n background: #d4edda;\n color: #155724;\n}\n\n.badge-update {\n background: #cce7ff;\n color: #004085;\n}\n\n.badge-delete {\n background: #f8d7da;\n color: #721c24;\n}\n\n.badge-unknown {\n background: #e2e3e5;\n color: #383d41;\n}\n\n.change-user {\n font-weight: 600;\n color: #495057;\n}\n\n.change-source {\n font-size: 0.8rem;\n padding: 0.2rem 0.4rem;\n border-radius: 8px;\n font-weight: 500;\n}\n\n.source-internal {\n background: #e7f3ff;\n color: #0056b3;\n}\n\n.source-external {\n background: #fff3cd;\n color: #856404;\n}\n\n.change-meta {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n font-size: 0.85rem;\n color: #6c757d;\n flex-wrap: wrap;\n}\n\n.change-time {\n font-weight: 500;\n}\n\n.change-status {\n padding: 0.2rem 0.4rem;\n border-radius: 8px;\n font-size: 0.75rem;\n font-weight: 600;\n text-transform: uppercase;\n}\n\n.status-complete {\n background: #d4edda;\n color: #155724;\n}\n\n.status-pending {\n background: #fff3cd;\n color: #856404;\n}\n\n.status-error {\n background: #f8d7da;\n color: #721c24;\n}\n\n.status-unknown {\n background: #e2e3e5;\n color: #383d41;\n}\n\n.change-integration {\n font-style: italic;\n color: #495057;\n}\n\n/* Change Summary */\n.change-summary {\n color: #6c757d;\n font-size: 0.9rem;\n line-height: 1.4;\n}\n\n/* Change Details */\n.change-details {\n margin-top: 1rem;\n padding-top: 1rem;\n border-top: 1px solid #e9ecef;\n}\n\n.change-timestamp {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n margin-bottom: 1rem;\n padding: 0.5rem;\n background: #f8f9fa;\n border-radius: 6px;\n border-left: 4px solid #6c757d;\n font-size: 0.9rem;\n color: #495057;\n}\n\n.change-timestamp i {\n color: #6c757d;\n}\n\n.change-details h4 {\n font-size: 1rem;\n margin-bottom: 1rem;\n color: #495057;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n\n.change-details h5 {\n font-size: 0.9rem;\n margin-bottom: 0.5rem;\n color: #495057;\n display: flex;\n align-items: center;\n gap: 0.5rem;\n}\n\n/* Field Changes */\n.field-changes {\n display: flex;\n flex-direction: column;\n gap: 1rem;\n}\n\n.field-change {\n background: #f8f9fa;\n border-radius: 6px;\n padding: 0.75rem;\n border-left: 4px solid #007bff;\n}\n\n.field-change.created {\n border-left-color: #28a745;\n}\n\n.field-name {\n font-weight: 600;\n color: #495057;\n margin-bottom: 0.5rem;\n display: block;\n}\n\n.field-value {\n font-family: 'Courier New', monospace;\n font-size: 0.85rem;\n padding: 0.25rem 0.5rem;\n border-radius: 4px;\n background: white;\n border: 1px solid #dee2e6;\n}\n\n.value-diff {\n display: grid;\n grid-template-columns: 1fr auto 1fr;\n gap: 1rem;\n align-items: center;\n}\n\n.old-value, .new-value {\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n}\n\n.value-label {\n font-size: 0.75rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: #6c757d;\n}\n\n.old-value .value {\n color: #6c757d;\n background: #f8f9fa;\n text-decoration: line-through;\n}\n\n.new-value .value {\n color: #155724;\n background: #d4edda;\n font-weight: 500;\n}\n\n.value {\n font-family: 'Courier New', monospace;\n font-size: 0.85rem;\n padding: 0.25rem 0.5rem;\n border-radius: 4px;\n border: 1px solid #dee2e6;\n word-break: break-all;\n}\n\n.diff-arrow {\n color: #007bff;\n font-size: 1.2rem;\n}\n\n.boolean-change .new-value {\n font-weight: 600;\n color: #007bff;\n font-size: 0.9rem;\n}\n\n/* Creation Details */\n.creation-details .field-change {\n border-left-color: #28a745;\n}\n\n.creation-details .field-value {\n color: #155724;\n background: #d4edda;\n font-weight: 500;\n}\n\n/* Deletion Details */\n.deletion-details {\n text-align: center;\n padding: 1rem;\n}\n\n.deletion-note {\n color: #6c757d;\n font-style: italic;\n margin-bottom: 0;\n}\n\n/* Diff View Styles - Scoped to this component */\nmj-record-changes .diff-view,\n.record-changes-container .diff-view {\n margin-top: 0.5rem !important;\n border: 1px dashed #28a745;\n border-radius: 4px;\n padding: 0.25rem;\n}\n\nmj-record-changes .diff-content,\n.record-changes-container .diff-content {\n background: #ffffff !important;\n border: 2px solid #007bff !important;\n border-radius: 6px;\n padding: 0.75rem !important;\n font-family: 'SFMono-Regular', 'Consolas', 'Liberation Mono', 'Menlo', monospace !important;\n font-size: 0.85rem !important;\n line-height: 1.45 !important;\n overflow-x: auto;\n min-height: 2rem;\n}\n\nmj-record-changes .diff-container,\n.record-changes-container .diff-container {\n word-wrap: break-word;\n white-space: pre-wrap;\n}\n\nmj-record-changes .diff-added,\n.record-changes-container .diff-added {\n background-color: #d1f5d3 !important;\n color: #22863a !important;\n text-decoration: none !important;\n border-radius: 3px;\n padding: 2px 4px !important;\n font-weight: 600 !important;\n display: inline;\n border: 1px solid #28a745;\n}\n\nmj-record-changes .diff-removed,\n.record-changes-container .diff-removed {\n background-color: #ffeef0 !important;\n color: #d73a49 !important;\n text-decoration: line-through !important;\n border-radius: 3px;\n padding: 2px 4px !important;\n font-weight: 600 !important;\n display: inline;\n border: 1px solid #dc3545;\n}\n\nmj-record-changes .diff-unchanged,\n.record-changes-container .diff-unchanged {\n color: #24292e !important;\n display: inline;\n}\n\n/* Enhanced diff styling for better readability */\nmj-record-changes .diff-added:not(:empty)::before,\n.record-changes-container .diff-added:not(:empty)::before {\n content: '';\n background: #28a745;\n width: 3px;\n height: 100%;\n position: absolute;\n left: -1px;\n border-radius: 1px;\n}\n\nmj-record-changes .diff-removed:not(:empty)::before,\n.record-changes-container .diff-removed:not(:empty)::before {\n content: '';\n background: #dc3545;\n width: 3px;\n height: 100%;\n position: absolute;\n left: -1px;\n border-radius: 1px;\n}\n\nmj-record-changes .diff-added, \nmj-record-changes .diff-removed,\n.record-changes-container .diff-added, \n.record-changes-container .diff-removed {\n position: relative;\n margin: 0 1px;\n display: inline;\n}\n\n/* Hover effects for diff elements */\nmj-record-changes .diff-added:hover,\n.record-changes-container .diff-added:hover {\n background-color: #c3f0c5 !important;\n box-shadow: 0 0 0 2px rgba(40, 167, 69, 0.15);\n}\n\nmj-record-changes .diff-removed:hover,\n.record-changes-container .diff-removed:hover {\n background-color: #ffd6dd !important;\n box-shadow: 0 0 0 2px rgba(220, 53, 69, 0.15);\n}\n\n/* Multi-line diff styling */\nmj-record-changes .diff-content .diff-added,\nmj-record-changes .diff-content .diff-removed,\n.record-changes-container .diff-content .diff-added,\n.record-changes-container .diff-content .diff-removed {\n padding: 1px 3px;\n border-radius: 3px;\n}\n\nmj-record-changes .diff-content .diff-added + .diff-added,\nmj-record-changes .diff-content .diff-removed + .diff-removed,\n.record-changes-container .diff-content .diff-added + .diff-added,\n.record-changes-container .diff-content .diff-removed + .diff-removed {\n margin-left: 0;\n}\n\n/* Word diff specific styling */\nmj-record-changes .diff-container.word-diff .diff-added,\nmj-record-changes .diff-container.word-diff .diff-removed,\n.record-changes-container .diff-container.word-diff .diff-added,\n.record-changes-container .diff-container.word-diff .diff-removed {\n padding: 2px 4px;\n margin: 0 1px;\n border-radius: 4px;\n}\n\n/* Comments and Errors */\n.change-comments, .change-errors {\n margin-top: 1rem;\n padding: 0.75rem;\n border-radius: 6px;\n}\n\n.change-comments {\n background: #e7f3ff;\n border-left: 4px solid #007bff;\n}\n\n.change-errors {\n background: #f8d7da;\n border-left: 4px solid #dc3545;\n}\n\n.error-log {\n background: #ffffff;\n padding: 0.5rem;\n border-radius: 4px;\n font-family: 'Courier New', monospace;\n font-size: 0.8rem;\n color: #721c24;\n margin: 0;\n white-space: pre-wrap;\n overflow-x: auto;\n}\n\n/* Responsive Design */\n@media (max-width: 768px) {\n .filter-controls {\n flex-direction: column;\n align-items: stretch;\n }\n \n .search-input, .filter-select {\n width: 100%;\n }\n \n .change-header {\n flex-direction: column;\n align-items: flex-start;\n }\n \n .change-meta {\n flex-direction: column;\n align-items: flex-start;\n gap: 0.25rem;\n }\n \n .value-diff {\n grid-template-columns: 1fr;\n gap: 0.5rem;\n }\n \n .diff-arrow {\n justify-self: center;\n transform: rotate(90deg);\n }\n \n .timeline {\n padding-left: 1.5rem;\n }\n \n .timeline-marker {\n left: -1.5rem;\n }\n \n .timeline-icon {\n width: 2rem;\n height: 2rem;\n font-size: 0.8rem;\n }\n \n /* Responsive diff view */\n .diff-content {\n font-size: 0.8rem;\n padding: 0.5rem;\n }\n \n .diff-added, .diff-removed {\n padding: 1px 2px;\n }\n}\n\n@media (max-width: 480px) {\n .record-changes-container {\n padding: 0.5rem;\n }\n \n .timeline-content {\n padding: 0.75rem;\n }\n \n .field-change {\n padding: 0.5rem;\n }\n}"] }]
|
|
688
|
+
}], () => [{ type: i0.Renderer2 }, { type: i1.MJNotificationService }, { type: i2.DomSanitizer }], { dialogClosed: [{
|
|
209
689
|
type: Output
|
|
210
690
|
}], record: [{
|
|
211
691
|
type: Input
|
|
@@ -213,5 +693,5 @@ RecordChangesComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: Reco
|
|
|
213
693
|
type: ViewChild,
|
|
214
694
|
args: ['recordChangesWrapper', { static: true }]
|
|
215
695
|
}] }); })();
|
|
216
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(RecordChangesComponent, { className: "RecordChangesComponent", filePath: "src/lib/ng-record-changes.component.ts", lineNumber:
|
|
696
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(RecordChangesComponent, { className: "RecordChangesComponent", filePath: "src/lib/ng-record-changes.component.ts", lineNumber: 15 }); })();
|
|
217
697
|
//# sourceMappingURL=ng-record-changes.component.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ng-record-changes.component.js","sourceRoot":"","sources":["../../src/lib/ng-record-changes.component.ts","../../src/lib/ng-record-changes.component.html"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ng-record-changes.component.js","sourceRoot":"","sources":["../../src/lib/ng-record-changes.component.ts","../../src/lib/ng-record-changes.component.html"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memberjunction/ng-record-changes",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.43.0",
|
|
4
4
|
"description": "MemberJunction: Angular pop-up window and grid to show changes made to a specific individual record",
|
|
5
5
|
"main": "./dist/public-api.js",
|
|
6
6
|
"typings": "./dist/public-api.d.ts",
|
|
@@ -27,10 +27,12 @@
|
|
|
27
27
|
"@progress/kendo-angular-indicators": "16.2.0"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@memberjunction/core": "2.
|
|
31
|
-
"@memberjunction/global": "2.
|
|
32
|
-
"@memberjunction/ng-compare-records": "2.
|
|
33
|
-
"@memberjunction/ng-container-directives": "2.
|
|
30
|
+
"@memberjunction/core": "2.43.0",
|
|
31
|
+
"@memberjunction/global": "2.43.0",
|
|
32
|
+
"@memberjunction/ng-compare-records": "2.43.0",
|
|
33
|
+
"@memberjunction/ng-container-directives": "2.43.0",
|
|
34
|
+
"@memberjunction/ng-notifications": "2.43.0",
|
|
35
|
+
"diff": "8.0.2",
|
|
34
36
|
"tslib": "^2.3.0"
|
|
35
37
|
},
|
|
36
38
|
"sideEffects": false
|