@memberjunction/ng-artifacts 2.127.0 → 2.128.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/lib/artifacts.module.d.ts +8 -7
- package/dist/lib/artifacts.module.d.ts.map +1 -1
- package/dist/lib/artifacts.module.js +7 -2
- package/dist/lib/artifacts.module.js.map +1 -1
- package/dist/lib/components/artifact-viewer-panel.component.d.ts +24 -1
- package/dist/lib/components/artifact-viewer-panel.component.d.ts.map +1 -1
- package/dist/lib/components/artifact-viewer-panel.component.js +106 -39
- package/dist/lib/components/artifact-viewer-panel.component.js.map +1 -1
- package/dist/lib/components/base-artifact-viewer.component.d.ts +37 -3
- package/dist/lib/components/base-artifact-viewer.component.d.ts.map +1 -1
- package/dist/lib/components/base-artifact-viewer.component.js +1 -1
- package/dist/lib/components/base-artifact-viewer.component.js.map +1 -1
- package/dist/lib/components/plugins/component-artifact-viewer.component.d.ts.map +1 -1
- package/dist/lib/components/plugins/component-artifact-viewer.component.js +6 -5
- package/dist/lib/components/plugins/component-artifact-viewer.component.js.map +1 -1
- package/dist/lib/components/plugins/data-requirements-viewer/data-requirements-viewer.component.d.ts +34 -0
- package/dist/lib/components/plugins/data-requirements-viewer/data-requirements-viewer.component.d.ts.map +1 -0
- package/dist/lib/components/plugins/data-requirements-viewer/data-requirements-viewer.component.js +675 -0
- package/dist/lib/components/plugins/data-requirements-viewer/data-requirements-viewer.component.js.map +1 -0
- package/package.json +11 -11
package/dist/lib/components/plugins/data-requirements-viewer/data-requirements-viewer.component.js
ADDED
|
@@ -0,0 +1,675 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/common";
|
|
4
|
+
import * as i2 from "@memberjunction/ng-markdown";
|
|
5
|
+
const _forTrack0 = ($index, $item) => $item.name;
|
|
6
|
+
function _forTrack1($index, $item) { return this.getQueryKey($item); }
|
|
7
|
+
function DataRequirementsViewerComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
8
|
+
i0.ɵɵelementStart(0, "div", 1);
|
|
9
|
+
i0.ɵɵelement(1, "i", 2);
|
|
10
|
+
i0.ɵɵelementStart(2, "h3");
|
|
11
|
+
i0.ɵɵtext(3, "No Data Requirements");
|
|
12
|
+
i0.ɵɵelementEnd();
|
|
13
|
+
i0.ɵɵelementStart(4, "p");
|
|
14
|
+
i0.ɵɵtext(5, "This component doesn't have any data requirements defined.");
|
|
15
|
+
i0.ɵɵelementEnd()();
|
|
16
|
+
} }
|
|
17
|
+
function DataRequirementsViewerComponent_Conditional_2_div_6_Template(rf, ctx) { if (rf & 1) {
|
|
18
|
+
i0.ɵɵelementStart(0, "div", 8)(1, "span", 9);
|
|
19
|
+
i0.ɵɵtext(2);
|
|
20
|
+
i0.ɵɵelementEnd();
|
|
21
|
+
i0.ɵɵelementStart(3, "span", 10);
|
|
22
|
+
i0.ɵɵtext(4);
|
|
23
|
+
i0.ɵɵelementEnd()();
|
|
24
|
+
} if (rf & 2) {
|
|
25
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
26
|
+
i0.ɵɵadvance(2);
|
|
27
|
+
i0.ɵɵtextInterpolate(ctx_r0.entities.length);
|
|
28
|
+
i0.ɵɵadvance(2);
|
|
29
|
+
i0.ɵɵtextInterpolate(ctx_r0.entities.length === 1 ? "Entity" : "Entities");
|
|
30
|
+
} }
|
|
31
|
+
function DataRequirementsViewerComponent_Conditional_2_div_7_Template(rf, ctx) { if (rf & 1) {
|
|
32
|
+
i0.ɵɵelementStart(0, "div", 8)(1, "span", 9);
|
|
33
|
+
i0.ɵɵtext(2);
|
|
34
|
+
i0.ɵɵelementEnd();
|
|
35
|
+
i0.ɵɵelementStart(3, "span", 10);
|
|
36
|
+
i0.ɵɵtext(4);
|
|
37
|
+
i0.ɵɵelementEnd()();
|
|
38
|
+
} if (rf & 2) {
|
|
39
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
40
|
+
i0.ɵɵadvance(2);
|
|
41
|
+
i0.ɵɵtextInterpolate(ctx_r0.queries.length);
|
|
42
|
+
i0.ɵɵadvance(2);
|
|
43
|
+
i0.ɵɵtextInterpolate(ctx_r0.queries.length === 1 ? "Query" : "Queries");
|
|
44
|
+
} }
|
|
45
|
+
function DataRequirementsViewerComponent_Conditional_2_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
46
|
+
i0.ɵɵelementStart(0, "div", 11)(1, "h4", 14);
|
|
47
|
+
i0.ɵɵelement(2, "i", 15);
|
|
48
|
+
i0.ɵɵtext(3, " Overview ");
|
|
49
|
+
i0.ɵɵelementEnd();
|
|
50
|
+
i0.ɵɵelementStart(4, "div", 16);
|
|
51
|
+
i0.ɵɵelement(5, "mj-markdown", 17);
|
|
52
|
+
i0.ɵɵelementEnd()();
|
|
53
|
+
} if (rf & 2) {
|
|
54
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
55
|
+
i0.ɵɵadvance(5);
|
|
56
|
+
i0.ɵɵproperty("data", ctx_r0.description)("enableCollapsibleHeadings", false)("enableLineNumbers", false)("enableSmartypants", true)("enableHtml", true);
|
|
57
|
+
} }
|
|
58
|
+
function DataRequirementsViewerComponent_Conditional_2_Conditional_14_For_6_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
59
|
+
i0.ɵɵelementStart(0, "p", 28);
|
|
60
|
+
i0.ɵɵtext(1);
|
|
61
|
+
i0.ɵɵelementEnd();
|
|
62
|
+
} if (rf & 2) {
|
|
63
|
+
const entity_r3 = i0.ɵɵnextContext().$implicit;
|
|
64
|
+
i0.ɵɵadvance();
|
|
65
|
+
i0.ɵɵtextInterpolate(entity_r3.description);
|
|
66
|
+
} }
|
|
67
|
+
function DataRequirementsViewerComponent_Conditional_2_Conditional_14_For_6_For_14_Template(rf, ctx) { if (rf & 1) {
|
|
68
|
+
i0.ɵɵelementStart(0, "span", 35);
|
|
69
|
+
i0.ɵɵelement(1, "i", 5);
|
|
70
|
+
i0.ɵɵtext(2);
|
|
71
|
+
i0.ɵɵelementEnd();
|
|
72
|
+
} if (rf & 2) {
|
|
73
|
+
const perm_r4 = ctx.$implicit;
|
|
74
|
+
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
75
|
+
i0.ɵɵstyleProp("background-color", ctx_r0.getPermissionColor(perm_r4));
|
|
76
|
+
i0.ɵɵadvance();
|
|
77
|
+
i0.ɵɵproperty("ngClass", ctx_r0.getPermissionIcon(perm_r4));
|
|
78
|
+
i0.ɵɵadvance();
|
|
79
|
+
i0.ɵɵtextInterpolate1(" ", perm_r4, " ");
|
|
80
|
+
} }
|
|
81
|
+
function DataRequirementsViewerComponent_Conditional_2_Conditional_14_For_6_Conditional_17_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
82
|
+
i0.ɵɵelementStart(0, "div", 36);
|
|
83
|
+
i0.ɵɵelement(1, "i", 15);
|
|
84
|
+
i0.ɵɵelementStart(2, "span");
|
|
85
|
+
i0.ɵɵtext(3);
|
|
86
|
+
i0.ɵɵelementEnd()();
|
|
87
|
+
} if (rf & 2) {
|
|
88
|
+
const entity_r3 = i0.ɵɵnextContext(2).$implicit;
|
|
89
|
+
i0.ɵɵadvance(3);
|
|
90
|
+
i0.ɵɵtextInterpolate(entity_r3.usageContext);
|
|
91
|
+
} }
|
|
92
|
+
function DataRequirementsViewerComponent_Conditional_2_Conditional_14_For_6_Conditional_17_Conditional_2_For_14_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
93
|
+
i0.ɵɵelementStart(0, "span", 47);
|
|
94
|
+
i0.ɵɵtext(1, "*");
|
|
95
|
+
i0.ɵɵelementEnd();
|
|
96
|
+
} }
|
|
97
|
+
function DataRequirementsViewerComponent_Conditional_2_Conditional_14_For_6_Conditional_17_Conditional_2_For_14_For_11_Template(rf, ctx) { if (rf & 1) {
|
|
98
|
+
i0.ɵɵelementStart(0, "span", 50);
|
|
99
|
+
i0.ɵɵtext(1);
|
|
100
|
+
i0.ɵɵelementEnd();
|
|
101
|
+
} if (rf & 2) {
|
|
102
|
+
const tag_r5 = ctx.$implicit;
|
|
103
|
+
const ctx_r0 = i0.ɵɵnextContext(7);
|
|
104
|
+
i0.ɵɵstyleProp("background-color", ctx_r0.getTagColor(tag_r5));
|
|
105
|
+
i0.ɵɵadvance();
|
|
106
|
+
i0.ɵɵtextInterpolate(tag_r5);
|
|
107
|
+
} }
|
|
108
|
+
function DataRequirementsViewerComponent_Conditional_2_Conditional_14_For_6_Conditional_17_Conditional_2_For_14_Template(rf, ctx) { if (rf & 1) {
|
|
109
|
+
i0.ɵɵelementStart(0, "div", 45)(1, "span", 41);
|
|
110
|
+
i0.ɵɵelement(2, "i", 5);
|
|
111
|
+
i0.ɵɵelementStart(3, "span", 46);
|
|
112
|
+
i0.ɵɵtext(4);
|
|
113
|
+
i0.ɵɵelementEnd();
|
|
114
|
+
i0.ɵɵtemplate(5, DataRequirementsViewerComponent_Conditional_2_Conditional_14_For_6_Conditional_17_Conditional_2_For_14_Conditional_5_Template, 2, 0, "span", 47);
|
|
115
|
+
i0.ɵɵelementEnd();
|
|
116
|
+
i0.ɵɵelementStart(6, "span", 42)(7, "code", 48);
|
|
117
|
+
i0.ɵɵtext(8);
|
|
118
|
+
i0.ɵɵelementEnd()();
|
|
119
|
+
i0.ɵɵelementStart(9, "span", 43);
|
|
120
|
+
i0.ɵɵrepeaterCreate(10, DataRequirementsViewerComponent_Conditional_2_Conditional_14_For_6_Conditional_17_Conditional_2_For_14_For_11_Template, 2, 3, "span", 49, i0.ɵɵrepeaterTrackByIdentity);
|
|
121
|
+
i0.ɵɵelementEnd();
|
|
122
|
+
i0.ɵɵelementStart(12, "span", 44);
|
|
123
|
+
i0.ɵɵtext(13);
|
|
124
|
+
i0.ɵɵelementEnd()();
|
|
125
|
+
} if (rf & 2) {
|
|
126
|
+
const field_r6 = ctx.$implicit;
|
|
127
|
+
const entity_r3 = i0.ɵɵnextContext(3).$implicit;
|
|
128
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
129
|
+
i0.ɵɵadvance(2);
|
|
130
|
+
i0.ɵɵstyleProp("color", ctx_r0.getFieldTypeColor(field_r6.type));
|
|
131
|
+
i0.ɵɵproperty("ngClass", ctx_r0.getFieldTypeIcon(field_r6.type));
|
|
132
|
+
i0.ɵɵadvance(2);
|
|
133
|
+
i0.ɵɵtextInterpolate(field_r6.name);
|
|
134
|
+
i0.ɵɵadvance();
|
|
135
|
+
i0.ɵɵconditional(!field_r6.allowsNull ? 5 : -1);
|
|
136
|
+
i0.ɵɵadvance(3);
|
|
137
|
+
i0.ɵɵtextInterpolate(ctx_r0.formatFieldType(field_r6.type));
|
|
138
|
+
i0.ɵɵadvance(2);
|
|
139
|
+
i0.ɵɵrepeater(ctx_r0.getFieldUsageTags(field_r6, entity_r3));
|
|
140
|
+
i0.ɵɵadvance(3);
|
|
141
|
+
i0.ɵɵtextInterpolate1(" ", field_r6.description || "\u2014", " ");
|
|
142
|
+
} }
|
|
143
|
+
function DataRequirementsViewerComponent_Conditional_2_Conditional_14_For_6_Conditional_17_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
144
|
+
i0.ɵɵelementStart(0, "div", 37)(1, "h5", 38);
|
|
145
|
+
i0.ɵɵtext(2, "Fields");
|
|
146
|
+
i0.ɵɵelementEnd();
|
|
147
|
+
i0.ɵɵelementStart(3, "div", 39)(4, "div", 40)(5, "span", 41);
|
|
148
|
+
i0.ɵɵtext(6, "Name");
|
|
149
|
+
i0.ɵɵelementEnd();
|
|
150
|
+
i0.ɵɵelementStart(7, "span", 42);
|
|
151
|
+
i0.ɵɵtext(8, "Type");
|
|
152
|
+
i0.ɵɵelementEnd();
|
|
153
|
+
i0.ɵɵelementStart(9, "span", 43);
|
|
154
|
+
i0.ɵɵtext(10, "Usage");
|
|
155
|
+
i0.ɵɵelementEnd();
|
|
156
|
+
i0.ɵɵelementStart(11, "span", 44);
|
|
157
|
+
i0.ɵɵtext(12, "Description");
|
|
158
|
+
i0.ɵɵelementEnd()();
|
|
159
|
+
i0.ɵɵrepeaterCreate(13, DataRequirementsViewerComponent_Conditional_2_Conditional_14_For_6_Conditional_17_Conditional_2_For_14_Template, 14, 7, "div", 45, _forTrack0);
|
|
160
|
+
i0.ɵɵelementEnd()();
|
|
161
|
+
} if (rf & 2) {
|
|
162
|
+
const entity_r3 = i0.ɵɵnextContext(2).$implicit;
|
|
163
|
+
i0.ɵɵadvance(13);
|
|
164
|
+
i0.ɵɵrepeater(entity_r3.fieldMetadata);
|
|
165
|
+
} }
|
|
166
|
+
function DataRequirementsViewerComponent_Conditional_2_Conditional_14_For_6_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
167
|
+
i0.ɵɵelementStart(0, "div", 34);
|
|
168
|
+
i0.ɵɵtemplate(1, DataRequirementsViewerComponent_Conditional_2_Conditional_14_For_6_Conditional_17_Conditional_1_Template, 4, 1, "div", 36)(2, DataRequirementsViewerComponent_Conditional_2_Conditional_14_For_6_Conditional_17_Conditional_2_Template, 15, 0, "div", 37);
|
|
169
|
+
i0.ɵɵelementEnd();
|
|
170
|
+
} if (rf & 2) {
|
|
171
|
+
const entity_r3 = i0.ɵɵnextContext().$implicit;
|
|
172
|
+
i0.ɵɵadvance();
|
|
173
|
+
i0.ɵɵconditional(entity_r3.usageContext ? 1 : -1);
|
|
174
|
+
i0.ɵɵadvance();
|
|
175
|
+
i0.ɵɵconditional(entity_r3.fieldMetadata && entity_r3.fieldMetadata.length > 0 ? 2 : -1);
|
|
176
|
+
} }
|
|
177
|
+
function DataRequirementsViewerComponent_Conditional_2_Conditional_14_For_6_Template(rf, ctx) { if (rf & 1) {
|
|
178
|
+
const _r2 = i0.ɵɵgetCurrentView();
|
|
179
|
+
i0.ɵɵelementStart(0, "div", 22)(1, "div", 23);
|
|
180
|
+
i0.ɵɵlistener("click", function DataRequirementsViewerComponent_Conditional_2_Conditional_14_For_6_Template_div_click_1_listener() { const entity_r3 = i0.ɵɵrestoreView(_r2).$implicit; const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.toggleEntity(entity_r3.name)); });
|
|
181
|
+
i0.ɵɵelementStart(2, "div", 24)(3, "div", 25);
|
|
182
|
+
i0.ɵɵelement(4, "i", 19);
|
|
183
|
+
i0.ɵɵelementEnd();
|
|
184
|
+
i0.ɵɵelementStart(5, "div", 26)(6, "h4", 27);
|
|
185
|
+
i0.ɵɵtext(7);
|
|
186
|
+
i0.ɵɵelementEnd();
|
|
187
|
+
i0.ɵɵtemplate(8, DataRequirementsViewerComponent_Conditional_2_Conditional_14_For_6_Conditional_8_Template, 2, 1, "p", 28);
|
|
188
|
+
i0.ɵɵelementEnd();
|
|
189
|
+
i0.ɵɵelementStart(9, "div", 29);
|
|
190
|
+
i0.ɵɵelement(10, "i", 5);
|
|
191
|
+
i0.ɵɵelementEnd()();
|
|
192
|
+
i0.ɵɵelementStart(11, "div", 30)(12, "div", 31);
|
|
193
|
+
i0.ɵɵrepeaterCreate(13, DataRequirementsViewerComponent_Conditional_2_Conditional_14_For_6_For_14_Template, 3, 4, "span", 32, i0.ɵɵrepeaterTrackByIdentity);
|
|
194
|
+
i0.ɵɵelementEnd();
|
|
195
|
+
i0.ɵɵelementStart(15, "span", 33);
|
|
196
|
+
i0.ɵɵtext(16);
|
|
197
|
+
i0.ɵɵelementEnd()()();
|
|
198
|
+
i0.ɵɵtemplate(17, DataRequirementsViewerComponent_Conditional_2_Conditional_14_For_6_Conditional_17_Template, 3, 2, "div", 34);
|
|
199
|
+
i0.ɵɵelementEnd();
|
|
200
|
+
} if (rf & 2) {
|
|
201
|
+
const entity_r3 = ctx.$implicit;
|
|
202
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
203
|
+
i0.ɵɵclassProp("expanded", ctx_r0.isEntityExpanded(entity_r3.name));
|
|
204
|
+
i0.ɵɵadvance(7);
|
|
205
|
+
i0.ɵɵtextInterpolate(entity_r3.name);
|
|
206
|
+
i0.ɵɵadvance();
|
|
207
|
+
i0.ɵɵconditional(entity_r3.description ? 8 : -1);
|
|
208
|
+
i0.ɵɵadvance(2);
|
|
209
|
+
i0.ɵɵproperty("ngClass", ctx_r0.isEntityExpanded(entity_r3.name) ? "fa-chevron-up" : "fa-chevron-down");
|
|
210
|
+
i0.ɵɵadvance(3);
|
|
211
|
+
i0.ɵɵrepeater(entity_r3.permissionLevelNeeded);
|
|
212
|
+
i0.ɵɵadvance(3);
|
|
213
|
+
i0.ɵɵtextInterpolate1("", (entity_r3.fieldMetadata == null ? null : entity_r3.fieldMetadata.length) || 0, " fields");
|
|
214
|
+
i0.ɵɵadvance();
|
|
215
|
+
i0.ɵɵconditional(ctx_r0.isEntityExpanded(entity_r3.name) ? 17 : -1);
|
|
216
|
+
} }
|
|
217
|
+
function DataRequirementsViewerComponent_Conditional_2_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
218
|
+
i0.ɵɵelementStart(0, "div", 12)(1, "h3", 18);
|
|
219
|
+
i0.ɵɵelement(2, "i", 19);
|
|
220
|
+
i0.ɵɵtext(3, " Entities ");
|
|
221
|
+
i0.ɵɵelementEnd();
|
|
222
|
+
i0.ɵɵelementStart(4, "div", 20);
|
|
223
|
+
i0.ɵɵrepeaterCreate(5, DataRequirementsViewerComponent_Conditional_2_Conditional_14_For_6_Template, 18, 7, "div", 21, _forTrack0);
|
|
224
|
+
i0.ɵɵelementEnd()();
|
|
225
|
+
} if (rf & 2) {
|
|
226
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
227
|
+
i0.ɵɵadvance(5);
|
|
228
|
+
i0.ɵɵrepeater(ctx_r0.entities);
|
|
229
|
+
} }
|
|
230
|
+
function DataRequirementsViewerComponent_Conditional_2_Conditional_15_For_6_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
231
|
+
i0.ɵɵelementStart(0, "p", 28);
|
|
232
|
+
i0.ɵɵtext(1);
|
|
233
|
+
i0.ɵɵelementEnd();
|
|
234
|
+
} if (rf & 2) {
|
|
235
|
+
const query_r8 = i0.ɵɵnextContext().$implicit;
|
|
236
|
+
i0.ɵɵadvance();
|
|
237
|
+
i0.ɵɵtextInterpolate(query_r8.description);
|
|
238
|
+
} }
|
|
239
|
+
function DataRequirementsViewerComponent_Conditional_2_Conditional_15_For_6_Conditional_14_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
240
|
+
i0.ɵɵelementStart(0, "span", 57);
|
|
241
|
+
i0.ɵɵelement(1, "i", 19);
|
|
242
|
+
i0.ɵɵtext(2);
|
|
243
|
+
i0.ɵɵelementEnd();
|
|
244
|
+
} if (rf & 2) {
|
|
245
|
+
const entityName_r9 = ctx.$implicit;
|
|
246
|
+
i0.ɵɵadvance(2);
|
|
247
|
+
i0.ɵɵtextInterpolate1(" ", entityName_r9, " ");
|
|
248
|
+
} }
|
|
249
|
+
function DataRequirementsViewerComponent_Conditional_2_Conditional_15_For_6_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
250
|
+
i0.ɵɵelementStart(0, "div", 56);
|
|
251
|
+
i0.ɵɵrepeaterCreate(1, DataRequirementsViewerComponent_Conditional_2_Conditional_15_For_6_Conditional_14_For_2_Template, 3, 1, "span", 57, i0.ɵɵrepeaterTrackByIdentity);
|
|
252
|
+
i0.ɵɵelementEnd();
|
|
253
|
+
} if (rf & 2) {
|
|
254
|
+
const query_r8 = i0.ɵɵnextContext().$implicit;
|
|
255
|
+
i0.ɵɵadvance();
|
|
256
|
+
i0.ɵɵrepeater(query_r8.entityNames);
|
|
257
|
+
} }
|
|
258
|
+
function DataRequirementsViewerComponent_Conditional_2_Conditional_15_For_6_Conditional_17_Conditional_1_For_6_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
259
|
+
i0.ɵɵelementStart(0, "span", 66);
|
|
260
|
+
i0.ɵɵtext(1, "Required");
|
|
261
|
+
i0.ɵɵelementEnd();
|
|
262
|
+
} }
|
|
263
|
+
function DataRequirementsViewerComponent_Conditional_2_Conditional_15_For_6_Conditional_17_Conditional_1_For_6_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
264
|
+
i0.ɵɵelementStart(0, "span", 67);
|
|
265
|
+
i0.ɵɵtext(1, "Optional");
|
|
266
|
+
i0.ɵɵelementEnd();
|
|
267
|
+
} }
|
|
268
|
+
function DataRequirementsViewerComponent_Conditional_2_Conditional_15_For_6_Conditional_17_Conditional_1_For_6_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
269
|
+
i0.ɵɵelementStart(0, "code", 68);
|
|
270
|
+
i0.ɵɵtext(1);
|
|
271
|
+
i0.ɵɵelementEnd();
|
|
272
|
+
} if (rf & 2) {
|
|
273
|
+
const param_r10 = i0.ɵɵnextContext().$implicit;
|
|
274
|
+
i0.ɵɵadvance();
|
|
275
|
+
i0.ɵɵtextInterpolate(param_r10.type);
|
|
276
|
+
} }
|
|
277
|
+
function DataRequirementsViewerComponent_Conditional_2_Conditional_15_For_6_Conditional_17_Conditional_1_For_6_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
278
|
+
i0.ɵɵelementStart(0, "p", 69);
|
|
279
|
+
i0.ɵɵtext(1);
|
|
280
|
+
i0.ɵɵelementEnd();
|
|
281
|
+
} if (rf & 2) {
|
|
282
|
+
const param_r10 = i0.ɵɵnextContext().$implicit;
|
|
283
|
+
i0.ɵɵadvance();
|
|
284
|
+
i0.ɵɵtextInterpolate(param_r10.description);
|
|
285
|
+
} }
|
|
286
|
+
function DataRequirementsViewerComponent_Conditional_2_Conditional_15_For_6_Conditional_17_Conditional_1_For_6_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
287
|
+
i0.ɵɵelementStart(0, "div", 70)(1, "span", 71);
|
|
288
|
+
i0.ɵɵtext(2, "Sample:");
|
|
289
|
+
i0.ɵɵelementEnd();
|
|
290
|
+
i0.ɵɵelementStart(3, "code");
|
|
291
|
+
i0.ɵɵtext(4);
|
|
292
|
+
i0.ɵɵelementEnd()();
|
|
293
|
+
} if (rf & 2) {
|
|
294
|
+
const param_r10 = i0.ɵɵnextContext().$implicit;
|
|
295
|
+
i0.ɵɵadvance(4);
|
|
296
|
+
i0.ɵɵtextInterpolate(param_r10.sampleValue || param_r10.testValue);
|
|
297
|
+
} }
|
|
298
|
+
function DataRequirementsViewerComponent_Conditional_2_Conditional_15_For_6_Conditional_17_Conditional_1_For_6_Template(rf, ctx) { if (rf & 1) {
|
|
299
|
+
i0.ɵɵelementStart(0, "div", 63)(1, "div", 64)(2, "span", 65);
|
|
300
|
+
i0.ɵɵtext(3);
|
|
301
|
+
i0.ɵɵelementEnd();
|
|
302
|
+
i0.ɵɵtemplate(4, DataRequirementsViewerComponent_Conditional_2_Conditional_15_For_6_Conditional_17_Conditional_1_For_6_Conditional_4_Template, 2, 0, "span", 66)(5, DataRequirementsViewerComponent_Conditional_2_Conditional_15_For_6_Conditional_17_Conditional_1_For_6_Conditional_5_Template, 2, 0, "span", 67)(6, DataRequirementsViewerComponent_Conditional_2_Conditional_15_For_6_Conditional_17_Conditional_1_For_6_Conditional_6_Template, 2, 1, "code", 68);
|
|
303
|
+
i0.ɵɵelementEnd();
|
|
304
|
+
i0.ɵɵtemplate(7, DataRequirementsViewerComponent_Conditional_2_Conditional_15_For_6_Conditional_17_Conditional_1_For_6_Conditional_7_Template, 2, 1, "p", 69)(8, DataRequirementsViewerComponent_Conditional_2_Conditional_15_For_6_Conditional_17_Conditional_1_For_6_Conditional_8_Template, 5, 1, "div", 70);
|
|
305
|
+
i0.ɵɵelementEnd();
|
|
306
|
+
} if (rf & 2) {
|
|
307
|
+
const param_r10 = ctx.$implicit;
|
|
308
|
+
i0.ɵɵadvance(3);
|
|
309
|
+
i0.ɵɵtextInterpolate(param_r10.name);
|
|
310
|
+
i0.ɵɵadvance();
|
|
311
|
+
i0.ɵɵconditional(param_r10.isRequired ? 4 : 5);
|
|
312
|
+
i0.ɵɵadvance(2);
|
|
313
|
+
i0.ɵɵconditional(param_r10.type ? 6 : -1);
|
|
314
|
+
i0.ɵɵadvance();
|
|
315
|
+
i0.ɵɵconditional(param_r10.description ? 7 : -1);
|
|
316
|
+
i0.ɵɵadvance();
|
|
317
|
+
i0.ɵɵconditional(param_r10.sampleValue || param_r10.testValue ? 8 : -1);
|
|
318
|
+
} }
|
|
319
|
+
function DataRequirementsViewerComponent_Conditional_2_Conditional_15_For_6_Conditional_17_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
320
|
+
i0.ɵɵelementStart(0, "div", 58)(1, "h5", 60);
|
|
321
|
+
i0.ɵɵelement(2, "i", 61);
|
|
322
|
+
i0.ɵɵtext(3, " Parameters ");
|
|
323
|
+
i0.ɵɵelementEnd();
|
|
324
|
+
i0.ɵɵelementStart(4, "div", 62);
|
|
325
|
+
i0.ɵɵrepeaterCreate(5, DataRequirementsViewerComponent_Conditional_2_Conditional_15_For_6_Conditional_17_Conditional_1_For_6_Template, 9, 5, "div", 63, _forTrack0);
|
|
326
|
+
i0.ɵɵelementEnd()();
|
|
327
|
+
} if (rf & 2) {
|
|
328
|
+
const query_r8 = i0.ɵɵnextContext(2).$implicit;
|
|
329
|
+
i0.ɵɵadvance(5);
|
|
330
|
+
i0.ɵɵrepeater(query_r8.parameters);
|
|
331
|
+
} }
|
|
332
|
+
function DataRequirementsViewerComponent_Conditional_2_Conditional_15_For_6_Conditional_17_Conditional_2_For_12_Template(rf, ctx) { if (rf & 1) {
|
|
333
|
+
i0.ɵɵelementStart(0, "div", 45)(1, "span", 41);
|
|
334
|
+
i0.ɵɵelement(2, "i", 5);
|
|
335
|
+
i0.ɵɵelementStart(3, "span", 46);
|
|
336
|
+
i0.ɵɵtext(4);
|
|
337
|
+
i0.ɵɵelementEnd()();
|
|
338
|
+
i0.ɵɵelementStart(5, "span", 42)(6, "code", 48);
|
|
339
|
+
i0.ɵɵtext(7);
|
|
340
|
+
i0.ɵɵelementEnd()();
|
|
341
|
+
i0.ɵɵelementStart(8, "span", 44);
|
|
342
|
+
i0.ɵɵtext(9);
|
|
343
|
+
i0.ɵɵelementEnd()();
|
|
344
|
+
} if (rf & 2) {
|
|
345
|
+
const field_r11 = ctx.$implicit;
|
|
346
|
+
const ctx_r0 = i0.ɵɵnextContext(6);
|
|
347
|
+
i0.ɵɵadvance(2);
|
|
348
|
+
i0.ɵɵstyleProp("color", ctx_r0.getFieldTypeColor(field_r11.type));
|
|
349
|
+
i0.ɵɵproperty("ngClass", ctx_r0.getFieldTypeIcon(field_r11.type));
|
|
350
|
+
i0.ɵɵadvance(2);
|
|
351
|
+
i0.ɵɵtextInterpolate(field_r11.name);
|
|
352
|
+
i0.ɵɵadvance(3);
|
|
353
|
+
i0.ɵɵtextInterpolate(ctx_r0.formatFieldType(field_r11.type));
|
|
354
|
+
i0.ɵɵadvance(2);
|
|
355
|
+
i0.ɵɵtextInterpolate1(" ", field_r11.description || "\u2014", " ");
|
|
356
|
+
} }
|
|
357
|
+
function DataRequirementsViewerComponent_Conditional_2_Conditional_15_For_6_Conditional_17_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
358
|
+
i0.ɵɵelementStart(0, "div", 37)(1, "h5", 38);
|
|
359
|
+
i0.ɵɵtext(2, "Output Fields");
|
|
360
|
+
i0.ɵɵelementEnd();
|
|
361
|
+
i0.ɵɵelementStart(3, "div", 39)(4, "div", 40)(5, "span", 41);
|
|
362
|
+
i0.ɵɵtext(6, "Name");
|
|
363
|
+
i0.ɵɵelementEnd();
|
|
364
|
+
i0.ɵɵelementStart(7, "span", 42);
|
|
365
|
+
i0.ɵɵtext(8, "Type");
|
|
366
|
+
i0.ɵɵelementEnd();
|
|
367
|
+
i0.ɵɵelementStart(9, "span", 44);
|
|
368
|
+
i0.ɵɵtext(10, "Description");
|
|
369
|
+
i0.ɵɵelementEnd()();
|
|
370
|
+
i0.ɵɵrepeaterCreate(11, DataRequirementsViewerComponent_Conditional_2_Conditional_15_For_6_Conditional_17_Conditional_2_For_12_Template, 10, 6, "div", 45, _forTrack0);
|
|
371
|
+
i0.ɵɵelementEnd()();
|
|
372
|
+
} if (rf & 2) {
|
|
373
|
+
const query_r8 = i0.ɵɵnextContext(2).$implicit;
|
|
374
|
+
i0.ɵɵadvance(11);
|
|
375
|
+
i0.ɵɵrepeater(query_r8.fields);
|
|
376
|
+
} }
|
|
377
|
+
function DataRequirementsViewerComponent_Conditional_2_Conditional_15_For_6_Conditional_17_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
378
|
+
i0.ɵɵelementStart(0, "div", 59)(1, "h5", 72);
|
|
379
|
+
i0.ɵɵelement(2, "i", 73);
|
|
380
|
+
i0.ɵɵtext(3, " Query SQL ");
|
|
381
|
+
i0.ɵɵelementEnd();
|
|
382
|
+
i0.ɵɵelementStart(4, "pre", 74);
|
|
383
|
+
i0.ɵɵtext(5);
|
|
384
|
+
i0.ɵɵelementEnd()();
|
|
385
|
+
} if (rf & 2) {
|
|
386
|
+
const query_r8 = i0.ɵɵnextContext(2).$implicit;
|
|
387
|
+
i0.ɵɵadvance(5);
|
|
388
|
+
i0.ɵɵtextInterpolate(query_r8.newQuerySQL);
|
|
389
|
+
} }
|
|
390
|
+
function DataRequirementsViewerComponent_Conditional_2_Conditional_15_For_6_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
391
|
+
i0.ɵɵelementStart(0, "div", 34);
|
|
392
|
+
i0.ɵɵtemplate(1, DataRequirementsViewerComponent_Conditional_2_Conditional_15_For_6_Conditional_17_Conditional_1_Template, 7, 0, "div", 58)(2, DataRequirementsViewerComponent_Conditional_2_Conditional_15_For_6_Conditional_17_Conditional_2_Template, 13, 0, "div", 37)(3, DataRequirementsViewerComponent_Conditional_2_Conditional_15_For_6_Conditional_17_Conditional_3_Template, 6, 1, "div", 59);
|
|
393
|
+
i0.ɵɵelementEnd();
|
|
394
|
+
} if (rf & 2) {
|
|
395
|
+
const query_r8 = i0.ɵɵnextContext().$implicit;
|
|
396
|
+
i0.ɵɵadvance();
|
|
397
|
+
i0.ɵɵconditional(query_r8.parameters && query_r8.parameters.length > 0 ? 1 : -1);
|
|
398
|
+
i0.ɵɵadvance();
|
|
399
|
+
i0.ɵɵconditional(query_r8.fields && query_r8.fields.length > 0 ? 2 : -1);
|
|
400
|
+
i0.ɵɵadvance();
|
|
401
|
+
i0.ɵɵconditional(query_r8.newQuerySQL ? 3 : -1);
|
|
402
|
+
} }
|
|
403
|
+
function DataRequirementsViewerComponent_Conditional_2_Conditional_15_For_6_Template(rf, ctx) { if (rf & 1) {
|
|
404
|
+
const _r7 = i0.ɵɵgetCurrentView();
|
|
405
|
+
i0.ɵɵelementStart(0, "div", 52)(1, "div", 23);
|
|
406
|
+
i0.ɵɵlistener("click", function DataRequirementsViewerComponent_Conditional_2_Conditional_15_For_6_Template_div_click_1_listener() { const query_r8 = i0.ɵɵrestoreView(_r7).$implicit; const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.toggleQuery(ctx_r0.getQueryKey(query_r8))); });
|
|
407
|
+
i0.ɵɵelementStart(2, "div", 24)(3, "div", 53);
|
|
408
|
+
i0.ɵɵelement(4, "i", 54);
|
|
409
|
+
i0.ɵɵelementEnd();
|
|
410
|
+
i0.ɵɵelementStart(5, "div", 26)(6, "h4", 27);
|
|
411
|
+
i0.ɵɵtext(7);
|
|
412
|
+
i0.ɵɵelementEnd();
|
|
413
|
+
i0.ɵɵelementStart(8, "p", 55);
|
|
414
|
+
i0.ɵɵtext(9);
|
|
415
|
+
i0.ɵɵelementEnd();
|
|
416
|
+
i0.ɵɵtemplate(10, DataRequirementsViewerComponent_Conditional_2_Conditional_15_For_6_Conditional_10_Template, 2, 1, "p", 28);
|
|
417
|
+
i0.ɵɵelementEnd();
|
|
418
|
+
i0.ɵɵelementStart(11, "div", 29);
|
|
419
|
+
i0.ɵɵelement(12, "i", 5);
|
|
420
|
+
i0.ɵɵelementEnd()();
|
|
421
|
+
i0.ɵɵelementStart(13, "div", 30);
|
|
422
|
+
i0.ɵɵtemplate(14, DataRequirementsViewerComponent_Conditional_2_Conditional_15_For_6_Conditional_14_Template, 3, 0, "div", 56);
|
|
423
|
+
i0.ɵɵelementStart(15, "span", 33);
|
|
424
|
+
i0.ɵɵtext(16);
|
|
425
|
+
i0.ɵɵelementEnd()()();
|
|
426
|
+
i0.ɵɵtemplate(17, DataRequirementsViewerComponent_Conditional_2_Conditional_15_For_6_Conditional_17_Template, 4, 3, "div", 34);
|
|
427
|
+
i0.ɵɵelementEnd();
|
|
428
|
+
} if (rf & 2) {
|
|
429
|
+
const query_r8 = ctx.$implicit;
|
|
430
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
431
|
+
i0.ɵɵclassProp("expanded", ctx_r0.isQueryExpanded(ctx_r0.getQueryKey(query_r8)));
|
|
432
|
+
i0.ɵɵadvance(7);
|
|
433
|
+
i0.ɵɵtextInterpolate(query_r8.name);
|
|
434
|
+
i0.ɵɵadvance(2);
|
|
435
|
+
i0.ɵɵtextInterpolate(query_r8.categoryPath);
|
|
436
|
+
i0.ɵɵadvance();
|
|
437
|
+
i0.ɵɵconditional(query_r8.description ? 10 : -1);
|
|
438
|
+
i0.ɵɵadvance(2);
|
|
439
|
+
i0.ɵɵproperty("ngClass", ctx_r0.isQueryExpanded(ctx_r0.getQueryKey(query_r8)) ? "fa-chevron-up" : "fa-chevron-down");
|
|
440
|
+
i0.ɵɵadvance(2);
|
|
441
|
+
i0.ɵɵconditional(query_r8.entityNames && query_r8.entityNames.length > 0 ? 14 : -1);
|
|
442
|
+
i0.ɵɵadvance(2);
|
|
443
|
+
i0.ɵɵtextInterpolate1("", (query_r8.fields == null ? null : query_r8.fields.length) || 0, " fields");
|
|
444
|
+
i0.ɵɵadvance();
|
|
445
|
+
i0.ɵɵconditional(ctx_r0.isQueryExpanded(ctx_r0.getQueryKey(query_r8)) ? 17 : -1);
|
|
446
|
+
} }
|
|
447
|
+
function DataRequirementsViewerComponent_Conditional_2_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
448
|
+
i0.ɵɵelementStart(0, "div", 13)(1, "h3", 18);
|
|
449
|
+
i0.ɵɵelement(2, "i", 2);
|
|
450
|
+
i0.ɵɵtext(3, " Queries ");
|
|
451
|
+
i0.ɵɵelementEnd();
|
|
452
|
+
i0.ɵɵelementStart(4, "div", 20);
|
|
453
|
+
i0.ɵɵrepeaterCreate(5, DataRequirementsViewerComponent_Conditional_2_Conditional_15_For_6_Template, 18, 9, "div", 51, _forTrack1, true);
|
|
454
|
+
i0.ɵɵelementEnd()();
|
|
455
|
+
} if (rf & 2) {
|
|
456
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
457
|
+
i0.ɵɵadvance(5);
|
|
458
|
+
i0.ɵɵrepeater(ctx_r0.queries);
|
|
459
|
+
} }
|
|
460
|
+
function DataRequirementsViewerComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
461
|
+
i0.ɵɵelementStart(0, "div", 3)(1, "div", 4);
|
|
462
|
+
i0.ɵɵelement(2, "i", 5);
|
|
463
|
+
i0.ɵɵelementStart(3, "span");
|
|
464
|
+
i0.ɵɵtext(4);
|
|
465
|
+
i0.ɵɵelementEnd()();
|
|
466
|
+
i0.ɵɵelementStart(5, "div", 6);
|
|
467
|
+
i0.ɵɵtemplate(6, DataRequirementsViewerComponent_Conditional_2_div_6_Template, 5, 2, "div", 7)(7, DataRequirementsViewerComponent_Conditional_2_div_7_Template, 5, 2, "div", 7);
|
|
468
|
+
i0.ɵɵelementStart(8, "div", 8)(9, "span", 9);
|
|
469
|
+
i0.ɵɵtext(10);
|
|
470
|
+
i0.ɵɵelementEnd();
|
|
471
|
+
i0.ɵɵelementStart(11, "span", 10);
|
|
472
|
+
i0.ɵɵtext(12);
|
|
473
|
+
i0.ɵɵelementEnd()()()();
|
|
474
|
+
i0.ɵɵtemplate(13, DataRequirementsViewerComponent_Conditional_2_Conditional_13_Template, 6, 5, "div", 11)(14, DataRequirementsViewerComponent_Conditional_2_Conditional_14_Template, 7, 0, "div", 12)(15, DataRequirementsViewerComponent_Conditional_2_Conditional_15_Template, 7, 0, "div", 13);
|
|
475
|
+
} if (rf & 2) {
|
|
476
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
477
|
+
i0.ɵɵadvance(2);
|
|
478
|
+
i0.ɵɵproperty("ngClass", ctx_r0.modeIcon);
|
|
479
|
+
i0.ɵɵadvance(2);
|
|
480
|
+
i0.ɵɵtextInterpolate(ctx_r0.modeLabel);
|
|
481
|
+
i0.ɵɵadvance(2);
|
|
482
|
+
i0.ɵɵproperty("ngIf", ctx_r0.entities.length > 0);
|
|
483
|
+
i0.ɵɵadvance();
|
|
484
|
+
i0.ɵɵproperty("ngIf", ctx_r0.queries.length > 0);
|
|
485
|
+
i0.ɵɵadvance(3);
|
|
486
|
+
i0.ɵɵtextInterpolate(ctx_r0.totalFieldCount);
|
|
487
|
+
i0.ɵɵadvance(2);
|
|
488
|
+
i0.ɵɵtextInterpolate(ctx_r0.totalFieldCount === 1 ? "Field" : "Fields");
|
|
489
|
+
i0.ɵɵadvance();
|
|
490
|
+
i0.ɵɵconditional(ctx_r0.description ? 13 : -1);
|
|
491
|
+
i0.ɵɵadvance();
|
|
492
|
+
i0.ɵɵconditional(ctx_r0.entities.length > 0 ? 14 : -1);
|
|
493
|
+
i0.ɵɵadvance();
|
|
494
|
+
i0.ɵɵconditional(ctx_r0.queries.length > 0 ? 15 : -1);
|
|
495
|
+
} }
|
|
496
|
+
/**
|
|
497
|
+
* Beautiful viewer component for ComponentDataRequirements.
|
|
498
|
+
* Displays entities, queries, and fields in an organized, visually appealing layout.
|
|
499
|
+
*/
|
|
500
|
+
export class DataRequirementsViewerComponent {
|
|
501
|
+
dataRequirements = null;
|
|
502
|
+
// Track expanded state for entities and queries
|
|
503
|
+
expandedEntities = new Set();
|
|
504
|
+
expandedQueries = new Set();
|
|
505
|
+
get hasData() {
|
|
506
|
+
return !!this.dataRequirements;
|
|
507
|
+
}
|
|
508
|
+
get mode() {
|
|
509
|
+
return this.dataRequirements?.mode || 'views';
|
|
510
|
+
}
|
|
511
|
+
get modeLabel() {
|
|
512
|
+
switch (this.mode) {
|
|
513
|
+
case 'views': return 'Entity Views';
|
|
514
|
+
case 'queries': return 'Stored Queries';
|
|
515
|
+
case 'hybrid': return 'Hybrid (Views + Queries)';
|
|
516
|
+
default: return this.mode;
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
get modeIcon() {
|
|
520
|
+
switch (this.mode) {
|
|
521
|
+
case 'views': return 'fa-table';
|
|
522
|
+
case 'queries': return 'fa-database';
|
|
523
|
+
case 'hybrid': return 'fa-layer-group';
|
|
524
|
+
default: return 'fa-database';
|
|
525
|
+
}
|
|
526
|
+
}
|
|
527
|
+
get entities() {
|
|
528
|
+
return this.dataRequirements?.entities || [];
|
|
529
|
+
}
|
|
530
|
+
get queries() {
|
|
531
|
+
return this.dataRequirements?.queries || [];
|
|
532
|
+
}
|
|
533
|
+
get description() {
|
|
534
|
+
return this.dataRequirements?.description || '';
|
|
535
|
+
}
|
|
536
|
+
get totalFieldCount() {
|
|
537
|
+
let count = 0;
|
|
538
|
+
for (const entity of this.entities) {
|
|
539
|
+
count += entity.fieldMetadata?.length || 0;
|
|
540
|
+
}
|
|
541
|
+
for (const query of this.queries) {
|
|
542
|
+
count += query.fields?.length || 0;
|
|
543
|
+
}
|
|
544
|
+
return count;
|
|
545
|
+
}
|
|
546
|
+
toggleEntity(entityName) {
|
|
547
|
+
if (this.expandedEntities.has(entityName)) {
|
|
548
|
+
this.expandedEntities.delete(entityName);
|
|
549
|
+
}
|
|
550
|
+
else {
|
|
551
|
+
this.expandedEntities.add(entityName);
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
toggleQuery(queryKey) {
|
|
555
|
+
if (this.expandedQueries.has(queryKey)) {
|
|
556
|
+
this.expandedQueries.delete(queryKey);
|
|
557
|
+
}
|
|
558
|
+
else {
|
|
559
|
+
this.expandedQueries.add(queryKey);
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
isEntityExpanded(entityName) {
|
|
563
|
+
return this.expandedEntities.has(entityName);
|
|
564
|
+
}
|
|
565
|
+
isQueryExpanded(queryKey) {
|
|
566
|
+
return this.expandedQueries.has(queryKey);
|
|
567
|
+
}
|
|
568
|
+
getQueryKey(query) {
|
|
569
|
+
return `${query.categoryPath}/${query.name}`;
|
|
570
|
+
}
|
|
571
|
+
getPermissionIcon(permission) {
|
|
572
|
+
switch (permission) {
|
|
573
|
+
case 'read': return 'fa-eye';
|
|
574
|
+
case 'create': return 'fa-plus';
|
|
575
|
+
case 'update': return 'fa-pen';
|
|
576
|
+
case 'delete': return 'fa-trash';
|
|
577
|
+
default: return 'fa-question';
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
getPermissionColor(permission) {
|
|
581
|
+
switch (permission) {
|
|
582
|
+
case 'read': return '#2196F3';
|
|
583
|
+
case 'create': return '#4CAF50';
|
|
584
|
+
case 'update': return '#FF9800';
|
|
585
|
+
case 'delete': return '#f44336';
|
|
586
|
+
default: return '#9E9E9E';
|
|
587
|
+
}
|
|
588
|
+
}
|
|
589
|
+
getFieldTypeIcon(type) {
|
|
590
|
+
const lowerType = (type || '').toLowerCase();
|
|
591
|
+
if (lowerType.includes('int') || lowerType.includes('decimal') || lowerType.includes('float') || lowerType.includes('numeric') || lowerType.includes('money')) {
|
|
592
|
+
return 'fa-hashtag';
|
|
593
|
+
}
|
|
594
|
+
if (lowerType.includes('date') || lowerType.includes('time')) {
|
|
595
|
+
return 'fa-calendar';
|
|
596
|
+
}
|
|
597
|
+
if (lowerType.includes('bit') || lowerType.includes('bool')) {
|
|
598
|
+
return 'fa-toggle-on';
|
|
599
|
+
}
|
|
600
|
+
if (lowerType.includes('uniqueidentifier') || lowerType.includes('guid')) {
|
|
601
|
+
return 'fa-fingerprint';
|
|
602
|
+
}
|
|
603
|
+
if (lowerType.includes('text') || lowerType.includes('varchar') || lowerType.includes('char') || lowerType.includes('nvarchar')) {
|
|
604
|
+
return 'fa-font';
|
|
605
|
+
}
|
|
606
|
+
if (lowerType.includes('binary') || lowerType.includes('image') || lowerType.includes('varbinary')) {
|
|
607
|
+
return 'fa-file-image';
|
|
608
|
+
}
|
|
609
|
+
return 'fa-circle';
|
|
610
|
+
}
|
|
611
|
+
getFieldTypeColor(type) {
|
|
612
|
+
const lowerType = (type || '').toLowerCase();
|
|
613
|
+
if (lowerType.includes('int') || lowerType.includes('decimal') || lowerType.includes('float') || lowerType.includes('numeric') || lowerType.includes('money')) {
|
|
614
|
+
return '#9C27B0';
|
|
615
|
+
}
|
|
616
|
+
if (lowerType.includes('date') || lowerType.includes('time')) {
|
|
617
|
+
return '#FF5722';
|
|
618
|
+
}
|
|
619
|
+
if (lowerType.includes('bit') || lowerType.includes('bool')) {
|
|
620
|
+
return '#009688';
|
|
621
|
+
}
|
|
622
|
+
if (lowerType.includes('uniqueidentifier') || lowerType.includes('guid')) {
|
|
623
|
+
return '#607D8B';
|
|
624
|
+
}
|
|
625
|
+
if (lowerType.includes('text') || lowerType.includes('varchar') || lowerType.includes('char') || lowerType.includes('nvarchar')) {
|
|
626
|
+
return '#2196F3';
|
|
627
|
+
}
|
|
628
|
+
return '#9E9E9E';
|
|
629
|
+
}
|
|
630
|
+
formatFieldType(type) {
|
|
631
|
+
return type || 'unknown';
|
|
632
|
+
}
|
|
633
|
+
getFieldUsageTags(field, entity) {
|
|
634
|
+
const tags = [];
|
|
635
|
+
if (field.isPrimaryKey) {
|
|
636
|
+
tags.push('PK');
|
|
637
|
+
}
|
|
638
|
+
if (entity.displayFields?.includes(field.name)) {
|
|
639
|
+
tags.push('Display');
|
|
640
|
+
}
|
|
641
|
+
if (entity.filterFields?.includes(field.name)) {
|
|
642
|
+
tags.push('Filter');
|
|
643
|
+
}
|
|
644
|
+
if (entity.sortFields?.includes(field.name)) {
|
|
645
|
+
tags.push('Sort');
|
|
646
|
+
}
|
|
647
|
+
return tags;
|
|
648
|
+
}
|
|
649
|
+
getTagColor(tag) {
|
|
650
|
+
switch (tag) {
|
|
651
|
+
case 'PK': return '#E91E63';
|
|
652
|
+
case 'Display': return '#2196F3';
|
|
653
|
+
case 'Filter': return '#FF9800';
|
|
654
|
+
case 'Sort': return '#9C27B0';
|
|
655
|
+
default: return '#9E9E9E';
|
|
656
|
+
}
|
|
657
|
+
}
|
|
658
|
+
static ɵfac = function DataRequirementsViewerComponent_Factory(t) { return new (t || DataRequirementsViewerComponent)(); };
|
|
659
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: DataRequirementsViewerComponent, selectors: [["mj-data-requirements-viewer"]], inputs: { dataRequirements: "dataRequirements" }, decls: 3, vars: 1, consts: [[1, "data-requirements-viewer"], [1, "empty-state"], [1, "fas", "fa-database"], [1, "summary-header"], [1, "mode-badge"], [1, "fas", 3, "ngClass"], [1, "stats"], ["class", "stat-item", 4, "ngIf"], [1, "stat-item"], [1, "stat-value"], [1, "stat-label"], [1, "description-section"], [1, "section", "entities-section"], [1, "section", "queries-section"], [1, "description-title"], [1, "fas", "fa-info-circle"], [1, "description-content"], [3, "data", "enableCollapsibleHeadings", "enableLineNumbers", "enableSmartypants", "enableHtml"], [1, "section-title"], [1, "fas", "fa-table"], [1, "cards-container"], [1, "data-card", "entity-card", 3, "expanded"], [1, "data-card", "entity-card"], [1, "card-header", 3, "click"], [1, "card-title-row"], [1, "card-icon"], [1, "card-title-info"], [1, "card-title"], [1, "card-description"], [1, "expand-icon"], [1, "card-meta"], [1, "permissions-row"], [1, "permission-badge", 3, "background-color"], [1, "field-count"], [1, "card-body"], [1, "permission-badge"], [1, "usage-context"], [1, "fields-section"], [1, "fields-title"], [1, "fields-table"], [1, "fields-header"], [1, "field-col", "name-col"], [1, "field-col", "type-col"], [1, "field-col", "tags-col"], [1, "field-col", "desc-col"], [1, "field-row"], [1, "field-name"], ["title", "Required", 1, "required-indicator"], [1, "field-type"], [1, "usage-tag", 3, "background-color"], [1, "usage-tag"], [1, "data-card", "query-card", 3, "expanded"], [1, "data-card", "query-card"], [1, "card-icon", "query-icon"], [1, "fas", "fa-code"], [1, "card-path"], [1, "entity-badges"], [1, "entity-badge"], [1, "parameters-section"], [1, "sql-section"], [1, "parameters-title"], [1, "fas", "fa-sliders-h"], [1, "parameters-list"], [1, "parameter-item"], [1, "param-header"], [1, "param-name"], [1, "required-badge"], [1, "optional-badge"], [1, "param-type"], [1, "param-description"], [1, "param-sample"], [1, "sample-label"], [1, "sql-title"], [1, "fas", "fa-terminal"], [1, "sql-code"]], template: function DataRequirementsViewerComponent_Template(rf, ctx) { if (rf & 1) {
|
|
660
|
+
i0.ɵɵelementStart(0, "div", 0);
|
|
661
|
+
i0.ɵɵtemplate(1, DataRequirementsViewerComponent_Conditional_1_Template, 6, 0, "div", 1)(2, DataRequirementsViewerComponent_Conditional_2_Template, 16, 9);
|
|
662
|
+
i0.ɵɵelementEnd();
|
|
663
|
+
} if (rf & 2) {
|
|
664
|
+
i0.ɵɵadvance();
|
|
665
|
+
i0.ɵɵconditional(!ctx.hasData ? 1 : 2);
|
|
666
|
+
} }, dependencies: [i1.NgClass, i1.NgIf, i2.MarkdownComponent], styles: [".data-requirements-viewer[_ngcontent-%COMP%] {\n padding: 0;\n height: 100%;\n overflow-y: auto;\n background: #fafbfc;\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 20px;\n text-align: center;\n color: #6c757d;\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 48px;\n margin-bottom: 16px;\n color: #dee2e6;\n}\n\n.empty-state[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n font-size: 18px;\n font-weight: 600;\n color: #495057;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 14px;\n color: #6c757d;\n}\n\n\n\n.summary-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n background: linear-gradient(135deg, #033ba3 0%, #5cb6f6 100%);\n color: white;\n border-radius: 0;\n}\n\n.mode-badge[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 16px;\n font-weight: 600;\n}\n\n.mode-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 20px;\n opacity: 0.9;\n}\n\n.stats[_ngcontent-%COMP%] {\n display: flex;\n gap: 24px;\n}\n\n.stat-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 2px;\n}\n\n.stat-value[_ngcontent-%COMP%] {\n font-size: 24px;\n font-weight: 700;\n line-height: 1;\n}\n\n.stat-label[_ngcontent-%COMP%] {\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n opacity: 0.85;\n}\n\n\n\n.description-section[_ngcontent-%COMP%] {\n padding: 20px;\n background: white;\n border-bottom: 1px solid #e9ecef;\n}\n\n.description-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 0 0 12px 0;\n font-size: 14px;\n font-weight: 600;\n color: #495057;\n}\n\n.description-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #5B4FE9;\n}\n\n.description-content[_ngcontent-%COMP%] {\n font-size: 14px;\n line-height: 1.6;\n color: #495057;\n}\n\n.description-content[_ngcontent-%COMP%] p {\n margin: 0 0 12px 0;\n}\n\n.description-content[_ngcontent-%COMP%] p:last-child {\n margin-bottom: 0;\n}\n\n.description-content[_ngcontent-%COMP%] pre {\n background: #f8f9fa;\n padding: 12px;\n border-radius: 6px;\n overflow-x: auto;\n}\n\n.description-content[_ngcontent-%COMP%] code {\n background: #f1f3f4;\n padding: 2px 6px;\n border-radius: 4px;\n font-size: 13px;\n}\n\n\n\n.section[_ngcontent-%COMP%] {\n padding: 20px;\n}\n\n.section-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n margin: 0 0 16px 0;\n font-size: 16px;\n font-weight: 600;\n color: #343a40;\n}\n\n.section-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #5B4FE9;\n font-size: 18px;\n}\n\n\n\n.cards-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n\n\n.data-card[_ngcontent-%COMP%] {\n background: white;\n border-radius: 8px;\n border: 1px solid #e9ecef;\n overflow: hidden;\n transition: box-shadow 0.2s ease, border-color 0.2s ease;\n}\n\n.data-card[_ngcontent-%COMP%]:hover {\n border-color: #dee2e6;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n}\n\n.data-card.expanded[_ngcontent-%COMP%] {\n border-color: #5B4FE9;\n box-shadow: 0 4px 12px rgba(91, 79, 233, 0.12);\n}\n\n\n\n.card-header[_ngcontent-%COMP%] {\n padding: 16px;\n cursor: pointer;\n user-select: none;\n}\n\n.card-title-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n}\n\n.card-icon[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 40px;\n height: 40px;\n border-radius: 8px;\n background: linear-gradient(135deg, #E8F5E9 0%, #C8E6C9 100%);\n color: #4CAF50;\n font-size: 18px;\n flex-shrink: 0;\n}\n\n.card-icon.query-icon[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #E3F2FD 0%, #BBDEFB 100%);\n color: #2196F3;\n}\n\n.card-title-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.card-title[_ngcontent-%COMP%] {\n margin: 0 0 4px 0;\n font-size: 15px;\n font-weight: 600;\n color: #212529;\n}\n\n.card-path[_ngcontent-%COMP%] {\n margin: 0 0 4px 0;\n font-size: 12px;\n color: #6c757d;\n font-family: 'SF Mono', Monaco, 'Cascadia Code', monospace;\n}\n\n.card-description[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 13px;\n color: #6c757d;\n line-height: 1.4;\n}\n\n.expand-icon[_ngcontent-%COMP%] {\n color: #adb5bd;\n font-size: 12px;\n padding: 4px;\n}\n\n.data-card.expanded[_ngcontent-%COMP%] .expand-icon[_ngcontent-%COMP%] {\n color: #5B4FE9;\n}\n\n\n\n.card-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-top: 12px;\n padding-top: 12px;\n border-top: 1px solid #f1f3f4;\n}\n\n.permissions-row[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n}\n\n.permission-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n border-radius: 4px;\n font-size: 11px;\n font-weight: 500;\n color: white;\n text-transform: capitalize;\n}\n\n.permission-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n.field-count[_ngcontent-%COMP%] {\n font-size: 12px;\n color: #6c757d;\n}\n\n.entity-badges[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n}\n\n.entity-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n border-radius: 4px;\n font-size: 11px;\n background: #f1f3f4;\n color: #495057;\n}\n\n.entity-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n color: #6c757d;\n}\n\n\n\n.card-body[_ngcontent-%COMP%] {\n padding: 0 16px 16px 16px;\n border-top: 1px solid #f1f3f4;\n}\n\n\n\n.usage-context[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n padding: 12px;\n margin-top: 12px;\n background: #FFF8E1;\n border-radius: 6px;\n font-size: 13px;\n color: #6d4c00;\n}\n\n.usage-context[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #FFA000;\n margin-top: 2px;\n}\n\n\n\n.fields-section[_ngcontent-%COMP%] {\n margin-top: 16px;\n}\n\n.fields-title[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 13px;\n font-weight: 600;\n color: #495057;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n\n\n.fields-table[_ngcontent-%COMP%] {\n border: 1px solid #e9ecef;\n border-radius: 6px;\n overflow: hidden;\n}\n\n.fields-header[_ngcontent-%COMP%] {\n display: flex;\n padding: 10px 12px;\n background: #f8f9fa;\n border-bottom: 1px solid #e9ecef;\n font-size: 11px;\n font-weight: 600;\n color: #6c757d;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.field-row[_ngcontent-%COMP%] {\n display: flex;\n padding: 10px 12px;\n border-bottom: 1px solid #f1f3f4;\n font-size: 13px;\n align-items: center;\n}\n\n.field-row[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.field-row[_ngcontent-%COMP%]:hover {\n background: #fafbfc;\n}\n\n.field-col[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.name-col[_ngcontent-%COMP%] {\n flex: 0 0 200px;\n min-width: 0;\n}\n\n.type-col[_ngcontent-%COMP%] {\n flex: 0 0 120px;\n}\n\n.tags-col[_ngcontent-%COMP%] {\n flex: 0 0 160px;\n flex-wrap: wrap;\n gap: 4px;\n}\n\n.desc-col[_ngcontent-%COMP%] {\n flex: 1;\n color: #6c757d;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.field-name[_ngcontent-%COMP%] {\n font-weight: 500;\n color: #212529;\n}\n\n.required-indicator[_ngcontent-%COMP%] {\n color: #dc3545;\n font-weight: bold;\n}\n\n.field-type[_ngcontent-%COMP%] {\n padding: 2px 6px;\n background: #f1f3f4;\n border-radius: 4px;\n font-size: 11px;\n color: #495057;\n font-family: 'SF Mono', Monaco, 'Cascadia Code', monospace;\n}\n\n.usage-tag[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 2px 6px;\n border-radius: 3px;\n font-size: 10px;\n font-weight: 600;\n color: white;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n\n\n.parameters-section[_ngcontent-%COMP%] {\n margin-top: 16px;\n}\n\n.parameters-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 0 0 12px 0;\n font-size: 13px;\n font-weight: 600;\n color: #495057;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.parameters-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #5B4FE9;\n}\n\n.parameters-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.parameter-item[_ngcontent-%COMP%] {\n padding: 12px;\n background: #f8f9fa;\n border-radius: 6px;\n border-left: 3px solid #5B4FE9;\n}\n\n.param-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n.param-name[_ngcontent-%COMP%] {\n font-weight: 600;\n color: #212529;\n font-size: 14px;\n}\n\n.required-badge[_ngcontent-%COMP%] {\n padding: 2px 6px;\n border-radius: 3px;\n font-size: 10px;\n font-weight: 600;\n background: #dc3545;\n color: white;\n text-transform: uppercase;\n}\n\n.optional-badge[_ngcontent-%COMP%] {\n padding: 2px 6px;\n border-radius: 3px;\n font-size: 10px;\n font-weight: 600;\n background: #6c757d;\n color: white;\n text-transform: uppercase;\n}\n\n.param-type[_ngcontent-%COMP%] {\n padding: 2px 6px;\n background: #e9ecef;\n border-radius: 4px;\n font-size: 11px;\n color: #495057;\n font-family: 'SF Mono', Monaco, 'Cascadia Code', monospace;\n}\n\n.param-description[_ngcontent-%COMP%] {\n margin: 8px 0 0 0;\n font-size: 13px;\n color: #495057;\n line-height: 1.4;\n}\n\n.param-sample[_ngcontent-%COMP%] {\n margin-top: 8px;\n font-size: 12px;\n}\n\n.sample-label[_ngcontent-%COMP%] {\n color: #6c757d;\n margin-right: 4px;\n}\n\n.param-sample[_ngcontent-%COMP%] code[_ngcontent-%COMP%] {\n padding: 2px 6px;\n background: white;\n border: 1px solid #e9ecef;\n border-radius: 4px;\n font-family: 'SF Mono', Monaco, 'Cascadia Code', monospace;\n color: #e83e8c;\n}\n\n\n\n.sql-section[_ngcontent-%COMP%] {\n margin-top: 16px;\n}\n\n.sql-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 0 0 12px 0;\n font-size: 13px;\n font-weight: 600;\n color: #495057;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.sql-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #5B4FE9;\n}\n\n.sql-code[_ngcontent-%COMP%] {\n margin: 0;\n padding: 16px;\n background: #1e1e1e;\n border-radius: 6px;\n font-size: 12px;\n line-height: 1.5;\n color: #d4d4d4;\n font-family: 'SF Mono', Monaco, 'Cascadia Code', monospace;\n overflow-x: auto;\n white-space: pre-wrap;\n word-break: break-word;\n}\n\n\n\n@media (max-width: 768px) {\n .summary-header[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 16px;\n align-items: flex-start;\n }\n\n .stats[_ngcontent-%COMP%] {\n width: 100%;\n justify-content: space-around;\n }\n\n .name-col[_ngcontent-%COMP%] {\n flex: 0 0 140px;\n }\n\n .type-col[_ngcontent-%COMP%] {\n flex: 0 0 90px;\n }\n\n .tags-col[_ngcontent-%COMP%] {\n flex: 0 0 120px;\n }\n\n .card-meta[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 8px;\n align-items: flex-start;\n }\n}"] });
|
|
667
|
+
}
|
|
668
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DataRequirementsViewerComponent, [{
|
|
669
|
+
type: Component,
|
|
670
|
+
args: [{ selector: 'mj-data-requirements-viewer', template: "<div class=\"data-requirements-viewer\">\n @if (!hasData) {\n <div class=\"empty-state\">\n <i class=\"fas fa-database\"></i>\n <h3>No Data Requirements</h3>\n <p>This component doesn't have any data requirements defined.</p>\n </div>\n } @else {\n <!-- Header Summary -->\n <div class=\"summary-header\">\n <div class=\"mode-badge\">\n <i class=\"fas\" [ngClass]=\"modeIcon\"></i>\n <span>{{ modeLabel }}</span>\n </div>\n <div class=\"stats\">\n <div class=\"stat-item\" *ngIf=\"entities.length > 0\">\n <span class=\"stat-value\">{{ entities.length }}</span>\n <span class=\"stat-label\">{{ entities.length === 1 ? 'Entity' : 'Entities' }}</span>\n </div>\n <div class=\"stat-item\" *ngIf=\"queries.length > 0\">\n <span class=\"stat-value\">{{ queries.length }}</span>\n <span class=\"stat-label\">{{ queries.length === 1 ? 'Query' : 'Queries' }}</span>\n </div>\n <div class=\"stat-item\">\n <span class=\"stat-value\">{{ totalFieldCount }}</span>\n <span class=\"stat-label\">{{ totalFieldCount === 1 ? 'Field' : 'Fields' }}</span>\n </div>\n </div>\n </div>\n\n <!-- Description / Overview (supports markdown including mermaid diagrams) -->\n @if (description) {\n <div class=\"description-section\">\n <h4 class=\"description-title\">\n <i class=\"fas fa-info-circle\"></i>\n Overview\n </h4>\n <div class=\"description-content\">\n <mj-markdown [data]=\"description\"\n [enableCollapsibleHeadings]=\"false\"\n [enableLineNumbers]=\"false\"\n [enableSmartypants]=\"true\"\n [enableHtml]=\"true\"></mj-markdown>\n </div>\n </div>\n }\n\n <!-- Entities Section -->\n @if (entities.length > 0) {\n <div class=\"section entities-section\">\n <h3 class=\"section-title\">\n <i class=\"fas fa-table\"></i>\n Entities\n </h3>\n <div class=\"cards-container\">\n @for (entity of entities; track entity.name) {\n <div class=\"data-card entity-card\" [class.expanded]=\"isEntityExpanded(entity.name)\">\n <div class=\"card-header\" (click)=\"toggleEntity(entity.name)\">\n <div class=\"card-title-row\">\n <div class=\"card-icon\">\n <i class=\"fas fa-table\"></i>\n </div>\n <div class=\"card-title-info\">\n <h4 class=\"card-title\">{{ entity.name }}</h4>\n @if (entity.description) {\n <p class=\"card-description\">{{ entity.description }}</p>\n }\n </div>\n <div class=\"expand-icon\">\n <i class=\"fas\" [ngClass]=\"isEntityExpanded(entity.name) ? 'fa-chevron-up' : 'fa-chevron-down'\"></i>\n </div>\n </div>\n <div class=\"card-meta\">\n <div class=\"permissions-row\">\n @for (perm of entity.permissionLevelNeeded; track perm) {\n <span class=\"permission-badge\" [style.background-color]=\"getPermissionColor(perm)\">\n <i class=\"fas\" [ngClass]=\"getPermissionIcon(perm)\"></i>\n {{ perm }}\n </span>\n }\n </div>\n <span class=\"field-count\">{{ entity.fieldMetadata?.length || 0 }} fields</span>\n </div>\n </div>\n\n @if (isEntityExpanded(entity.name)) {\n <div class=\"card-body\">\n @if (entity.usageContext) {\n <div class=\"usage-context\">\n <i class=\"fas fa-info-circle\"></i>\n <span>{{ entity.usageContext }}</span>\n </div>\n }\n\n <!-- Fields Table -->\n @if (entity.fieldMetadata && entity.fieldMetadata.length > 0) {\n <div class=\"fields-section\">\n <h5 class=\"fields-title\">Fields</h5>\n <div class=\"fields-table\">\n <div class=\"fields-header\">\n <span class=\"field-col name-col\">Name</span>\n <span class=\"field-col type-col\">Type</span>\n <span class=\"field-col tags-col\">Usage</span>\n <span class=\"field-col desc-col\">Description</span>\n </div>\n @for (field of entity.fieldMetadata; track field.name) {\n <div class=\"field-row\">\n <span class=\"field-col name-col\">\n <i class=\"fas\" [ngClass]=\"getFieldTypeIcon(field.type)\" [style.color]=\"getFieldTypeColor(field.type)\"></i>\n <span class=\"field-name\">{{ field.name }}</span>\n @if (!field.allowsNull) {\n <span class=\"required-indicator\" title=\"Required\">*</span>\n }\n </span>\n <span class=\"field-col type-col\">\n <code class=\"field-type\">{{ formatFieldType(field.type) }}</code>\n </span>\n <span class=\"field-col tags-col\">\n @for (tag of getFieldUsageTags(field, entity); track tag) {\n <span class=\"usage-tag\" [style.background-color]=\"getTagColor(tag)\">{{ tag }}</span>\n }\n </span>\n <span class=\"field-col desc-col\">\n {{ field.description || '\u2014' }}\n </span>\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Queries Section -->\n @if (queries.length > 0) {\n <div class=\"section queries-section\">\n <h3 class=\"section-title\">\n <i class=\"fas fa-database\"></i>\n Queries\n </h3>\n <div class=\"cards-container\">\n @for (query of queries; track getQueryKey(query)) {\n <div class=\"data-card query-card\" [class.expanded]=\"isQueryExpanded(getQueryKey(query))\">\n <div class=\"card-header\" (click)=\"toggleQuery(getQueryKey(query))\">\n <div class=\"card-title-row\">\n <div class=\"card-icon query-icon\">\n <i class=\"fas fa-code\"></i>\n </div>\n <div class=\"card-title-info\">\n <h4 class=\"card-title\">{{ query.name }}</h4>\n <p class=\"card-path\">{{ query.categoryPath }}</p>\n @if (query.description) {\n <p class=\"card-description\">{{ query.description }}</p>\n }\n </div>\n <div class=\"expand-icon\">\n <i class=\"fas\" [ngClass]=\"isQueryExpanded(getQueryKey(query)) ? 'fa-chevron-up' : 'fa-chevron-down'\"></i>\n </div>\n </div>\n <div class=\"card-meta\">\n @if (query.entityNames && query.entityNames.length > 0) {\n <div class=\"entity-badges\">\n @for (entityName of query.entityNames; track entityName) {\n <span class=\"entity-badge\">\n <i class=\"fas fa-table\"></i>\n {{ entityName }}\n </span>\n }\n </div>\n }\n <span class=\"field-count\">{{ query.fields?.length || 0 }} fields</span>\n </div>\n </div>\n\n @if (isQueryExpanded(getQueryKey(query))) {\n <div class=\"card-body\">\n <!-- Parameters -->\n @if (query.parameters && query.parameters.length > 0) {\n <div class=\"parameters-section\">\n <h5 class=\"parameters-title\">\n <i class=\"fas fa-sliders-h\"></i>\n Parameters\n </h5>\n <div class=\"parameters-list\">\n @for (param of query.parameters; track param.name) {\n <div class=\"parameter-item\">\n <div class=\"param-header\">\n <span class=\"param-name\">{{ param.name }}</span>\n @if (param.isRequired) {\n <span class=\"required-badge\">Required</span>\n } @else {\n <span class=\"optional-badge\">Optional</span>\n }\n @if (param.type) {\n <code class=\"param-type\">{{ param.type }}</code>\n }\n </div>\n @if (param.description) {\n <p class=\"param-description\">{{ param.description }}</p>\n }\n @if (param.sampleValue || param.testValue) {\n <div class=\"param-sample\">\n <span class=\"sample-label\">Sample:</span>\n <code>{{ param.sampleValue || param.testValue }}</code>\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Fields Table -->\n @if (query.fields && query.fields.length > 0) {\n <div class=\"fields-section\">\n <h5 class=\"fields-title\">Output Fields</h5>\n <div class=\"fields-table\">\n <div class=\"fields-header\">\n <span class=\"field-col name-col\">Name</span>\n <span class=\"field-col type-col\">Type</span>\n <span class=\"field-col desc-col\">Description</span>\n </div>\n @for (field of query.fields; track field.name) {\n <div class=\"field-row\">\n <span class=\"field-col name-col\">\n <i class=\"fas\" [ngClass]=\"getFieldTypeIcon(field.type)\" [style.color]=\"getFieldTypeColor(field.type)\"></i>\n <span class=\"field-name\">{{ field.name }}</span>\n </span>\n <span class=\"field-col type-col\">\n <code class=\"field-type\">{{ formatFieldType(field.type) }}</code>\n </span>\n <span class=\"field-col desc-col\">\n {{ field.description || '\u2014' }}\n </span>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- New Query SQL -->\n @if (query.newQuerySQL) {\n <div class=\"sql-section\">\n <h5 class=\"sql-title\">\n <i class=\"fas fa-terminal\"></i>\n Query SQL\n </h5>\n <pre class=\"sql-code\">{{ query.newQuerySQL }}</pre>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n }\n</div>\n", styles: [".data-requirements-viewer {\n padding: 0;\n height: 100%;\n overflow-y: auto;\n background: #fafbfc;\n}\n\n/* Empty State */\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 20px;\n text-align: center;\n color: #6c757d;\n}\n\n.empty-state i {\n font-size: 48px;\n margin-bottom: 16px;\n color: #dee2e6;\n}\n\n.empty-state h3 {\n margin: 0 0 8px 0;\n font-size: 18px;\n font-weight: 600;\n color: #495057;\n}\n\n.empty-state p {\n margin: 0;\n font-size: 14px;\n color: #6c757d;\n}\n\n/* Summary Header */\n.summary-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n background: linear-gradient(135deg, #033ba3 0%, #5cb6f6 100%);\n color: white;\n border-radius: 0;\n}\n\n.mode-badge {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 16px;\n font-weight: 600;\n}\n\n.mode-badge i {\n font-size: 20px;\n opacity: 0.9;\n}\n\n.stats {\n display: flex;\n gap: 24px;\n}\n\n.stat-item {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 2px;\n}\n\n.stat-value {\n font-size: 24px;\n font-weight: 700;\n line-height: 1;\n}\n\n.stat-label {\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n opacity: 0.85;\n}\n\n/* Description Section */\n.description-section {\n padding: 20px;\n background: white;\n border-bottom: 1px solid #e9ecef;\n}\n\n.description-title {\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 0 0 12px 0;\n font-size: 14px;\n font-weight: 600;\n color: #495057;\n}\n\n.description-title i {\n color: #5B4FE9;\n}\n\n.description-content {\n font-size: 14px;\n line-height: 1.6;\n color: #495057;\n}\n\n.description-content ::ng-deep p {\n margin: 0 0 12px 0;\n}\n\n.description-content ::ng-deep p:last-child {\n margin-bottom: 0;\n}\n\n.description-content ::ng-deep pre {\n background: #f8f9fa;\n padding: 12px;\n border-radius: 6px;\n overflow-x: auto;\n}\n\n.description-content ::ng-deep code {\n background: #f1f3f4;\n padding: 2px 6px;\n border-radius: 4px;\n font-size: 13px;\n}\n\n/* Section Styling */\n.section {\n padding: 20px;\n}\n\n.section-title {\n display: flex;\n align-items: center;\n gap: 10px;\n margin: 0 0 16px 0;\n font-size: 16px;\n font-weight: 600;\n color: #343a40;\n}\n\n.section-title i {\n color: #5B4FE9;\n font-size: 18px;\n}\n\n/* Cards Container */\n.cards-container {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n/* Data Card */\n.data-card {\n background: white;\n border-radius: 8px;\n border: 1px solid #e9ecef;\n overflow: hidden;\n transition: box-shadow 0.2s ease, border-color 0.2s ease;\n}\n\n.data-card:hover {\n border-color: #dee2e6;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n}\n\n.data-card.expanded {\n border-color: #5B4FE9;\n box-shadow: 0 4px 12px rgba(91, 79, 233, 0.12);\n}\n\n/* Card Header */\n.card-header {\n padding: 16px;\n cursor: pointer;\n user-select: none;\n}\n\n.card-title-row {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n}\n\n.card-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 40px;\n height: 40px;\n border-radius: 8px;\n background: linear-gradient(135deg, #E8F5E9 0%, #C8E6C9 100%);\n color: #4CAF50;\n font-size: 18px;\n flex-shrink: 0;\n}\n\n.card-icon.query-icon {\n background: linear-gradient(135deg, #E3F2FD 0%, #BBDEFB 100%);\n color: #2196F3;\n}\n\n.card-title-info {\n flex: 1;\n min-width: 0;\n}\n\n.card-title {\n margin: 0 0 4px 0;\n font-size: 15px;\n font-weight: 600;\n color: #212529;\n}\n\n.card-path {\n margin: 0 0 4px 0;\n font-size: 12px;\n color: #6c757d;\n font-family: 'SF Mono', Monaco, 'Cascadia Code', monospace;\n}\n\n.card-description {\n margin: 0;\n font-size: 13px;\n color: #6c757d;\n line-height: 1.4;\n}\n\n.expand-icon {\n color: #adb5bd;\n font-size: 12px;\n padding: 4px;\n}\n\n.data-card.expanded .expand-icon {\n color: #5B4FE9;\n}\n\n/* Card Meta */\n.card-meta {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-top: 12px;\n padding-top: 12px;\n border-top: 1px solid #f1f3f4;\n}\n\n.permissions-row {\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n}\n\n.permission-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n border-radius: 4px;\n font-size: 11px;\n font-weight: 500;\n color: white;\n text-transform: capitalize;\n}\n\n.permission-badge i {\n font-size: 10px;\n}\n\n.field-count {\n font-size: 12px;\n color: #6c757d;\n}\n\n.entity-badges {\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n}\n\n.entity-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n border-radius: 4px;\n font-size: 11px;\n background: #f1f3f4;\n color: #495057;\n}\n\n.entity-badge i {\n font-size: 10px;\n color: #6c757d;\n}\n\n/* Card Body */\n.card-body {\n padding: 0 16px 16px 16px;\n border-top: 1px solid #f1f3f4;\n}\n\n/* Usage Context */\n.usage-context {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n padding: 12px;\n margin-top: 12px;\n background: #FFF8E1;\n border-radius: 6px;\n font-size: 13px;\n color: #6d4c00;\n}\n\n.usage-context i {\n color: #FFA000;\n margin-top: 2px;\n}\n\n/* Fields Section */\n.fields-section {\n margin-top: 16px;\n}\n\n.fields-title {\n margin: 0 0 12px 0;\n font-size: 13px;\n font-weight: 600;\n color: #495057;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n/* Fields Table */\n.fields-table {\n border: 1px solid #e9ecef;\n border-radius: 6px;\n overflow: hidden;\n}\n\n.fields-header {\n display: flex;\n padding: 10px 12px;\n background: #f8f9fa;\n border-bottom: 1px solid #e9ecef;\n font-size: 11px;\n font-weight: 600;\n color: #6c757d;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.field-row {\n display: flex;\n padding: 10px 12px;\n border-bottom: 1px solid #f1f3f4;\n font-size: 13px;\n align-items: center;\n}\n\n.field-row:last-child {\n border-bottom: none;\n}\n\n.field-row:hover {\n background: #fafbfc;\n}\n\n.field-col {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.name-col {\n flex: 0 0 200px;\n min-width: 0;\n}\n\n.type-col {\n flex: 0 0 120px;\n}\n\n.tags-col {\n flex: 0 0 160px;\n flex-wrap: wrap;\n gap: 4px;\n}\n\n.desc-col {\n flex: 1;\n color: #6c757d;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.field-name {\n font-weight: 500;\n color: #212529;\n}\n\n.required-indicator {\n color: #dc3545;\n font-weight: bold;\n}\n\n.field-type {\n padding: 2px 6px;\n background: #f1f3f4;\n border-radius: 4px;\n font-size: 11px;\n color: #495057;\n font-family: 'SF Mono', Monaco, 'Cascadia Code', monospace;\n}\n\n.usage-tag {\n display: inline-block;\n padding: 2px 6px;\n border-radius: 3px;\n font-size: 10px;\n font-weight: 600;\n color: white;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n/* Parameters Section */\n.parameters-section {\n margin-top: 16px;\n}\n\n.parameters-title {\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 0 0 12px 0;\n font-size: 13px;\n font-weight: 600;\n color: #495057;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.parameters-title i {\n color: #5B4FE9;\n}\n\n.parameters-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.parameter-item {\n padding: 12px;\n background: #f8f9fa;\n border-radius: 6px;\n border-left: 3px solid #5B4FE9;\n}\n\n.param-header {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n.param-name {\n font-weight: 600;\n color: #212529;\n font-size: 14px;\n}\n\n.required-badge {\n padding: 2px 6px;\n border-radius: 3px;\n font-size: 10px;\n font-weight: 600;\n background: #dc3545;\n color: white;\n text-transform: uppercase;\n}\n\n.optional-badge {\n padding: 2px 6px;\n border-radius: 3px;\n font-size: 10px;\n font-weight: 600;\n background: #6c757d;\n color: white;\n text-transform: uppercase;\n}\n\n.param-type {\n padding: 2px 6px;\n background: #e9ecef;\n border-radius: 4px;\n font-size: 11px;\n color: #495057;\n font-family: 'SF Mono', Monaco, 'Cascadia Code', monospace;\n}\n\n.param-description {\n margin: 8px 0 0 0;\n font-size: 13px;\n color: #495057;\n line-height: 1.4;\n}\n\n.param-sample {\n margin-top: 8px;\n font-size: 12px;\n}\n\n.sample-label {\n color: #6c757d;\n margin-right: 4px;\n}\n\n.param-sample code {\n padding: 2px 6px;\n background: white;\n border: 1px solid #e9ecef;\n border-radius: 4px;\n font-family: 'SF Mono', Monaco, 'Cascadia Code', monospace;\n color: #e83e8c;\n}\n\n/* SQL Section */\n.sql-section {\n margin-top: 16px;\n}\n\n.sql-title {\n display: flex;\n align-items: center;\n gap: 8px;\n margin: 0 0 12px 0;\n font-size: 13px;\n font-weight: 600;\n color: #495057;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.sql-title i {\n color: #5B4FE9;\n}\n\n.sql-code {\n margin: 0;\n padding: 16px;\n background: #1e1e1e;\n border-radius: 6px;\n font-size: 12px;\n line-height: 1.5;\n color: #d4d4d4;\n font-family: 'SF Mono', Monaco, 'Cascadia Code', monospace;\n overflow-x: auto;\n white-space: pre-wrap;\n word-break: break-word;\n}\n\n/* Responsive adjustments */\n@media (max-width: 768px) {\n .summary-header {\n flex-direction: column;\n gap: 16px;\n align-items: flex-start;\n }\n\n .stats {\n width: 100%;\n justify-content: space-around;\n }\n\n .name-col {\n flex: 0 0 140px;\n }\n\n .type-col {\n flex: 0 0 90px;\n }\n\n .tags-col {\n flex: 0 0 120px;\n }\n\n .card-meta {\n flex-direction: column;\n gap: 8px;\n align-items: flex-start;\n }\n}\n"] }]
|
|
671
|
+
}], null, { dataRequirements: [{
|
|
672
|
+
type: Input
|
|
673
|
+
}] }); })();
|
|
674
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(DataRequirementsViewerComponent, { className: "DataRequirementsViewerComponent", filePath: "src/lib/components/plugins/data-requirements-viewer/data-requirements-viewer.component.ts", lineNumber: 13 }); })();
|
|
675
|
+
//# sourceMappingURL=data-requirements-viewer.component.js.map
|