@memberjunction/ng-explorer-core 2.10.0 → 2.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/dist/app-routing.module.d.ts.map +1 -1
  2. package/dist/app-routing.module.js +4 -2
  3. package/dist/app-routing.module.js.map +1 -1
  4. package/dist/lib/list-view/list-view.component.d.ts +3 -1
  5. package/dist/lib/list-view/list-view.component.d.ts.map +1 -1
  6. package/dist/lib/list-view/list-view.component.js +108 -45
  7. package/dist/lib/list-view/list-view.component.js.map +1 -1
  8. package/dist/lib/navigation/navigation.component.d.ts.map +1 -1
  9. package/dist/lib/navigation/navigation.component.js +14 -2
  10. package/dist/lib/navigation/navigation.component.js.map +1 -1
  11. package/dist/lib/resource-browser/resource-browser.component.d.ts +6 -2
  12. package/dist/lib/resource-browser/resource-browser.component.d.ts.map +1 -1
  13. package/dist/lib/resource-browser/resource-browser.component.js +23 -2
  14. package/dist/lib/resource-browser/resource-browser.component.js.map +1 -1
  15. package/dist/lib/resource-wrappers/list-detail-resource.component.d.ts +10 -0
  16. package/dist/lib/resource-wrappers/list-detail-resource.component.d.ts.map +1 -0
  17. package/dist/lib/resource-wrappers/list-detail-resource.component.js +63 -0
  18. package/dist/lib/resource-wrappers/list-detail-resource.component.js.map +1 -0
  19. package/dist/lib/resource-wrappers/resource-wrappers-loader.d.ts.map +1 -1
  20. package/dist/lib/resource-wrappers/resource-wrappers-loader.js +2 -0
  21. package/dist/lib/resource-wrappers/resource-wrappers-loader.js.map +1 -1
  22. package/dist/lib/single-list-detail/single-list-detail.component.d.ts +28 -11
  23. package/dist/lib/single-list-detail/single-list-detail.component.d.ts.map +1 -1
  24. package/dist/lib/single-list-detail/single-list-detail.component.js +337 -165
  25. package/dist/lib/single-list-detail/single-list-detail.component.js.map +1 -1
  26. package/dist/module.d.ts +40 -38
  27. package/dist/module.d.ts.map +1 -1
  28. package/dist/module.js +17 -10
  29. package/dist/module.js.map +1 -1
  30. package/dist/public-api.d.ts +1 -0
  31. package/dist/public-api.d.ts.map +1 -1
  32. package/dist/public-api.js +1 -0
  33. package/dist/public-api.js.map +1 -1
  34. package/package.json +23 -22
@@ -7,7 +7,7 @@ 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 } from '@angular/core';
10
+ import { Component, Input } from '@angular/core';
11
11
  import { EntityFieldTSType, LogError, LogStatus, Metadata, RunView } from '@memberjunction/core';
12
12
  import { Subject, debounceTime } from 'rxjs';
13
13
  import * as i0 from "@angular/core";
@@ -19,17 +19,18 @@ import * as i5 from "@progress/kendo-angular-dialog";
19
19
  import * as i6 from "@progress/kendo-angular-indicators";
20
20
  import * as i7 from "@progress/kendo-angular-buttons";
21
21
  import * as i8 from "@progress/kendo-angular-inputs";
22
+ import * as i9 from "@progress/kendo-angular-progressbar";
22
23
  const _c0 = () => ({ "text-align": "center", "vertical-align": "center" });
23
24
  const _c1 = () => ({ "font-weight": "bold", "background-color": "white" });
24
25
  const _c2 = a0 => ({ "list-selected": a0 });
25
26
  function SingleListDetailComponent_ng_template_12_Template(rf, ctx) { if (rf & 1) {
26
- i0.ɵɵelement(0, "span", 12);
27
+ i0.ɵɵelement(0, "span", 13);
27
28
  } }
28
29
  function SingleListDetailComponent_Conditional_13_Template(rf, ctx) { if (rf & 1) {
29
30
  i0.ɵɵelement(0, "kendo-loader", 9);
30
31
  } }
31
32
  function SingleListDetailComponent_Conditional_14_kendo_grid_checkbox_column_1_Template(rf, ctx) { if (rf & 1) {
32
- i0.ɵɵelement(0, "kendo-grid-checkbox-column", 15);
33
+ i0.ɵɵelement(0, "kendo-grid-checkbox-column", 16);
33
34
  } if (rf & 2) {
34
35
  i0.ɵɵstyleMap(i0.ɵɵpureFunction0(4, _c0));
35
36
  i0.ɵɵproperty("width", 50)("headerStyle", i0.ɵɵpureFunction0(5, _c1));
@@ -39,7 +40,7 @@ function SingleListDetailComponent_Conditional_14_kendo_grid_column_2_1_ng_templ
39
40
  i0.ɵɵpipe(1, "number");
40
41
  i0.ɵɵpipe(2, "number");
41
42
  i0.ɵɵelement(3, "br");
42
- i0.ɵɵelementStart(4, "span", 19);
43
+ i0.ɵɵelementStart(4, "span", 20);
43
44
  i0.ɵɵtext(5);
44
45
  i0.ɵɵpipe(6, "number");
45
46
  i0.ɵɵelementEnd();
@@ -50,11 +51,11 @@ function SingleListDetailComponent_Conditional_14_kendo_grid_column_2_1_ng_templ
50
51
  i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind2(6, 7, ctx_r2.viewExecutionTime, "1.2-2"), " seconds");
51
52
  } }
52
53
  function SingleListDetailComponent_Conditional_14_kendo_grid_column_2_1_Template(rf, ctx) { if (rf & 1) {
53
- i0.ɵɵtemplate(0, SingleListDetailComponent_Conditional_14_kendo_grid_column_2_1_ng_template_0_Template, 7, 10, "ng-template", 18);
54
+ i0.ɵɵtemplate(0, SingleListDetailComponent_Conditional_14_kendo_grid_column_2_1_ng_template_0_Template, 7, 10, "ng-template", 19);
54
55
  } }
55
56
  function SingleListDetailComponent_Conditional_14_kendo_grid_column_2_Template(rf, ctx) { if (rf & 1) {
56
- i0.ɵɵelementStart(0, "kendo-grid-column", 16);
57
- i0.ɵɵtemplate(1, SingleListDetailComponent_Conditional_14_kendo_grid_column_2_1_Template, 1, 0, null, 17);
57
+ i0.ɵɵelementStart(0, "kendo-grid-column", 17);
58
+ i0.ɵɵtemplate(1, SingleListDetailComponent_Conditional_14_kendo_grid_column_2_1_Template, 1, 0, null, 18);
58
59
  i0.ɵɵelementEnd();
59
60
  } if (rf & 2) {
60
61
  const item_r4 = ctx.$implicit;
@@ -66,7 +67,7 @@ function SingleListDetailComponent_Conditional_14_kendo_grid_column_2_Template(r
66
67
  } }
67
68
  function SingleListDetailComponent_Conditional_14_Template(rf, ctx) { if (rf & 1) {
68
69
  i0.ɵɵelementStart(0, "kendo-grid", 10);
69
- i0.ɵɵtemplate(1, SingleListDetailComponent_Conditional_14_kendo_grid_checkbox_column_1_Template, 1, 6, "kendo-grid-checkbox-column", 13)(2, SingleListDetailComponent_Conditional_14_kendo_grid_column_2_Template, 2, 10, "kendo-grid-column", 14);
70
+ i0.ɵɵtemplate(1, SingleListDetailComponent_Conditional_14_kendo_grid_checkbox_column_1_Template, 1, 6, "kendo-grid-checkbox-column", 14)(2, SingleListDetailComponent_Conditional_14_kendo_grid_column_2_Template, 2, 10, "kendo-grid-column", 15);
70
71
  i0.ɵɵelementEnd();
71
72
  } if (rf & 2) {
72
73
  const ctx_r2 = i0.ɵɵnextContext();
@@ -76,95 +77,165 @@ function SingleListDetailComponent_Conditional_14_Template(rf, ctx) { if (rf & 1
76
77
  i0.ɵɵadvance();
77
78
  i0.ɵɵproperty("ngForOf", ctx_r2.visibleColumns);
78
79
  } }
79
- function SingleListDetailComponent_kendo_dialog_15_Conditional_5_Template(rf, ctx) { if (rf & 1) {
80
- i0.ɵɵelement(0, "kendo-loader", 9);
80
+ function SingleListDetailComponent_kendo_dialog_15_Conditional_1_Template(rf, ctx) { if (rf & 1) {
81
+ i0.ɵɵelement(0, "kendo-loader", 9)(1, "kendo-progressbar", 25);
82
+ } if (rf & 2) {
83
+ const ctx_r2 = i0.ɵɵnextContext(2);
84
+ i0.ɵɵadvance();
85
+ i0.ɵɵproperty("min", 0)("max", ctx_r2.recordsToSave)("value", ctx_r2.recordsSaved)("indeterminate", ctx_r2.fetchingRecordsToSave);
81
86
  } }
82
- function SingleListDetailComponent_kendo_dialog_15_Conditional_6_For_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
87
+ function SingleListDetailComponent_kendo_dialog_15_Conditional_2_For_4_Conditional_4_Template(rf, ctx) { if (rf & 1) {
83
88
  const _r6 = i0.ɵɵgetCurrentView();
84
- i0.ɵɵelementStart(0, "button", 31);
85
- i0.ɵɵlistener("click", function SingleListDetailComponent_kendo_dialog_15_Conditional_6_For_1_Conditional_3_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r6); const userView_r7 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.removeViewFromSelectedList(userView_r7)); });
86
- i0.ɵɵelement(1, "span", 32);
89
+ i0.ɵɵelementStart(0, "button", 33);
90
+ i0.ɵɵlistener("click", function SingleListDetailComponent_kendo_dialog_15_Conditional_2_For_4_Conditional_4_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r6); const userView_r7 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.removeViewFromSelectedList(userView_r7)); });
91
+ i0.ɵɵelement(1, "span", 34);
87
92
  i0.ɵɵtext(2, " Remove ");
88
93
  i0.ɵɵelementEnd();
89
94
  } }
90
- function SingleListDetailComponent_kendo_dialog_15_Conditional_6_For_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
95
+ function SingleListDetailComponent_kendo_dialog_15_Conditional_2_For_4_Conditional_5_Template(rf, ctx) { if (rf & 1) {
91
96
  const _r8 = i0.ɵɵgetCurrentView();
92
- i0.ɵɵelementStart(0, "button", 33);
93
- i0.ɵɵlistener("click", function SingleListDetailComponent_kendo_dialog_15_Conditional_6_For_1_Conditional_4_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r8); const userView_r7 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.addViewToSelectedList(userView_r7)); });
94
- i0.ɵɵelementStart(1, "div", 34);
97
+ i0.ɵɵelementStart(0, "button", 35);
98
+ i0.ɵɵlistener("click", function SingleListDetailComponent_kendo_dialog_15_Conditional_2_For_4_Conditional_5_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r8); const userView_r7 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.addViewToSelectedList(userView_r7)); });
99
+ i0.ɵɵelementStart(1, "div", 36);
95
100
  i0.ɵɵelement(2, "span", 4);
96
101
  i0.ɵɵtext(3, " Add ");
97
102
  i0.ɵɵelementEnd()();
98
103
  } }
99
- function SingleListDetailComponent_kendo_dialog_15_Conditional_6_For_1_Template(rf, ctx) { if (rf & 1) {
100
- i0.ɵɵelementStart(0, "div", 27)(1, "div", 28);
101
- i0.ɵɵtext(2);
104
+ function SingleListDetailComponent_kendo_dialog_15_Conditional_2_For_4_Template(rf, ctx) { if (rf & 1) {
105
+ i0.ɵɵelementStart(0, "div", 28)(1, "div", 29)(2, "div", 30);
106
+ i0.ɵɵtext(3);
102
107
  i0.ɵɵelementEnd();
103
- i0.ɵɵtemplate(3, SingleListDetailComponent_kendo_dialog_15_Conditional_6_For_1_Conditional_3_Template, 3, 0, "button", 29)(4, SingleListDetailComponent_kendo_dialog_15_Conditional_6_For_1_Conditional_4_Template, 4, 0, "button", 30);
108
+ i0.ɵɵtemplate(4, SingleListDetailComponent_kendo_dialog_15_Conditional_2_For_4_Conditional_4_Template, 3, 0, "button", 31)(5, SingleListDetailComponent_kendo_dialog_15_Conditional_2_For_4_Conditional_5_Template, 4, 0, "button", 32);
109
+ i0.ɵɵelementEnd();
110
+ i0.ɵɵelement(6, "hr");
104
111
  i0.ɵɵelementEnd();
105
- i0.ɵɵelement(5, "hr");
106
112
  } if (rf & 2) {
107
113
  const userView_r7 = ctx.$implicit;
108
114
  const ctx_r2 = i0.ɵɵnextContext(3);
109
- i0.ɵɵadvance();
115
+ i0.ɵɵadvance(2);
110
116
  i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(3, _c2, ctx_r2.userViewsToAdd.includes(userView_r7)));
111
117
  i0.ɵɵadvance();
112
118
  i0.ɵɵtextInterpolate1(" ", userView_r7.Name, " ");
113
119
  i0.ɵɵadvance();
114
- i0.ɵɵconditional(ctx_r2.userViewsToAdd.includes(userView_r7) ? 3 : 4);
120
+ i0.ɵɵconditional(ctx_r2.userViewsToAdd.includes(userView_r7) ? 4 : 5);
115
121
  } }
116
- function SingleListDetailComponent_kendo_dialog_15_Conditional_6_Template(rf, ctx) { if (rf & 1) {
117
- i0.ɵɵrepeaterCreate(0, SingleListDetailComponent_kendo_dialog_15_Conditional_6_For_1_Template, 6, 5, null, null, i0.ɵɵrepeaterTrackByIdentity);
122
+ function SingleListDetailComponent_kendo_dialog_15_Conditional_2_Template(rf, ctx) { if (rf & 1) {
123
+ i0.ɵɵelementStart(0, "div", 26);
124
+ i0.ɵɵelement(1, "kendo-textbox", 27);
125
+ i0.ɵɵelementEnd();
126
+ i0.ɵɵelement(2, "hr");
127
+ i0.ɵɵrepeaterCreate(3, SingleListDetailComponent_kendo_dialog_15_Conditional_2_For_4_Template, 7, 5, "div", 28, i0.ɵɵrepeaterTrackByIdentity);
118
128
  } if (rf & 2) {
119
129
  const ctx_r2 = i0.ɵɵnextContext(2);
130
+ i0.ɵɵadvance();
131
+ i0.ɵɵproperty("clearButton", true);
132
+ i0.ɵɵadvance(2);
120
133
  i0.ɵɵrepeater(ctx_r2.userViews);
121
134
  } }
122
135
  function SingleListDetailComponent_kendo_dialog_15_Template(rf, ctx) { if (rf & 1) {
123
136
  const _r5 = i0.ɵɵgetCurrentView();
124
- i0.ɵɵelementStart(0, "kendo-dialog", 20);
125
- i0.ɵɵlistener("close", function SingleListDetailComponent_kendo_dialog_15_Template_kendo_dialog_close_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.toggleAddDialog(false)); });
126
- i0.ɵɵelementStart(1, "div", 21);
127
- i0.ɵɵelement(2, "kendo-textbox", 22);
128
- i0.ɵɵelementEnd();
129
- i0.ɵɵelement(3, "hr");
130
- i0.ɵɵelementStart(4, "div", 23);
131
- i0.ɵɵtemplate(5, SingleListDetailComponent_kendo_dialog_15_Conditional_5_Template, 1, 0, "kendo-loader", 9)(6, SingleListDetailComponent_kendo_dialog_15_Conditional_6_Template, 2, 0);
132
- i0.ɵɵelementEnd();
133
- i0.ɵɵelementStart(7, "kendo-dialog-actions", 24)(8, "button", 25);
134
- i0.ɵɵlistener("click", function SingleListDetailComponent_kendo_dialog_15_Template_button_click_8_listener() { i0.ɵɵrestoreView(_r5); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.addTolist()); });
135
- i0.ɵɵtext(9, " Done ");
137
+ i0.ɵɵelementStart(0, "kendo-dialog", 21);
138
+ i0.ɵɵlistener("close", function SingleListDetailComponent_kendo_dialog_15_Template_kendo_dialog_close_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.toggleAddFromViewDialog(false)); });
139
+ i0.ɵɵtemplate(1, SingleListDetailComponent_kendo_dialog_15_Conditional_1_Template, 2, 4)(2, SingleListDetailComponent_kendo_dialog_15_Conditional_2_Template, 5, 1);
140
+ i0.ɵɵelementStart(3, "kendo-dialog-actions", 22)(4, "button", 23);
141
+ i0.ɵɵlistener("click", function SingleListDetailComponent_kendo_dialog_15_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r5); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.addTolist()); });
142
+ i0.ɵɵtext(5, " Done ");
136
143
  i0.ɵɵelementEnd();
137
- i0.ɵɵelementStart(10, "button", 26);
138
- i0.ɵɵlistener("click", function SingleListDetailComponent_kendo_dialog_15_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r5); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.toggleAddDialog(false)); });
139
- i0.ɵɵtext(11, " Cancel ");
144
+ i0.ɵɵelementStart(6, "button", 24);
145
+ i0.ɵɵlistener("click", function SingleListDetailComponent_kendo_dialog_15_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r5); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.toggleAddFromViewDialog(false)); });
146
+ i0.ɵɵtext(7, " Cancel ");
140
147
  i0.ɵɵelementEnd()()();
141
148
  } if (rf & 2) {
142
149
  const ctx_r2 = i0.ɵɵnextContext();
143
150
  i0.ɵɵproperty("minWidth", 250)("width", 650)("height", 550);
144
- i0.ɵɵadvance(2);
145
- i0.ɵɵproperty("clearButton", true);
146
- i0.ɵɵadvance(3);
147
- i0.ɵɵconditional(ctx_r2.showAddLoader ? 5 : 6);
151
+ i0.ɵɵadvance();
152
+ i0.ɵɵconditional(ctx_r2.showAddLoader ? 1 : 2);
148
153
  i0.ɵɵadvance(3);
149
154
  i0.ɵɵproperty("disabled", ctx_r2.showAddLoader);
150
155
  i0.ɵɵadvance(2);
151
156
  i0.ɵɵproperty("disabled", ctx_r2.showAddLoader);
152
157
  } }
158
+ function SingleListDetailComponent_kendo_dialog_16_Conditional_1_Template(rf, ctx) { if (rf & 1) {
159
+ i0.ɵɵelement(0, "kendo-loader", 9)(1, "kendo-progressbar", 25);
160
+ } if (rf & 2) {
161
+ const ctx_r2 = i0.ɵɵnextContext(2);
162
+ i0.ɵɵadvance();
163
+ i0.ɵɵproperty("min", 0)("max", ctx_r2.recordsToSave)("value", ctx_r2.recordsSaved)("indeterminate", ctx_r2.fetchingRecordsToSave);
164
+ } }
165
+ function SingleListDetailComponent_kendo_dialog_16_Conditional_2_Conditional_3_Template(rf, ctx) { if (rf & 1) {
166
+ i0.ɵɵelement(0, "kendo-loader", 9);
167
+ } }
168
+ function SingleListDetailComponent_kendo_dialog_16_Conditional_2_Conditional_4_For_1_Template(rf, ctx) { if (rf & 1) {
169
+ const _r11 = i0.ɵɵgetCurrentView();
170
+ i0.ɵɵelementStart(0, "div", 28)(1, "div", 29)(2, "div", 39);
171
+ i0.ɵɵtext(3);
172
+ i0.ɵɵelementEnd();
173
+ i0.ɵɵelementStart(4, "button", 35);
174
+ i0.ɵɵlistener("click", function SingleListDetailComponent_kendo_dialog_16_Conditional_2_Conditional_4_For_1_Template_button_click_4_listener() { const listRecord_r12 = i0.ɵɵrestoreView(_r11).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.addListRecord(listRecord_r12)); });
175
+ i0.ɵɵelementStart(5, "div", 36);
176
+ i0.ɵɵelement(6, "span", 4);
177
+ i0.ɵɵtext(7, " Add ");
178
+ i0.ɵɵelementEnd()()();
179
+ i0.ɵɵelement(8, "hr");
180
+ i0.ɵɵelementEnd();
181
+ } if (rf & 2) {
182
+ const listRecord_r12 = ctx.$implicit;
183
+ i0.ɵɵadvance(3);
184
+ i0.ɵɵtextInterpolate1(" ", listRecord_r12.Name, " ");
185
+ } }
186
+ function SingleListDetailComponent_kendo_dialog_16_Conditional_2_Conditional_4_Template(rf, ctx) { if (rf & 1) {
187
+ i0.ɵɵrepeaterCreate(0, SingleListDetailComponent_kendo_dialog_16_Conditional_2_Conditional_4_For_1_Template, 9, 1, "div", 28, i0.ɵɵrepeaterTrackByIdentity);
188
+ } if (rf & 2) {
189
+ const ctx_r2 = i0.ɵɵnextContext(3);
190
+ i0.ɵɵrepeater(ctx_r2.listRecords);
191
+ } }
192
+ function SingleListDetailComponent_kendo_dialog_16_Conditional_2_Template(rf, ctx) { if (rf & 1) {
193
+ const _r10 = i0.ɵɵgetCurrentView();
194
+ i0.ɵɵelementStart(0, "div", 26)(1, "kendo-textbox", 38);
195
+ i0.ɵɵlistener("valueChange", function SingleListDetailComponent_kendo_dialog_16_Conditional_2_Template_kendo_textbox_valueChange_1_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.onListRecordDialogValueChange($event)); });
196
+ i0.ɵɵelementEnd()();
197
+ i0.ɵɵelement(2, "hr");
198
+ i0.ɵɵtemplate(3, SingleListDetailComponent_kendo_dialog_16_Conditional_2_Conditional_3_Template, 1, 0, "kendo-loader", 9)(4, SingleListDetailComponent_kendo_dialog_16_Conditional_2_Conditional_4_Template, 2, 0);
199
+ } if (rf & 2) {
200
+ const ctx_r2 = i0.ɵɵnextContext(2);
201
+ i0.ɵɵadvance();
202
+ i0.ɵɵproperty("placeholder", "Search " + (ctx_r2.listRecord ? ctx_r2.listRecord.Entity : "Records") + "...")("clearButton", true);
203
+ i0.ɵɵadvance(2);
204
+ i0.ɵɵconditional(ctx_r2.fetchingListRecords ? 3 : 4);
205
+ } }
206
+ function SingleListDetailComponent_kendo_dialog_16_Template(rf, ctx) { if (rf & 1) {
207
+ const _r9 = i0.ɵɵgetCurrentView();
208
+ i0.ɵɵelementStart(0, "kendo-dialog", 37);
209
+ i0.ɵɵlistener("close", function SingleListDetailComponent_kendo_dialog_16_Template_kendo_dialog_close_0_listener() { i0.ɵɵrestoreView(_r9); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.toggleAddRecordsDialog(false)); });
210
+ i0.ɵɵtemplate(1, SingleListDetailComponent_kendo_dialog_16_Conditional_1_Template, 2, 4)(2, SingleListDetailComponent_kendo_dialog_16_Conditional_2_Template, 5, 3);
211
+ i0.ɵɵelementStart(3, "kendo-dialog-actions", 22)(4, "button", 24);
212
+ i0.ɵɵlistener("click", function SingleListDetailComponent_kendo_dialog_16_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r9); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.toggleAddRecordsDialog(false)); });
213
+ i0.ɵɵtext(5, " Close ");
214
+ i0.ɵɵelementEnd()()();
215
+ } if (rf & 2) {
216
+ const ctx_r2 = i0.ɵɵnextContext();
217
+ i0.ɵɵproperty("title", "Select " + (ctx_r2.listRecord ? ctx_r2.listRecord.Entity : "Records") + " to Add to List")("minWidth", 250)("width", 650)("height", 550);
218
+ i0.ɵɵadvance();
219
+ i0.ɵɵconditional(ctx_r2.showDialogLoader ? 1 : 2);
220
+ i0.ɵɵadvance(3);
221
+ i0.ɵɵproperty("disabled", ctx_r2.showDialogLoader);
222
+ } }
153
223
  export class SingleListDetailComponent {
154
224
  constructor(router, route, sharedService) {
155
225
  this.router = router;
156
226
  this.route = route;
157
227
  this.sharedService = sharedService;
228
+ this.ListID = "";
158
229
  this.listRecord = null;
159
- this.listID = "";
230
+ this.sourceEntityInfo = null;
160
231
  this.showLoader = false;
161
232
  this.sourceGridData = [];
162
233
  this.filteredGridData = [];
163
- this.listName = "";
164
234
  this.showAddDialog = false;
165
235
  this.showAddLoader = false;
236
+ this.showDialogLoader = false;
166
237
  this.userViews = null;
167
- this._resizeDebounceTime = 250;
238
+ this.filterDebounceTime = 250;
168
239
  this.filterItemsSubject = new Subject();
169
240
  this.filter = '';
170
241
  this.userViewsToAdd = [];
@@ -178,103 +249,99 @@ export class SingleListDetailComponent {
178
249
  this.visibleColumns = [];
179
250
  this.totalRowCount = 0;
180
251
  this.viewExecutionTime = 0;
252
+ this.recordsToSave = 0;
253
+ this.recordsSaved = 0;
254
+ this.fetchingRecordsToSave = false;
255
+ this.showAddSingleRecordsDialog = false;
256
+ this.fetchingListRecords = false;
257
+ this.listRecords = [];
258
+ this.selectedListRecords = [];
259
+ this.searchFilter = "";
260
+ this.filterListrecordsSubject = new Subject();
261
+ this.addOptions = [
262
+ {
263
+ Text: 'Add From View',
264
+ Description: 'Add all records of a view to this list',
265
+ Icon: 'folder',
266
+ Action: () => {
267
+ this.toggleAddFromViewDialog(true);
268
+ }
269
+ },
270
+ {
271
+ Text: 'Add a Record',
272
+ Description: 'Add a specific record to the list',
273
+ Icon: 'folder',
274
+ Action: () => {
275
+ this.toggleAddRecordsDialog(true);
276
+ }
277
+ }
278
+ ];
181
279
  this.filterItemsSubject
182
- .pipe(debounceTime(this._resizeDebounceTime))
280
+ .pipe(debounceTime(this.filterDebounceTime))
183
281
  .subscribe(() => this.filterItems(this.filter));
282
+ this.filterListrecordsSubject
283
+ .pipe(debounceTime(this.filterDebounceTime))
284
+ .subscribe(() => this.loadListRecords());
184
285
  }
185
286
  ngOnInit() {
186
287
  return __awaiter(this, void 0, void 0, function* () {
187
- this.route.paramMap.subscribe((params) => __awaiter(this, void 0, void 0, function* () {
188
- const listID = params.get('listID');
189
- if (listID) {
190
- yield this.loadList(listID);
191
- }
192
- }));
288
+ if (this.ListID) {
289
+ yield this.loadList(this.ListID);
290
+ }
193
291
  });
194
292
  }
195
293
  loadList(listID) {
196
294
  return __awaiter(this, void 0, void 0, function* () {
295
+ if (!listID) {
296
+ return;
297
+ }
197
298
  const startTime = new Date().getTime();
198
- if (listID) {
199
- this.listID = listID;
200
- this.showLoader = true;
201
- const md = new Metadata();
202
- const rv = new RunView();
203
- const listRunViewResult = yield rv.RunView({
204
- EntityName: 'Lists',
205
- ResultType: 'entity_object',
206
- ExtraFilter: `ID = '${listID}'`
207
- }, md.CurrentUser);
208
- if (!listRunViewResult.Success || listRunViewResult.Results.length === 0) {
209
- LogError("Error loading list with ID " + listID);
210
- return;
211
- }
212
- const listEntity = listRunViewResult.Results[0];
213
- const entity = md.EntityFromEntityID(listEntity.EntityID);
214
- if (!entity) {
215
- LogError("Error fetching EntityInfo with ID " + listEntity.EntityID);
216
- return;
217
- }
218
- for (const field of entity.Fields) {
219
- if (!field.DefaultInView) {
220
- continue;
221
- }
222
- let column = {
223
- ID: field.ID,
224
- Name: field.CodeName,
225
- DisplayName: field.DisplayName,
226
- EntityField: field,
227
- hidden: false,
228
- orderIndex: field.Sequence,
229
- width: field.DefaultColumnWidth || 100
230
- };
231
- this.viewColumns.push(column);
232
- }
233
- /*make sure there is an entity field linked*/
234
- this.visibleColumns = this.viewColumns.filter(x => x.hidden === false && x.EntityField).sort((a, b) => {
235
- const aOrder = a.orderIndex != null ? a.orderIndex : 9999;
236
- const bOrder = b.orderIndex != null ? b.orderIndex : 9999;
237
- return aOrder - bOrder;
238
- });
239
- this.listName = listEntity.Name;
240
- this.listRecord = listEntity;
241
- const runViewResult = yield rv.RunView({
242
- EntityName: 'List Details',
243
- ResultType: 'entity_object',
244
- ExtraFilter: `ListID = '${listID}'`,
245
- MaxRows: this.pageSize,
246
- IgnoreMaxRows: false,
247
- StartRow: Math.max(0, (this.page - 1) * this.pageSize)
248
- }, md.CurrentUser);
249
- if (!runViewResult.Success) {
250
- LogError("Error loading list details for list with ID " + listID);
251
- return;
252
- }
253
- this.totalRowCount = runViewResult.TotalRowCount;
254
- const listDetailRecords = runViewResult.Results;
255
- LogStatus(`Found ${listDetailRecords.length} records in list ${listID}`);
256
- if (listDetailRecords.length > 0) {
257
- const recordIDs = listDetailRecords.map(ld => `'${ld.RecordID}'`).join(',');
258
- let extraFilter = `ID IN (${recordIDs})`;
259
- const rvResult = yield rv.RunView({
260
- EntityName: entity.Name,
261
- ExtraFilter: extraFilter
262
- }, md.CurrentUser);
263
- if (!rvResult.Success) {
264
- LogError(`Error loading ${entity.Name} records with extra filter ${extraFilter}`);
265
- return;
266
- }
267
- LogStatus(`Found ${rvResult.Results.length} records in entity ${entity.Name}`);
268
- this.sourceGridData = this.filteredGridData = rvResult.Results;
269
- this.viewExecutionTime = (new Date().getTime() - startTime) / 1000; // in seconds
270
- }
299
+ this.showLoader = true;
300
+ const md = new Metadata();
301
+ const rv = new RunView();
302
+ this.listRecord = yield md.GetEntityObject("Lists");
303
+ const loadResult = yield this.listRecord.Load(listID);
304
+ if (!loadResult) {
305
+ LogError("Error loading list with ID " + listID, undefined, this.listRecord.LatestResult);
271
306
  this.showLoader = false;
307
+ return;
272
308
  }
309
+ this.sourceEntityInfo = md.EntityByID(this.listRecord.EntityID);
310
+ this.viewColumns = this.sourceEntityInfo.Fields.filter((field) => field.DefaultInView).map((field) => {
311
+ return {
312
+ ID: field.ID,
313
+ Name: field.CodeName,
314
+ DisplayName: field.DisplayName,
315
+ EntityField: field,
316
+ hidden: false,
317
+ orderIndex: field.Sequence,
318
+ width: field.DefaultColumnWidth || 100,
319
+ };
320
+ });
321
+ /*make sure there is an entity field linked*/
322
+ this.visibleColumns = this.viewColumns.filter(x => x.hidden === false && x.EntityField).sort((a, b) => {
323
+ const aOrder = a.orderIndex != null ? a.orderIndex : 9999;
324
+ const bOrder = b.orderIndex != null ? b.orderIndex : 9999;
325
+ return aOrder - bOrder;
326
+ });
327
+ const primaryKeyName = this.sourceEntityInfo.FirstPrimaryKey.Name;
328
+ const rvResult = yield rv.RunView({
329
+ EntityName: this.listRecord.Entity,
330
+ ExtraFilter: `${primaryKeyName} IN (SELECT [RecordID] FROM ${md.ConfigData.MJCoreSchemaName}.[vwListDetails] WHERE ListID = '${this.listRecord.ID}')`
331
+ }, md.CurrentUser);
332
+ if (!rvResult.Success) {
333
+ LogError(`Error loading ${this.listRecord.Entity} records: ${rvResult.ErrorMessage}`);
334
+ this.showLoader = false;
335
+ return;
336
+ }
337
+ this.sourceGridData = this.filteredGridData = rvResult.Results;
338
+ this.viewExecutionTime = (new Date().getTime() - startTime) / 1000; // in seconds
339
+ this.showLoader = false;
273
340
  });
274
341
  }
275
342
  pageChange(event) {
276
343
  this.page = event.skip;
277
- this.loadList(this.listID);
344
+ this.loadList(this.ListID);
278
345
  }
279
346
  GetColumnTitle(col) {
280
347
  if (col.DisplayName) {
@@ -323,7 +390,7 @@ export class SingleListDetailComponent {
323
390
  return { 'text-align': 'left', 'vertical-align': 'top' };
324
391
  }
325
392
  }
326
- toggleAddDialog(show) {
393
+ toggleAddFromViewDialog(show) {
327
394
  return __awaiter(this, void 0, void 0, function* () {
328
395
  this.showAddDialog = show;
329
396
  if (show && !this.userViews) {
@@ -355,15 +422,18 @@ export class SingleListDetailComponent {
355
422
  }
356
423
  addTolist() {
357
424
  return __awaiter(this, void 0, void 0, function* () {
358
- if (!this.listRecord || !this.listRecord.Entity) {
425
+ if (!this.listRecord) {
426
+ return;
427
+ }
428
+ if (!this.listRecord.Entity) {
359
429
  return;
360
430
  }
361
431
  this.showAddLoader = true;
432
+ this.fetchingRecordsToSave = true;
362
433
  const rv = new RunView();
363
434
  const md = new Metadata();
364
435
  const hashMap = new Map();
365
- for (const userView of this.userViewsToAdd) {
366
- const userView = this.userViewsToAdd[0];
436
+ yield Promise.all(this.userViewsToAdd.map((userView) => __awaiter(this, void 0, void 0, function* () {
367
437
  const runViewResult = yield rv.RunView({
368
438
  EntityName: "User Views",
369
439
  ViewEntity: userView,
@@ -377,43 +447,60 @@ export class SingleListDetailComponent {
377
447
  for (const record of records) {
378
448
  hashMap.set(record.ID, record);
379
449
  }
380
- }
450
+ })));
451
+ this.recordsToSave = hashMap.size;
452
+ this.recordsSaved = 0;
453
+ this.fetchingRecordsToSave = false;
381
454
  LogStatus(`Adding ${hashMap.size} records to list ${this.listRecord.ID}`);
382
455
  //now add the records to the list
383
- let count = 0;
384
- for (const [recordID, record] of hashMap) {
385
- const listDetail = yield md.GetEntityObject("List Details");
386
- listDetail.ListID = this.listRecord.ID;
387
- listDetail.RecordID = recordID.toString();
388
- listDetail.ContextCurrentUser = md.CurrentUser;
389
- listDetail.Save().then((result) => {
390
- if (!result) {
456
+ const recordIDs = [...hashMap.keys()];
457
+ const chunkSize = 100;
458
+ for (let i = 0; i < recordIDs.length; i += chunkSize) {
459
+ const chunk = recordIDs.slice(i, i + chunkSize);
460
+ yield Promise.all(chunk.map((recordID) => __awaiter(this, void 0, void 0, function* () {
461
+ const listDetail = yield md.GetEntityObject("List Details");
462
+ listDetail.ListID = this.listRecord.ID;
463
+ listDetail.RecordID = recordID.toString();
464
+ listDetail.ContextCurrentUser = md.CurrentUser;
465
+ const saveResult = yield listDetail.Save();
466
+ if (!saveResult) {
391
467
  LogError(`Error adding record ${recordID} to list ${this.listRecord.ID}`, undefined, listDetail.LatestResult);
392
468
  }
393
- count = count + 1;
394
- if (count === hashMap.size) {
395
- this.showAddLoader = false;
396
- this.toggleAddDialog(false);
397
- this.loadList(this.listRecord.ID);
398
- }
399
- });
469
+ this.recordsSaved++;
470
+ })));
400
471
  }
472
+ this.showAddLoader = false;
473
+ this.toggleAddFromViewDialog(false);
474
+ this.loadList(this.listRecord.ID);
401
475
  });
402
476
  }
403
- onKeyup(Value) {
477
+ onListSearchValueChange(Value) {
404
478
  this.filter = Value;
405
479
  this.filterItemsSubject.next(true);
406
480
  }
481
+ onListRecordDialogValueChange(Value) {
482
+ this.searchFilter = Value;
483
+ this.filterListrecordsSubject.next(true);
484
+ }
407
485
  filterItems(filter) {
408
- if (!filter) {
486
+ if (!filter || filter === "") {
487
+ this.filteredGridData = this.sourceGridData;
488
+ return;
489
+ }
490
+ if (!this.listRecord) {
409
491
  return;
410
492
  }
411
493
  if (!this.sourceGridData) {
412
494
  this.sourceGridData = [];
413
495
  }
414
496
  const toLower = filter.toLowerCase();
497
+ const nameField = this.listRecord.EntityInfo.Fields.find((field) => field.IsNameField);
498
+ if (!nameField) {
499
+ LogError("Unable to filter list: No name field found");
500
+ return;
501
+ }
415
502
  this.filteredGridData = this.sourceGridData.filter((data) => {
416
- const name = data.Get("Name") || '';
503
+ const name = data[nameField.Name];
417
504
  return name.toLowerCase().includes(toLower);
418
505
  });
419
506
  }
@@ -423,29 +510,110 @@ export class SingleListDetailComponent {
423
510
  removeViewFromSelectedList(view) {
424
511
  this.userViewsToAdd.filter((userView) => userView.ID !== view.ID);
425
512
  }
513
+ onDropdownItemClick(item) {
514
+ if (!item.Action) {
515
+ return;
516
+ }
517
+ item.Action();
518
+ }
519
+ toggleAddRecordsDialog(show) {
520
+ return __awaiter(this, void 0, void 0, function* () {
521
+ this.showAddSingleRecordsDialog = show;
522
+ if (show) {
523
+ this.listRecords = [];
524
+ this.searchFilter = "";
525
+ yield this.loadListRecords();
526
+ }
527
+ });
528
+ }
529
+ loadListRecords() {
530
+ return __awaiter(this, void 0, void 0, function* () {
531
+ if (!this.listRecord) {
532
+ LogError("Error loading list records. List record is null");
533
+ return;
534
+ }
535
+ if (!this.sourceEntityInfo) {
536
+ LogError("Error loading list records. Source entity info is null");
537
+ return;
538
+ }
539
+ this.fetchingListRecords = true;
540
+ const primaryKeyName = this.sourceEntityInfo.FirstPrimaryKey.Name;
541
+ let filter = undefined;
542
+ const nameField = this.sourceEntityInfo.Fields.find((field) => field.IsNameField);
543
+ if (nameField && this.searchFilter) {
544
+ filter = `${nameField.Name} LIKE '%${this.searchFilter}%'`;
545
+ }
546
+ const rv = new RunView();
547
+ const rvResult = yield rv.RunView({
548
+ EntityName: this.listRecord.Entity,
549
+ ExtraFilter: filter,
550
+ MaxRows: 50
551
+ });
552
+ if (!rvResult.Success) {
553
+ LogError(`Error loading list records for list ${this.listRecord.ID}`, undefined, rvResult.ErrorMessage);
554
+ this.fetchingListRecords = false;
555
+ return;
556
+ }
557
+ this.listRecords = rvResult.Results.filter((record) => {
558
+ const alreadyExits = this.sourceGridData.some((selectedRecord) => selectedRecord.ID === record[primaryKeyName]);
559
+ return !alreadyExits;
560
+ }).map((record) => {
561
+ let result = { ID: record[primaryKeyName], Name: record[nameField.Name] };
562
+ return result;
563
+ });
564
+ this.fetchingListRecords = false;
565
+ });
566
+ }
567
+ addListRecord(listRecord) {
568
+ return __awaiter(this, void 0, void 0, function* () {
569
+ if (!this.listRecord) {
570
+ LogError("Error adding list record. List record is null");
571
+ this.sharedService.CreateSimpleNotification("Unable to add record to list");
572
+ return;
573
+ }
574
+ const md = new Metadata();
575
+ const listEntity = yield md.GetEntityObject("List Details", md.CurrentUser);
576
+ listEntity.ListID = this.listRecord.ID;
577
+ listEntity.RecordID = listRecord.ID;
578
+ const saveResult = yield listEntity.Save();
579
+ if (!saveResult) {
580
+ LogError(`Error adding record ${listRecord.ID} to list ${this.listRecord.ID}`, undefined, listEntity.LatestResult);
581
+ const alreadyExists = listEntity.LatestResult.Message.includes("already exists in List");
582
+ if (alreadyExists) {
583
+ this.sharedService.CreateSimpleNotification("Record already exists in this list", 'error', 2500);
584
+ return;
585
+ }
586
+ this.sharedService.CreateSimpleNotification("Unable to add record to list", 'error', 2500);
587
+ return;
588
+ }
589
+ this.sharedService.CreateSimpleNotification("Unable to add record to list", 'success', 2500);
590
+ });
591
+ }
426
592
  }
427
593
  SingleListDetailComponent.ɵfac = function SingleListDetailComponent_Factory(t) { return new (t || SingleListDetailComponent)(i0.ɵɵdirectiveInject(i1.Router), i0.ɵɵdirectiveInject(i1.ActivatedRoute), i0.ɵɵdirectiveInject(i2.SharedService)); };
428
- SingleListDetailComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SingleListDetailComponent, selectors: [["mj-list-detail"]], decls: 16, vars: 5, consts: [["searchInput", ""], [1, "app-container"], [1, "flex-display-row-header"], ["kendobutton", "", "themeColor", "info", 1, "add-btn", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "title-wrapper"], [1, "search"], ["type", "text", "placeholder", "Search in List", "size", "large", "rounded", "large", "fillMode", "solid", 3, "keyup", "clearButton"], ["kendoTextBoxPrefixTemplate", "", 3, "showSeparator"], ["type", "converging-spinner"], [3, "data"], ["class", "dialog-wrapper", "title", "Select Views to Add", 3, "minWidth", "width", "height", "close", 4, "ngIf"], [1, "fa-solid", "fa-magnifying-glass", "margin-left-small"], [3, "width", "headerStyle", "style", 4, "ngIf"], [3, "field", "title", "width", "editable", "editor", "headerStyle", "style", 4, "ngFor", "ngForOf"], [3, "width", "headerStyle"], [3, "field", "title", "width", "editable", "editor", "headerStyle"], [4, "ngIf"], ["kendoGridFooterTemplate", ""], [2, "font-size", "smaller", "font-weight", "normal"], ["title", "Select Views to Add", 1, "dialog-wrapper", 3, "close", "minWidth", "width", "height"], [1, "search-header"], ["id", "listSearch", "placeholder", "Search Views...", "kendoTextBox", "", 1, "search-bar", 3, "clearButton"], [1, "overflow-y-scroll"], [1, "popup-actions-btn"], ["kendoButton", "", "themeColor", "info", 1, "cancel-btn", 3, "click", "disabled"], ["kendoButton", "", "fillMode", "outline", "themeColor", "info", 1, "yes-btn", 3, "click", "disabled"], [1, "list-item"], [1, "list-text", 3, "ngClass"], ["kendoButton", "", 1, "btn-no-border", "btn-selected"], ["kendoButton", "", 1, "btn-no-border"], ["kendoButton", "", 1, "btn-no-border", "btn-selected", 3, "click"], [1, "fa-solid", "fa-minus"], ["kendoButton", "", 1, "btn-no-border", 3, "click"], [1, "btn-margin-right"]], template: function SingleListDetailComponent_Template(rf, ctx) { if (rf & 1) {
594
+ SingleListDetailComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SingleListDetailComponent, selectors: [["mj-list-detail"]], inputs: { ListID: "ListID" }, decls: 17, vars: 7, consts: [["searchInput", ""], [1, "app-container"], [1, "flex-display-row-header"], ["textField", "Text", "themeColor", "info", 1, "add-btn", 3, "itemClick", "data"], [1, "fa-solid", "fa-plus"], [1, "title-wrapper"], [1, "search"], ["type", "text", "placeholder", "Search in List", "size", "large", "rounded", "large", "fillMode", "solid", 3, "keyup", "clearButton"], ["kendoTextBoxPrefixTemplate", "", 3, "showSeparator"], ["type", "converging-spinner"], [3, "data"], ["class", "dialog-wrapper", "title", "Select Views to Add", 3, "minWidth", "width", "height", "close", 4, "ngIf"], ["class", "dialog-wrapper", 3, "title", "minWidth", "width", "height", "close", 4, "ngIf"], [1, "fa-solid", "fa-magnifying-glass", "margin-left-small"], [3, "width", "headerStyle", "style", 4, "ngIf"], [3, "field", "title", "width", "editable", "editor", "headerStyle", "style", 4, "ngFor", "ngForOf"], [3, "width", "headerStyle"], [3, "field", "title", "width", "editable", "editor", "headerStyle"], [4, "ngIf"], ["kendoGridFooterTemplate", ""], [2, "font-size", "smaller", "font-weight", "normal"], ["title", "Select Views to Add", 1, "dialog-wrapper", 3, "close", "minWidth", "width", "height"], [1, "popup-actions-btn"], ["kendoButton", "", "themeColor", "info", 1, "cancel-btn", 3, "click", "disabled"], ["kendoButton", "", "fillMode", "outline", "themeColor", "info", 1, "yes-btn", 3, "click", "disabled"], [3, "min", "max", "value", "indeterminate"], [1, "search-header"], ["id", "listSearch", "placeholder", "Search Views...", "kendoTextBox", "", 1, "search-bar", 3, "clearButton"], [1, "overflow-y-scroll"], [1, "list-item"], [1, "list-text", 3, "ngClass"], ["kendoButton", "", 1, "btn-no-border", "btn-selected"], ["kendoButton", "", 1, "btn-no-border"], ["kendoButton", "", 1, "btn-no-border", "btn-selected", 3, "click"], [1, "fa-solid", "fa-minus"], ["kendoButton", "", 1, "btn-no-border", 3, "click"], [1, "btn-margin-right"], [1, "dialog-wrapper", 3, "close", "title", "minWidth", "width", "height"], ["id", "listRecordSearch", "kendoTextBox", "", 1, "search-bar", 3, "valueChange", "placeholder", "clearButton"], [1, "list-text"]], template: function SingleListDetailComponent_Template(rf, ctx) { if (rf & 1) {
429
595
  const _r1 = i0.ɵɵgetCurrentView();
430
596
  i0.ɵɵelementStart(0, "div", 1)(1, "div", 2)(2, "h1");
431
597
  i0.ɵɵtext(3);
432
598
  i0.ɵɵelementEnd();
433
- i0.ɵɵelementStart(4, "button", 3);
434
- i0.ɵɵlistener("click", function SingleListDetailComponent_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.toggleAddDialog(true)); });
599
+ i0.ɵɵelementStart(4, "kendo-dropdownbutton", 3);
600
+ i0.ɵɵlistener("itemClick", function SingleListDetailComponent_Template_kendo_dropdownbutton_itemClick_4_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onDropdownItemClick($event)); });
435
601
  i0.ɵɵelement(5, "span", 4);
436
- i0.ɵɵtext(6, " Add More Records ");
602
+ i0.ɵɵtext(6, " Add to List ");
437
603
  i0.ɵɵelementEnd()();
438
604
  i0.ɵɵelementStart(7, "div")(8, "div", 5)(9, "div", 6)(10, "kendo-textbox", 7, 0);
439
- i0.ɵɵlistener("keyup", function SingleListDetailComponent_Template_kendo_textbox_keyup_10_listener() { i0.ɵɵrestoreView(_r1); const searchInput_r2 = i0.ɵɵreference(11); return i0.ɵɵresetView(ctx.onKeyup(searchInput_r2.value)); });
605
+ i0.ɵɵlistener("keyup", function SingleListDetailComponent_Template_kendo_textbox_keyup_10_listener() { i0.ɵɵrestoreView(_r1); const searchInput_r2 = i0.ɵɵreference(11); return i0.ɵɵresetView(ctx.onListSearchValueChange(searchInput_r2.value)); });
440
606
  i0.ɵɵtemplate(12, SingleListDetailComponent_ng_template_12_Template, 1, 0, "ng-template", 8);
441
607
  i0.ɵɵelementEnd()()()();
442
608
  i0.ɵɵtemplate(13, SingleListDetailComponent_Conditional_13_Template, 1, 0, "kendo-loader", 9)(14, SingleListDetailComponent_Conditional_14_Template, 3, 3, "kendo-grid", 10);
443
609
  i0.ɵɵelementEnd();
444
- i0.ɵɵtemplate(15, SingleListDetailComponent_kendo_dialog_15_Template, 12, 7, "kendo-dialog", 11);
610
+ i0.ɵɵtemplate(15, SingleListDetailComponent_kendo_dialog_15_Template, 8, 6, "kendo-dialog", 11)(16, SingleListDetailComponent_kendo_dialog_16_Template, 6, 6, "kendo-dialog", 12);
445
611
  } if (rf & 2) {
446
612
  i0.ɵɵadvance(3);
447
- i0.ɵɵtextInterpolate(ctx.listName);
448
- i0.ɵɵadvance(7);
613
+ i0.ɵɵtextInterpolate(ctx.listRecord ? ctx.listRecord.Name : "List");
614
+ i0.ɵɵadvance();
615
+ i0.ɵɵproperty("data", ctx.addOptions);
616
+ i0.ɵɵadvance(6);
449
617
  i0.ɵɵproperty("clearButton", true);
450
618
  i0.ɵɵadvance(2);
451
619
  i0.ɵɵproperty("showSeparator", true);
@@ -453,10 +621,14 @@ SingleListDetailComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: S
453
621
  i0.ɵɵconditional(ctx.showLoader ? 13 : 14);
454
622
  i0.ɵɵadvance(2);
455
623
  i0.ɵɵproperty("ngIf", ctx.showAddDialog);
456
- } }, dependencies: [i3.NgClass, i3.NgForOf, i3.NgIf, i4.GridComponent, i4.ColumnComponent, i4.FooterTemplateDirective, i4.CheckboxColumnComponent, i5.DialogComponent, i5.DialogActionsComponent, i6.LoaderComponent, i7.ButtonComponent, i8.TextBoxComponent, i8.TextBoxPrefixTemplateDirective, i3.DecimalPipe], styles: [".app-container[_ngcontent-%COMP%] {\n padding: 20px;\n}\n\n.flex-display-row-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding-bottom: 10px;\n}\n\n.title-wrapper[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 14px 0;\n border-bottom: 1px solid var(--med-gray);\n}\n\n.title-wrapper[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 24px;\n line-height: 28px;\n}\n\n.title-wrapper[_ngcontent-%COMP%] .search[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n font-size: 16px;\n background: transparent;\n border: none;\n box-sizing: border-box;\n padding-left: 40px;\n}\n\n .title-wrapper[_ngcontent-%COMP%] .search[_ngcontent-%COMP%] {\n background: var(--light-shade);\n width: 360px;\n height: 44px;\n position: relative;\n border-radius: 10px;\n}\n\n.title-wrapper[_ngcontent-%COMP%] .search[_ngcontent-%COMP%] svg[_ngcontent-%COMP%] {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n left: 12px;\n}\n\n.add-btn[_ngcontent-%COMP%] {\n padding: 10px 30px;\n border-radius: 10px;\n color: white;\n background-color: var(--border-blue);\n font-size: initial;\n cursor: pointer;\n}\n\n.add-btn[_ngcontent-%COMP%]:hover {\n filter: brightness(85%);\n}\n\n.margin-left-small[_ngcontent-%COMP%] {\n margin-left: 10px;\n}\n\n\n.overflow-y-scroll[_ngcontent-%COMP%] {\n overflow-y: auto;\n max-height: 300px;\n}\n\n.padding-bottom-small[_ngcontent-%COMP%] {\n padding-bottom: 10px;\n}\n\n.list-item[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n padding-bottom: 5px;\n align-items: center;\n}\n\n.btn-no-border[_ngcontent-%COMP%] {\n border: none;\n background: none;\n color: var(--border-blue);\n font-size: 16px;\n font-weight: 500;\n cursor: pointer;\n}\n\n.btn-selected[_ngcontent-%COMP%] {\n font-weight: bold;\n}\n\n.list-text[_ngcontent-%COMP%] {\n font-size: large;\n}\n.list-selected[_ngcontent-%COMP%] {\n font-weight: bold;\n color: var(--border-blue);\n}\n\n.btn-margin-right[_ngcontent-%COMP%] {\n margin-right: 35px;\n}\n\n.divider[_ngcontent-%COMP%] {\n color: lightgray\n}\n\n.search-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 10px 0;\n}\n\n.search-bar[_ngcontent-%COMP%] {\n width: 65%;\n padding-bottom: 10px;\n}\n\n.dialog-wrapper[_ngcontent-%COMP%] {\n padding: 15px 25px;\n}\n\n.btn-outline[_ngcontent-%COMP%] {\n border: 2px solid var(--border-blue);\n border-radius: 8px;\n padding: 5px 30px;\n\n background: none;\n color: var(--border-blue);\n font-size: 16px;\n font-weight: 500;\n cursor: pointer;\n}"] });
624
+ i0.ɵɵadvance();
625
+ i0.ɵɵproperty("ngIf", ctx.showAddSingleRecordsDialog);
626
+ } }, dependencies: [i3.NgClass, i3.NgForOf, i3.NgIf, i4.GridComponent, i4.ColumnComponent, i4.FooterTemplateDirective, i4.CheckboxColumnComponent, i5.DialogComponent, i5.DialogActionsComponent, i6.LoaderComponent, i7.ButtonComponent, i7.DropDownButtonComponent, i8.TextBoxComponent, i8.TextBoxPrefixTemplateDirective, i9.ProgressBarComponent, i3.DecimalPipe], styles: [".app-container[_ngcontent-%COMP%] {\n padding: 20px;\n}\n\n.flex-display-row-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding-bottom: 10px;\n}\n\n.title-wrapper[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 14px 0;\n border-bottom: 1px solid var(--med-gray);\n}\n\n.title-wrapper[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 24px;\n line-height: 28px;\n}\n\n.title-wrapper[_ngcontent-%COMP%] .search[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n font-size: 16px;\n background: transparent;\n border: none;\n box-sizing: border-box;\n padding-left: 40px;\n}\n\n .title-wrapper[_ngcontent-%COMP%] .search[_ngcontent-%COMP%] {\n background: var(--light-shade);\n width: 360px;\n height: 44px;\n position: relative;\n border-radius: 10px;\n}\n\n.title-wrapper[_ngcontent-%COMP%] .search[_ngcontent-%COMP%] svg[_ngcontent-%COMP%] {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n left: 12px;\n}\n\n.add-btn[_ngcontent-%COMP%] {\n padding: 10px 30px;\n border-radius: 10px;\n color: white;\n background-color: var(--border-blue);\n font-size: initial;\n cursor: pointer;\n}\n\n.add-btn[_ngcontent-%COMP%]:hover {\n filter: brightness(85%);\n}\n\n.margin-left-small[_ngcontent-%COMP%] {\n margin-left: 10px;\n}\n\n\n.overflow-y-scroll[_ngcontent-%COMP%] {\n overflow-y: auto;\n max-height: 300px;\n}\n\n.padding-bottom-small[_ngcontent-%COMP%] {\n padding-bottom: 10px;\n}\n\n.list-item[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n padding-bottom: 5px;\n align-items: center;\n}\n\n.btn-no-border[_ngcontent-%COMP%] {\n border: none;\n background: none;\n color: var(--border-blue);\n font-size: 16px;\n font-weight: 500;\n cursor: pointer;\n}\n\n.btn-selected[_ngcontent-%COMP%] {\n font-weight: bold;\n}\n\n.list-text[_ngcontent-%COMP%] {\n font-size: large;\n}\n.list-selected[_ngcontent-%COMP%] {\n font-weight: bold;\n color: var(--border-blue);\n}\n\n.btn-margin-right[_ngcontent-%COMP%] {\n margin-right: 35px;\n}\n\n.divider[_ngcontent-%COMP%] {\n color: lightgray\n}\n\n.search-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 10px 0;\n}\n\n.search-bar[_ngcontent-%COMP%] {\n width: 65%;\n padding-bottom: 10px;\n}\n\n.dialog-wrapper[_ngcontent-%COMP%] {\n padding: 15px 25px;\n}\n\n.btn-outline[_ngcontent-%COMP%] {\n border: 2px solid var(--border-blue);\n border-radius: 8px;\n padding: 5px 30px;\n\n background: none;\n color: var(--border-blue);\n font-size: 16px;\n font-weight: 500;\n cursor: pointer;\n}\n\n.k-dropdown-button[_ngcontent-%COMP%] .k-button[_ngcontent-%COMP%] {\n background: var(--border-blue);\n color: var(--white-color);\n font-size: 16px;\n border: none;\n padding: 8px 25px;\n border-radius: 10px;\n}\n\n.k-dropdown-button[_ngcontent-%COMP%] .k-button[_ngcontent-%COMP%] .k-button-text[_ngcontent-%COMP%] .card-header-entity[_ngcontent-%COMP%] .add-item[_ngcontent-%COMP%] .k-button[_ngcontent-%COMP%] .k-button-text[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.btn-cmn[_ngcontent-%COMP%] {\n width: 44px;\n height: 44px;\n min-width: 44px;\n background: transparent;\n border-radius: 8px;\n border: 1px solid var(--gray-color);\n}\n\n.btn-cmn.active[_ngcontent-%COMP%] {\n border: 1px solid var(--border-blue);\n}", ".main-area[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 100%;\n gap: 24px;\n padding: 24px 0;\n}\n.list-view[_ngcontent-%COMP%] {\n padding: 16px;\n min-width: 300px;\n border-radius: 4px;\n background: #FAFAFA;\n border: none;\n}\n .list-view .k-listview-header, \n .list-view .k-listview-footer {\n border: none;\n}\n .list-view .k-listview-content {\n border: 1px solid rgba(0, 0, 0, 0.08);\n border-radius: 4px;\n background: #fff;\n padding: 16px;\n}\n\n.header[_ngcontent-%COMP%], \n.footer[_ngcontent-%COMP%] {\n color: #424242;\n font-size: 16px;\n height: auto;\n margin:0;\n}\n\n.header[_ngcontent-%COMP%] {\n color: #424242;\n margin-bottom: 16px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n.header[_ngcontent-%COMP%] .head-tag[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n color: #424242;\nfont-size: 16px;\nfont-style: normal;\nfont-weight: 400;\nline-height: 20px;\n}\n\n.header[_ngcontent-%COMP%] .count[_ngcontent-%COMP%] {\n width: 24px;\n height: 24px;\n min-width: 24px;\n display: flex;\n justify-content: center;\n align-items: center;\n font-size: 10px;\n background: rgba(0, 0, 0, 0.08);\n border-radius: 50%;\n}\n.footer[_ngcontent-%COMP%] {\n font-size: 14px;\n margin-top: 16px;\n}\n\n.list-item[_ngcontent-%COMP%] {\n color: #424242;\n font-size: 14px;\n font-style: normal;\n font-weight: 400;\n line-height: 30px;\n cursor: pointer;\n margin: 4px;\n}\n.card-container[_ngcontent-%COMP%] {\n margin: 0;\n padding: 0;\n box-shadow: none;\n}\n.card-header-entity[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n padding-bottom: 20px;\n border-bottom: 1px solid rgba(0, 0, 0, 0.08);\n}\n.card-header-entity[_ngcontent-%COMP%] .title-wrap[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n color: #424242;\n font-size: 28px;\n font-style: normal;\n font-weight: 300;\n line-height: 28px;\n margin-bottom: 15px;\n}\n.card-header-entity[_ngcontent-%COMP%] .title-wrap[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n.card-header-entity[_ngcontent-%COMP%] .title-wrap[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n display: flex;\n align-items: center;\n gap: 8px;\n color: #424242;\n font-size: 14px;\n font-style: normal;\n font-weight: 400;\n line-height: 20px;\n}\n\n\n\n\n \n.view-card[_ngcontent-%COMP%] .view-icon[_ngcontent-%COMP%] {\n color: var(--sideNav);\n}\n.card-wrapper[_ngcontent-%COMP%] {\n border: 1px solid rgba(0, 0, 0, 0.08);\n border-radius: 6px;\n width: 100% !important;\n}\n.card-wrapper[_ngcontent-%COMP%] .k-card-body[_ngcontent-%COMP%] {\n background: #fff;\n padding: 12px 20px;\n}\n.card-wrapper[_ngcontent-%COMP%] .view-card[_ngcontent-%COMP%] {\n overflow: auto;\n display: flex;\n justify-content: space-between;\n align-items: center;\n background: #fafafa;\n padding: 4px 15px;\n}\n.view-card[_ngcontent-%COMP%] .btn-wrapper[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n}\n\n.k-card-body[_ngcontent-%COMP%] .view-card-content[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] {\n color: #424242;\n font-size: 16px;\n font-style: normal;\n font-weight: 400;\n line-height: 20px;\n margin-bottom: 0;\n letter-spacing: 0.18px;\n}\n.k-card-body[_ngcontent-%COMP%] .view-card-content[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n color: #666;\n font-size: 14px;\n font-style: normal;\n font-weight: 400;\n line-height: 20px;\n height: 48px;\n margin-bottom: 0;\n}\n.card-container[_ngcontent-%COMP%] {\n padding: 0;\n margin: 0;\n box-shadow: none;\n}\n.card-header-entity[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n padding-bottom: 20px;\n border-bottom: 1px solid rgba(0, 0, 0, 0.08);\n}\n\n.card-header-entity[_ngcontent-%COMP%] .title-wrap[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n color: #424242;\n font-size: 28px;\n font-style: normal;\n font-weight: 300;\n line-height: 28px;\n margin-bottom: 15px;\n}\n.card-header-entity[_ngcontent-%COMP%] .title-wrap[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n.card-header-entity[_ngcontent-%COMP%] .title-wrap[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n display: flex;\n align-items: center;\n gap: 8px;\n color: #424242;\n font-size: 14px;\n font-style: normal;\n font-weight: 400;\n line-height: 20px;\n}\n.main-area[_ngcontent-%COMP%] .card-list[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 20px;\n}"] });
457
627
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SingleListDetailComponent, [{
458
628
  type: Component,
459
- args: [{ selector: 'mj-list-detail', template: "<div class=\"app-container\">\n <div class=\"flex-display-row-header\">\n <h1>{{listName}}</h1>\n <button kendobutton class=\"add-btn\" (click)=\"toggleAddDialog(true)\" themeColor=\"info\">\n <span class=\"fa-solid fa-plus\"></span>\n Add More Records\n </button>\n </div>\n <div>\n <div class=\"title-wrapper\">\n <div class=\"search\">\n <kendo-textbox \n type=\"text\" \n #searchInput \n placeholder=\"Search in List\" \n (keyup)=\"onKeyup(searchInput.value)\"\n [clearButton]=\"true\"\n size=\"large\"\n rounded=\"large\"\n fillMode=\"solid\"\n >\n <ng-template kendoTextBoxPrefixTemplate [showSeparator]=\"true\">\n <span class=\"fa-solid fa-magnifying-glass margin-left-small\"></span>\n </ng-template>\n </kendo-textbox>\n </div>\n </div>\n </div>\n @if(showLoader){\n <kendo-loader type=\"converging-spinner\"></kendo-loader>\n }\n @else{\n\n <!--\n <kendo-grid #kendoGrid\n mjFillContainer\n [resizable]=\"true\"\n [data]=\"gridView\" \n [skip]=\"skip\"\n [pageSize]=\"pageSize\"\n scrollable=\"virtual\"\n [rowHeight]=\"36\"\n (pageChange)=\"pageChange($event)\"\n [loading]=\"isLoading\"\n [height]=\"gridHeight\"\n [sortable]=\"true\"\n [sort]=\"sortSettings\" \n [resizable]=\"true\"\n [reorderable]=\"true\"\n [selectable]=\"true\"\n kendoGridSelectBy\n [(selectedKeys)]=\"selectedKeys\"\n (cellClick)=\"cellClickHandler($event)\"\n (cellClose)=\"cellCloseHandler($event)\"\n (columnReorder)=\"columnReorder($event)\"\n (columnResize)=\"columnResize($event)\"\n (selectionChange)=\"selectionChange($event)\"\n (sortChange)=\"sortChanged($event)\"\n >\n -->\n\n <kendo-grid [data]=\"filteredGridData\">\n <kendo-grid-checkbox-column \n *ngIf=\"selectModeEnabled\" \n [width]=\"50\" \n [headerStyle]=\"{ 'font-weight' : 'bold', 'background-color': 'white' }\" \n [style]=\"{'text-align': 'center', 'vertical-align': 'center'}\">\n </kendo-grid-checkbox-column>\n \n <kendo-grid-column \n *ngFor=\"let item of visibleColumns\" \n [field]=\"item.Name || ''\" \n [title]=\"GetColumnTitle(item)\"\n [width]=\"item.width ? item.width : 100\"\n [editable]=\"item.EntityField?.AllowUpdateAPI || false\"\n [editor]=\"getEditor(item.EntityField)\"\n [headerStyle]=\"{ 'font-weight' : 'bold', 'background-color': 'white' }\"\n [style]=\"this.GetColumnCellStyle(item)\"\n >\n <ng-template *ngIf=\"item===visibleColumns[0]\" kendoGridFooterTemplate >\n {{this.filteredGridData.length | number}}{{this.totalRowCount > this.filteredGridData.length ? ' of ' + (this.totalRowCount | number) : ' rows'}}<br/><span style=\"font-size: smaller; font-weight: normal;\">{{viewExecutionTime | number:'1.2-2'}} seconds</span>\n </ng-template>\n </kendo-grid-column>\n\n <!--\n <kendo-excelexport #excelExport [data]=\"exportData\" [fileName]=\"(_viewEntity ? _viewEntity.Get('Name') : _entityInfo?.Name) + '.xlsx'\">\n <kendo-excelexport-column *ngFor=\"let exportCol of exportColumns\" [field]=\"exportCol.Name\" [title]=\"exportCol.Name\">\n </kendo-excelexport-column>\n </kendo-excelexport>\n -->\n </kendo-grid>\n }\n</div>\n\n<kendo-dialog\nclass=\"dialog-wrapper\"\ntitle=\"Select Views to Add\"\n*ngIf=\"showAddDialog\"\n(close)=\"toggleAddDialog(false)\"\n[minWidth]=\"250\"\n[width]=\"650\"\n[height]=\"550\"\n>\n<div class=\"search-header\">\n <kendo-textbox\n id=\"listSearch\"\n placeholder=\"Search Views...\"\n kendoTextBox\n [clearButton]=\"true\"\n class=\"search-bar\"\n></kendo-textbox>\n<!--\n<button kendoButton class=\"btn-no-border btn-outline\">\n <span class=\"fa-solid fa-plus\"></span>\n New View\n</button>\n-->\n</div>\n<hr>\n<div class=\"overflow-y-scroll\">\n @if(showAddLoader){\n <kendo-loader type=\"converging-spinner\"></kendo-loader>\n }\n @else {\n @for(userView of userViews; track userView){\n <div class=\"list-item\">\n <div class=\"list-text\" [ngClass]=\"{'list-selected': userViewsToAdd.includes(userView)}\">\n {{userView.Name}}\n </div>\n @if(userViewsToAdd.includes(userView)){\n <button kendoButton class=\"btn-no-border btn-selected\" (click)=\"removeViewFromSelectedList(userView)\">\n <span class=\"fa-solid fa-minus\"></span>\n Remove\n </button>\n }\n @else {\n <button kendoButton class=\"btn-no-border\" (click)=\"addViewToSelectedList(userView)\">\n <div class=\"btn-margin-right\">\n <span class=\"fa-solid fa-plus\"></span>\n Add\n </div>\n </button>\n }\n </div>\n <hr>\n }\n }\n</div>\n<kendo-dialog-actions class=\"popup-actions-btn\">\n <button class=\"cancel-btn\" (click)=\"addTolist()\" [disabled]=\"showAddLoader\" kendoButton themeColor=\"info\">\n Done\n </button>\n <button class=\"yes-btn\" (click)=\"toggleAddDialog(false)\" [disabled]=\"showAddLoader\" kendoButton fillMode=\"outline\" themeColor=\"info\">\n Cancel\n </button>\n</kendo-dialog-actions>\n</kendo-dialog>", styles: [".app-container {\n padding: 20px;\n}\n\n.flex-display-row-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding-bottom: 10px;\n}\n\n.title-wrapper {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 14px 0;\n border-bottom: 1px solid var(--med-gray);\n}\n\n.title-wrapper h4 {\n margin: 0;\n font-size: 24px;\n line-height: 28px;\n}\n\n.title-wrapper .search input {\n width: 100%;\n height: 100%;\n font-size: 16px;\n background: transparent;\n border: none;\n box-sizing: border-box;\n padding-left: 40px;\n}\n\n .title-wrapper .search {\n background: var(--light-shade);\n width: 360px;\n height: 44px;\n position: relative;\n border-radius: 10px;\n}\n\n.title-wrapper .search svg {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n left: 12px;\n}\n\n.add-btn {\n padding: 10px 30px;\n border-radius: 10px;\n color: white;\n background-color: var(--border-blue);\n font-size: initial;\n cursor: pointer;\n}\n\n.add-btn:hover {\n filter: brightness(85%);\n}\n\n.margin-left-small {\n margin-left: 10px;\n}\n\n\n.overflow-y-scroll {\n overflow-y: auto;\n max-height: 300px;\n}\n\n.padding-bottom-small {\n padding-bottom: 10px;\n}\n\n.list-item {\n display: flex;\n justify-content: space-between;\n padding-bottom: 5px;\n align-items: center;\n}\n\n.btn-no-border {\n border: none;\n background: none;\n color: var(--border-blue);\n font-size: 16px;\n font-weight: 500;\n cursor: pointer;\n}\n\n.btn-selected {\n font-weight: bold;\n}\n\n.list-text {\n font-size: large;\n}\n.list-selected {\n font-weight: bold;\n color: var(--border-blue);\n}\n\n.btn-margin-right {\n margin-right: 35px;\n}\n\n.divider {\n color: lightgray\n}\n\n.search-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 10px 0;\n}\n\n.search-bar {\n width: 65%;\n padding-bottom: 10px;\n}\n\n.dialog-wrapper {\n padding: 15px 25px;\n}\n\n.btn-outline {\n border: 2px solid var(--border-blue);\n border-radius: 8px;\n padding: 5px 30px;\n\n background: none;\n color: var(--border-blue);\n font-size: 16px;\n font-weight: 500;\n cursor: pointer;\n}"] }]
460
- }], () => [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.SharedService }], null); })();
461
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SingleListDetailComponent, { className: "SingleListDetailComponent", filePath: "src/lib/single-list-detail/single-list-detail.component.ts", lineNumber: 14 }); })();
629
+ args: [{ selector: 'mj-list-detail', template: "<div class=\"app-container\">\n <div class=\"flex-display-row-header\">\n <h1>{{listRecord ? listRecord.Name: \"List\"}}</h1>\n <kendo-dropdownbutton \n class=\"add-btn\" \n (itemClick)=\"onDropdownItemClick($event)\" \n [data]=\"addOptions\" \n textField=\"Text\"\n themeColor=\"info\">\n <span class=\"fa-solid fa-plus\"></span>\n Add to List\n </kendo-dropdownbutton> \n </div>\n <div>\n <div class=\"title-wrapper\">\n <div class=\"search\">\n <kendo-textbox \n type=\"text\" \n #searchInput \n placeholder=\"Search in List\" \n (keyup)=\"onListSearchValueChange(searchInput.value)\"\n [clearButton]=\"true\"\n size=\"large\"\n rounded=\"large\"\n fillMode=\"solid\"\n >\n <ng-template kendoTextBoxPrefixTemplate [showSeparator]=\"true\">\n <span class=\"fa-solid fa-magnifying-glass margin-left-small\"></span>\n </ng-template>\n </kendo-textbox>\n </div>\n </div>\n </div>\n @if(showLoader){\n <kendo-loader type=\"converging-spinner\"></kendo-loader>\n }\n @else{\n <kendo-grid [data]=\"filteredGridData\">\n <kendo-grid-checkbox-column \n *ngIf=\"selectModeEnabled\" \n [width]=\"50\" \n [headerStyle]=\"{ 'font-weight' : 'bold', 'background-color': 'white' }\" \n [style]=\"{'text-align': 'center', 'vertical-align': 'center'}\">\n </kendo-grid-checkbox-column>\n \n <kendo-grid-column \n *ngFor=\"let item of visibleColumns\" \n [field]=\"item.Name || ''\" \n [title]=\"GetColumnTitle(item)\"\n [width]=\"item.width ? item.width : 100\"\n [editable]=\"item.EntityField?.AllowUpdateAPI || false\"\n [editor]=\"getEditor(item.EntityField)\"\n [headerStyle]=\"{ 'font-weight' : 'bold', 'background-color': 'white' }\"\n [style]=\"this.GetColumnCellStyle(item)\"\n >\n <ng-template *ngIf=\"item===visibleColumns[0]\" kendoGridFooterTemplate >\n {{this.filteredGridData.length | number}}{{this.totalRowCount > this.filteredGridData.length ? ' of ' + (this.totalRowCount | number) : ' rows'}}<br/><span style=\"font-size: smaller; font-weight: normal;\">{{viewExecutionTime | number:'1.2-2'}} seconds</span>\n </ng-template>\n </kendo-grid-column>\n\n <!--\n <kendo-excelexport #excelExport [data]=\"exportData\" [fileName]=\"(_viewEntity ? _viewEntity.Get('Name') : _entityInfo?.Name) + '.xlsx'\">\n <kendo-excelexport-column *ngFor=\"let exportCol of exportColumns\" [field]=\"exportCol.Name\" [title]=\"exportCol.Name\">\n </kendo-excelexport-column>\n </kendo-excelexport>\n -->\n </kendo-grid>\n }\n</div>\n\n<kendo-dialog\nclass=\"dialog-wrapper\"\ntitle=\"Select Views to Add\"\n*ngIf=\"showAddDialog\"\n(close)=\"toggleAddFromViewDialog(false)\"\n[minWidth]=\"250\"\n[width]=\"650\"\n[height]=\"550\"\n>\n@if(showAddLoader){\n <kendo-loader type=\"converging-spinner\"></kendo-loader>\n <kendo-progressbar \n [min]=\"0\"\n [max]=\"recordsToSave\"\n [value]=\"recordsSaved\"\n [indeterminate]=\"fetchingRecordsToSave\"\n />\n}\n@else {\n <div class=\"search-header\">\n <kendo-textbox\n id=\"listSearch\"\n placeholder=\"Search Views...\"\n kendoTextBox\n [clearButton]=\"true\"\n class=\"search-bar\"\n />\n </div>\n <hr>\n @for(userView of userViews; track userView){\n <div class=\"overflow-y-scroll\">\n <div class=\"list-item\">\n <div class=\"list-text\" [ngClass]=\"{'list-selected': userViewsToAdd.includes(userView)}\">\n {{userView.Name}}\n </div>\n @if(userViewsToAdd.includes(userView)){\n <button kendoButton class=\"btn-no-border btn-selected\" (click)=\"removeViewFromSelectedList(userView)\">\n <span class=\"fa-solid fa-minus\"></span>\n Remove\n </button>\n }\n @else {\n <button kendoButton class=\"btn-no-border\" (click)=\"addViewToSelectedList(userView)\">\n <div class=\"btn-margin-right\">\n <span class=\"fa-solid fa-plus\"></span>\n Add\n </div>\n </button>\n }\n </div>\n <hr>\n </div>\n }\n}\n <kendo-dialog-actions class=\"popup-actions-btn\">\n <button class=\"cancel-btn\" (click)=\"addTolist()\" [disabled]=\"showAddLoader\" kendoButton themeColor=\"info\">\n Done\n </button>\n <button class=\"yes-btn\" (click)=\"toggleAddFromViewDialog(false)\" [disabled]=\"showAddLoader\" kendoButton fillMode=\"outline\" themeColor=\"info\">\n Cancel\n </button>\n </kendo-dialog-actions>\n</kendo-dialog>\n\n<kendo-dialog\nclass=\"dialog-wrapper\"\n[title]=\"'Select ' + (listRecord ? listRecord.Entity : 'Records') + ' to Add to List'\"\n*ngIf=\"showAddSingleRecordsDialog\"\n(close)=\"toggleAddRecordsDialog(false)\"\n[minWidth]=\"250\"\n[width]=\"650\"\n[height]=\"550\"\n>\n@if(showDialogLoader){\n <kendo-loader type=\"converging-spinner\"></kendo-loader>\n <kendo-progressbar \n [min]=\"0\"\n [max]=\"recordsToSave\"\n [value]=\"recordsSaved\"\n [indeterminate]=\"fetchingRecordsToSave\"\n />\n}\n@else {\n <div class=\"search-header\">\n <kendo-textbox\n id=\"listRecordSearch\"\n (valueChange)=\"onListRecordDialogValueChange($event)\"\n [placeholder]=\"'Search ' + (listRecord ? listRecord.Entity : 'Records') + '...'\"\n kendoTextBox\n [clearButton]=\"true\"\n class=\"search-bar\"\n />\n </div>\n <hr>\n @if(fetchingListRecords){\n <kendo-loader type=\"converging-spinner\"></kendo-loader>\n }\n @else {\n @for(listRecord of listRecords; track listRecord){\n <div class=\"overflow-y-scroll\">\n <div class=\"list-item\">\n <div class=\"list-text\">\n {{listRecord.Name}}\n </div>\n <button kendoButton class=\"btn-no-border\" (click)=\"addListRecord(listRecord)\">\n <div class=\"btn-margin-right\">\n <span class=\"fa-solid fa-plus\"></span>\n Add\n </div>\n </button>\n </div>\n <hr>\n </div>\n }\n }\n}\n <kendo-dialog-actions class=\"popup-actions-btn\">\n <button class=\"yes-btn\" (click)=\"toggleAddRecordsDialog(false)\" [disabled]=\"showDialogLoader\" kendoButton fillMode=\"outline\" themeColor=\"info\">\n Close\n </button>\n </kendo-dialog-actions>\n</kendo-dialog>", styles: [".app-container {\n padding: 20px;\n}\n\n.flex-display-row-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding-bottom: 10px;\n}\n\n.title-wrapper {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 14px 0;\n border-bottom: 1px solid var(--med-gray);\n}\n\n.title-wrapper h4 {\n margin: 0;\n font-size: 24px;\n line-height: 28px;\n}\n\n.title-wrapper .search input {\n width: 100%;\n height: 100%;\n font-size: 16px;\n background: transparent;\n border: none;\n box-sizing: border-box;\n padding-left: 40px;\n}\n\n .title-wrapper .search {\n background: var(--light-shade);\n width: 360px;\n height: 44px;\n position: relative;\n border-radius: 10px;\n}\n\n.title-wrapper .search svg {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n left: 12px;\n}\n\n.add-btn {\n padding: 10px 30px;\n border-radius: 10px;\n color: white;\n background-color: var(--border-blue);\n font-size: initial;\n cursor: pointer;\n}\n\n.add-btn:hover {\n filter: brightness(85%);\n}\n\n.margin-left-small {\n margin-left: 10px;\n}\n\n\n.overflow-y-scroll {\n overflow-y: auto;\n max-height: 300px;\n}\n\n.padding-bottom-small {\n padding-bottom: 10px;\n}\n\n.list-item {\n display: flex;\n justify-content: space-between;\n padding-bottom: 5px;\n align-items: center;\n}\n\n.btn-no-border {\n border: none;\n background: none;\n color: var(--border-blue);\n font-size: 16px;\n font-weight: 500;\n cursor: pointer;\n}\n\n.btn-selected {\n font-weight: bold;\n}\n\n.list-text {\n font-size: large;\n}\n.list-selected {\n font-weight: bold;\n color: var(--border-blue);\n}\n\n.btn-margin-right {\n margin-right: 35px;\n}\n\n.divider {\n color: lightgray\n}\n\n.search-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 10px 0;\n}\n\n.search-bar {\n width: 65%;\n padding-bottom: 10px;\n}\n\n.dialog-wrapper {\n padding: 15px 25px;\n}\n\n.btn-outline {\n border: 2px solid var(--border-blue);\n border-radius: 8px;\n padding: 5px 30px;\n\n background: none;\n color: var(--border-blue);\n font-size: 16px;\n font-weight: 500;\n cursor: pointer;\n}\n\n.k-dropdown-button .k-button {\n background: var(--border-blue);\n color: var(--white-color);\n font-size: 16px;\n border: none;\n padding: 8px 25px;\n border-radius: 10px;\n}\n\n.k-dropdown-button .k-button .k-button-text .card-header-entity .add-item .k-button .k-button-text {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.btn-cmn {\n width: 44px;\n height: 44px;\n min-width: 44px;\n background: transparent;\n border-radius: 8px;\n border: 1px solid var(--gray-color);\n}\n\n.btn-cmn.active {\n border: 1px solid var(--border-blue);\n}", "\n.main-area {\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 100%;\n gap: 24px;\n padding: 24px 0;\n}\n.list-view {\n padding: 16px;\n min-width: 300px;\n border-radius: 4px;\n background: #FAFAFA;\n border: none;\n}\n::ng-deep .list-view .k-listview-header, \n::ng-deep .list-view .k-listview-footer {\n border: none;\n}\n::ng-deep .list-view .k-listview-content {\n border: 1px solid rgba(0, 0, 0, 0.08);\n border-radius: 4px;\n background: #fff;\n padding: 16px;\n}\n\n.header,\n.footer {\n color: #424242;\n font-size: 16px;\n height: auto;\n margin:0;\n}\n\n.header {\n color: #424242;\n margin-bottom: 16px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n.header .head-tag {\n display: flex;\n align-items: center;\n gap: 8px;\n color: #424242;\nfont-size: 16px;\nfont-style: normal;\nfont-weight: 400;\nline-height: 20px;\n}\n\n.header .count {\n width: 24px;\n height: 24px;\n min-width: 24px;\n display: flex;\n justify-content: center;\n align-items: center;\n font-size: 10px;\n background: rgba(0, 0, 0, 0.08);\n border-radius: 50%;\n}\n.footer {\n font-size: 14px;\n margin-top: 16px;\n}\n\n.list-item {\n color: #424242;\n font-size: 14px;\n font-style: normal;\n font-weight: 400;\n line-height: 30px;\n cursor: pointer;\n margin: 4px;\n}\n.card-container {\n margin: 0;\n padding: 0;\n box-shadow: none;\n}\n.card-header-entity {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n padding-bottom: 20px;\n border-bottom: 1px solid rgba(0, 0, 0, 0.08);\n}\n.card-header-entity .title-wrap h1 {\n color: #424242;\n font-size: 28px;\n font-style: normal;\n font-weight: 300;\n line-height: 28px;\n margin-bottom: 15px;\n}\n.card-header-entity .title-wrap {\n display: flex;\n flex-direction: column;\n}\n.card-header-entity .title-wrap p {\n margin: 0;\n display: flex;\n align-items: center;\n gap: 8px;\n color: #424242;\n font-size: 14px;\n font-style: normal;\n font-weight: 400;\n line-height: 20px;\n}\n\n\n\n\n \n.view-card .view-icon {\n color: var(--sideNav);\n}\n.card-wrapper {\n border: 1px solid rgba(0, 0, 0, 0.08);\n border-radius: 6px;\n width: 100% !important;\n}\n.card-wrapper .k-card-body {\n background: #fff;\n padding: 12px 20px;\n}\n.card-wrapper .view-card {\n overflow: auto;\n display: flex;\n justify-content: space-between;\n align-items: center;\n background: #fafafa;\n padding: 4px 15px;\n}\n.view-card .btn-wrapper {\n display: flex;\n align-items: center;\n}\n\n.k-card-body .view-card-content h5 {\n color: #424242;\n font-size: 16px;\n font-style: normal;\n font-weight: 400;\n line-height: 20px;\n margin-bottom: 0;\n letter-spacing: 0.18px;\n}\n.k-card-body .view-card-content p {\n color: #666;\n font-size: 14px;\n font-style: normal;\n font-weight: 400;\n line-height: 20px;\n height: 48px;\n margin-bottom: 0;\n}\n.card-container {\n padding: 0;\n margin: 0;\n box-shadow: none;\n}\n.card-header-entity {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n padding-bottom: 20px;\n border-bottom: 1px solid rgba(0, 0, 0, 0.08);\n}\n\n.card-header-entity .title-wrap h1 {\n color: #424242;\n font-size: 28px;\n font-style: normal;\n font-weight: 300;\n line-height: 28px;\n margin-bottom: 15px;\n}\n.card-header-entity .title-wrap {\n display: flex;\n flex-direction: column;\n}\n.card-header-entity .title-wrap p {\n margin: 0;\n display: flex;\n align-items: center;\n gap: 8px;\n color: #424242;\n font-size: 14px;\n font-style: normal;\n font-weight: 400;\n line-height: 20px;\n}\n.main-area .card-list {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 20px;\n}\n"] }]
630
+ }], () => [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.SharedService }], { ListID: [{
631
+ type: Input
632
+ }] }); })();
633
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SingleListDetailComponent, { className: "SingleListDetailComponent", filePath: "src/lib/single-list-detail/single-list-detail.component.ts", lineNumber: 15 }); })();
462
634
  //# sourceMappingURL=single-list-detail.component.js.map