@memberjunction/ng-explorer-core 2.1.4 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,8 +1,8 @@
1
1
  import { BaseNavigationComponent } from '@memberjunction/ng-shared';
2
2
  import * as i0 from "@angular/core";
3
3
  export declare class FilesComponent extends BaseNavigationComponent {
4
- CategoryID: number | undefined;
5
- categorySelected(newCategoryID: number): void;
4
+ CategoryID: string | undefined;
5
+ categorySelected(newCategoryID: string | undefined): void;
6
6
  constructor();
7
7
  static ɵfac: i0.ɵɵFactoryDeclaration<FilesComponent, never>;
8
8
  static ɵcmp: i0.ɵɵComponentDeclaration<FilesComponent, "app-files", never, {}, {}, never, never, false, never>;
@@ -1 +1 @@
1
- {"version":3,"file":"files.component.d.ts","sourceRoot":"","sources":["../../../src/lib/files/files.component.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;;AAEpE,qBAMa,cAAe,SAAQ,uBAAuB;IAClD,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAE/B,gBAAgB,CAAC,aAAa,EAAE,MAAM;;yCAHlC,cAAc;2CAAd,cAAc;CAU1B"}
1
+ {"version":3,"file":"files.component.d.ts","sourceRoot":"","sources":["../../../src/lib/files/files.component.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;;AAEpE,qBAMa,cAAe,SAAQ,uBAAuB;IAClD,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAE/B,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS;;yCAH9C,cAAc;2CAAd,cAAc;CAU1B"}
@@ -1,14 +1,16 @@
1
1
  import { OnInit } from '@angular/core';
2
2
  import { Router, ActivatedRoute } from '@angular/router';
3
- import { BaseEntity } from '@memberjunction/core';
4
- import { UserViewEntity } from '@memberjunction/core-entities';
3
+ import { BaseEntity, EntityFieldInfo } from '@memberjunction/core';
4
+ import { UserViewEntity, ViewColumnInfo } from '@memberjunction/core-entities';
5
5
  import { SharedService } from '@memberjunction/ng-shared';
6
+ import { PageChangeEvent } from '@progress/kendo-angular-grid';
6
7
  import * as i0 from "@angular/core";
7
8
  export declare class SingleListDetailComponent implements OnInit {
8
9
  private router;
9
10
  private route;
10
11
  private sharedService;
11
12
  private listRecord;
13
+ private listID;
12
14
  showLoader: boolean;
13
15
  sourceGridData: BaseEntity[];
14
16
  filteredGridData: BaseEntity[];
@@ -20,9 +22,23 @@ export declare class SingleListDetailComponent implements OnInit {
20
22
  private filterItemsSubject;
21
23
  private filter;
22
24
  userViewsToAdd: UserViewEntity[];
25
+ page: number;
26
+ pageSize: number;
27
+ gridHeight: number;
28
+ sortSettings: any[];
29
+ selectedKeys: any[];
30
+ selectModeEnabled: boolean;
31
+ viewColumns: Partial<ViewColumnInfo>[];
32
+ visibleColumns: Partial<ViewColumnInfo>[];
33
+ totalRowCount: number;
34
+ viewExecutionTime: number;
23
35
  constructor(router: Router, route: ActivatedRoute, sharedService: SharedService);
24
36
  ngOnInit(): Promise<void>;
25
37
  private loadList;
38
+ pageChange(event: PageChangeEvent): void;
39
+ GetColumnTitle(col: Partial<ViewColumnInfo>): string;
40
+ getEditor(ef: EntityFieldInfo | undefined): "boolean" | "text" | "numeric" | "date";
41
+ GetColumnCellStyle(col: Partial<ViewColumnInfo>): Record<'text-align' | 'vertical-align', string>;
26
42
  toggleAddDialog(show: boolean): Promise<void>;
27
43
  private loadEntityViews;
28
44
  addTolist(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"single-list-detail.component.d.ts","sourceRoot":"","sources":["../../../src/lib/single-list-detail/single-list-detail.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAqE,MAAM,sBAAsB,CAAC;AACrH,OAAO,EAAgC,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC7F,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;;AAG1D,qBAKa,yBAA0B,YAAW,MAAM;IAiBvC,OAAO,CAAC,MAAM;IAAU,OAAO,CAAC,KAAK;IAAkB,OAAO,CAAC,aAAa;IAhBzF,OAAO,CAAC,UAAU,CAA2B;IAEtC,UAAU,EAAE,OAAO,CAAS;IAC5B,cAAc,EAAE,UAAU,EAAE,CAAM;IAClC,gBAAgB,EAAE,UAAU,EAAE,CAAM;IACpC,QAAQ,EAAE,MAAM,CAAM;IACtB,aAAa,EAAE,OAAO,CAAS;IAC/B,aAAa,EAAE,OAAO,CAAS;IAC/B,SAAS,EAAE,cAAc,EAAE,GAAG,IAAI,CAAQ;IAEjD,OAAO,CAAC,mBAAmB,CAAe;IAC1C,OAAO,CAAC,kBAAkB,CAA+B;IACzD,OAAO,CAAC,MAAM,CAAc;IAErB,cAAc,EAAE,cAAc,EAAE,CAAM;gBAExB,MAAM,EAAE,MAAM,EAAU,KAAK,EAAE,cAAc,EAAU,aAAa,EAAE,aAAa;IAO3F,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;YASxB,QAAQ;IA8DT,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;YAQ5C,eAAe;IA0BhB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAsDhC,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKnC,OAAO,CAAC,WAAW;IAiBZ,qBAAqB,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAIjD,0BAA0B,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;yCAjNpD,yBAAyB;2CAAzB,yBAAyB;CAoNrC"}
1
+ {"version":3,"file":"single-list-detail.component.d.ts","sourceRoot":"","sources":["../../../src/lib/single-list-detail/single-list-detail.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,eAAe,EAAwF,MAAM,sBAAsB,CAAC;AACzJ,OAAO,EAAgC,cAAc,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC7G,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;;AAG/D,qBAKa,yBAA0B,YAAW,MAAM;IA6BvC,OAAO,CAAC,MAAM;IAAU,OAAO,CAAC,KAAK;IAAkB,OAAO,CAAC,aAAa;IA5BzF,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,MAAM,CAAc;IAErB,UAAU,EAAE,OAAO,CAAS;IAC5B,cAAc,EAAE,UAAU,EAAE,CAAM;IAClC,gBAAgB,EAAE,UAAU,EAAE,CAAM;IACpC,QAAQ,EAAE,MAAM,CAAM;IACtB,aAAa,EAAE,OAAO,CAAS;IAC/B,aAAa,EAAE,OAAO,CAAS;IAC/B,SAAS,EAAE,cAAc,EAAE,GAAG,IAAI,CAAQ;IAEjD,OAAO,CAAC,mBAAmB,CAAe;IAC1C,OAAO,CAAC,kBAAkB,CAA+B;IACzD,OAAO,CAAC,MAAM,CAAc;IAErB,cAAc,EAAE,cAAc,EAAE,CAAM;IAEtC,IAAI,EAAE,MAAM,CAAK;IACjB,QAAQ,EAAE,MAAM,CAAM;IACtB,UAAU,EAAE,MAAM,CAAO;IACzB,YAAY,EAAE,GAAG,EAAE,CAAM;IACzB,YAAY,EAAE,GAAG,EAAE,CAAM;IACzB,iBAAiB,EAAE,OAAO,CAAS;IACnC,WAAW,EAAE,OAAO,CAAC,cAAc,CAAC,EAAE,CAAM;IAC5C,cAAc,EAAE,OAAO,CAAC,cAAc,CAAC,EAAE,CAAM;IAC/C,aAAa,EAAE,MAAM,CAAK;IAC1B,iBAAiB,EAAE,MAAM,CAAK;gBAEhB,MAAM,EAAE,MAAM,EAAU,KAAK,EAAE,cAAc,EAAU,aAAa,EAAE,aAAa;IAO3F,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;YASxB,QAAQ;IAiGf,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IAK/C,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,MAAM;IAe7C,SAAS,CAAC,EAAE,EAAE,eAAe,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM;IAiB1F,kBAAkB,CAAC,GAAG,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,MAAM,CAAC,YAAY,GAAG,gBAAgB,EAAE,MAAM,CAAC;IAoBpF,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;YAQ5C,eAAe;IA0BhB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAsDhC,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKnC,OAAO,CAAC,WAAW;IAiBZ,qBAAqB,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAIjD,0BAA0B,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;yCAzTpD,yBAAyB;2CAAzB,yBAAyB;CA4TrC"}
@@ -8,7 +8,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  });
9
9
  };
10
10
  import { Component } from '@angular/core';
11
- import { LogError, LogStatus, Metadata, RunView } from '@memberjunction/core';
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";
14
14
  import * as i1 from "@angular/router";
@@ -19,55 +19,99 @@ 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
- const _c0 = a0 => ({ "list-selected": a0 });
22
+ const _c0 = () => ({ "text-align": "center", "vertical-align": "center" });
23
+ const _c1 = () => ({ "font-weight": "bold", "background-color": "white" });
24
+ const _c2 = a0 => ({ "list-selected": a0 });
23
25
  function SingleListDetailComponent_ng_template_12_Template(rf, ctx) { if (rf & 1) {
24
26
  i0.ɵɵelement(0, "span", 12);
25
27
  } }
26
28
  function SingleListDetailComponent_Conditional_13_Template(rf, ctx) { if (rf & 1) {
27
29
  i0.ɵɵelement(0, "kendo-loader", 9);
28
30
  } }
31
+ 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
+ } if (rf & 2) {
34
+ i0.ɵɵstyleMap(i0.ɵɵpureFunction0(4, _c0));
35
+ i0.ɵɵproperty("width", 50)("headerStyle", i0.ɵɵpureFunction0(5, _c1));
36
+ } }
37
+ function SingleListDetailComponent_Conditional_14_kendo_grid_column_2_1_ng_template_0_Template(rf, ctx) { if (rf & 1) {
38
+ i0.ɵɵtext(0);
39
+ i0.ɵɵpipe(1, "number");
40
+ i0.ɵɵpipe(2, "number");
41
+ i0.ɵɵelement(3, "br");
42
+ i0.ɵɵelementStart(4, "span", 19);
43
+ i0.ɵɵtext(5);
44
+ i0.ɵɵpipe(6, "number");
45
+ i0.ɵɵelementEnd();
46
+ } if (rf & 2) {
47
+ const ctx_r2 = i0.ɵɵnextContext(4);
48
+ i0.ɵɵtextInterpolate2(" ", i0.ɵɵpipeBind1(1, 3, ctx_r2.filteredGridData.length), "", ctx_r2.totalRowCount > ctx_r2.filteredGridData.length ? " of " + i0.ɵɵpipeBind1(2, 5, ctx_r2.totalRowCount) : " rows", "");
49
+ i0.ɵɵadvance(5);
50
+ i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind2(6, 7, ctx_r2.viewExecutionTime, "1.2-2"), " seconds");
51
+ } }
52
+ 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
+ } }
55
+ 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);
58
+ i0.ɵɵelementEnd();
59
+ } if (rf & 2) {
60
+ const item_r4 = ctx.$implicit;
61
+ const ctx_r2 = i0.ɵɵnextContext(2);
62
+ i0.ɵɵstyleMap(ctx_r2.GetColumnCellStyle(item_r4));
63
+ i0.ɵɵproperty("field", item_r4.Name || "")("title", ctx_r2.GetColumnTitle(item_r4))("width", item_r4.width ? item_r4.width : 100)("editable", (item_r4.EntityField == null ? null : item_r4.EntityField.AllowUpdateAPI) || false)("editor", ctx_r2.getEditor(item_r4.EntityField))("headerStyle", i0.ɵɵpureFunction0(9, _c1));
64
+ i0.ɵɵadvance();
65
+ i0.ɵɵproperty("ngIf", item_r4 === ctx_r2.visibleColumns[0]);
66
+ } }
29
67
  function SingleListDetailComponent_Conditional_14_Template(rf, ctx) { if (rf & 1) {
30
- i0.ɵɵelement(0, "kendo-grid", 10);
68
+ 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.ɵɵelementEnd();
31
71
  } if (rf & 2) {
32
72
  const ctx_r2 = i0.ɵɵnextContext();
33
73
  i0.ɵɵproperty("data", ctx_r2.filteredGridData);
74
+ i0.ɵɵadvance();
75
+ i0.ɵɵproperty("ngIf", ctx_r2.selectModeEnabled);
76
+ i0.ɵɵadvance();
77
+ i0.ɵɵproperty("ngForOf", ctx_r2.visibleColumns);
34
78
  } }
35
79
  function SingleListDetailComponent_kendo_dialog_15_Conditional_5_Template(rf, ctx) { if (rf & 1) {
36
80
  i0.ɵɵelement(0, "kendo-loader", 9);
37
81
  } }
38
82
  function SingleListDetailComponent_kendo_dialog_15_Conditional_6_For_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
39
- const _r5 = i0.ɵɵgetCurrentView();
40
- i0.ɵɵelementStart(0, "button", 24);
41
- i0.ɵɵlistener("click", function SingleListDetailComponent_kendo_dialog_15_Conditional_6_For_1_Conditional_3_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r5); const userView_r6 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.removeViewFromSelectedList(userView_r6)); });
42
- i0.ɵɵelement(1, "span", 25);
83
+ 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);
43
87
  i0.ɵɵtext(2, " Remove ");
44
88
  i0.ɵɵelementEnd();
45
89
  } }
46
90
  function SingleListDetailComponent_kendo_dialog_15_Conditional_6_For_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
47
- const _r7 = i0.ɵɵgetCurrentView();
48
- i0.ɵɵelementStart(0, "button", 26);
49
- i0.ɵɵlistener("click", function SingleListDetailComponent_kendo_dialog_15_Conditional_6_For_1_Conditional_4_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r7); const userView_r6 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.addViewToSelectedList(userView_r6)); });
50
- i0.ɵɵelementStart(1, "div", 27);
91
+ 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);
51
95
  i0.ɵɵelement(2, "span", 4);
52
96
  i0.ɵɵtext(3, " Add ");
53
97
  i0.ɵɵelementEnd()();
54
98
  } }
55
99
  function SingleListDetailComponent_kendo_dialog_15_Conditional_6_For_1_Template(rf, ctx) { if (rf & 1) {
56
- i0.ɵɵelementStart(0, "div", 20)(1, "div", 21);
100
+ i0.ɵɵelementStart(0, "div", 27)(1, "div", 28);
57
101
  i0.ɵɵtext(2);
58
102
  i0.ɵɵelementEnd();
59
- i0.ɵɵtemplate(3, SingleListDetailComponent_kendo_dialog_15_Conditional_6_For_1_Conditional_3_Template, 3, 0, "button", 22)(4, SingleListDetailComponent_kendo_dialog_15_Conditional_6_For_1_Conditional_4_Template, 4, 0, "button", 23);
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);
60
104
  i0.ɵɵelementEnd();
61
105
  i0.ɵɵelement(5, "hr");
62
106
  } if (rf & 2) {
63
- const userView_r6 = ctx.$implicit;
107
+ const userView_r7 = ctx.$implicit;
64
108
  const ctx_r2 = i0.ɵɵnextContext(3);
65
109
  i0.ɵɵadvance();
66
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(3, _c0, ctx_r2.userViewsToAdd.includes(userView_r6)));
110
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(3, _c2, ctx_r2.userViewsToAdd.includes(userView_r7)));
67
111
  i0.ɵɵadvance();
68
- i0.ɵɵtextInterpolate1(" ", userView_r6.Name, " ");
112
+ i0.ɵɵtextInterpolate1(" ", userView_r7.Name, " ");
69
113
  i0.ɵɵadvance();
70
- i0.ɵɵconditional(ctx_r2.userViewsToAdd.includes(userView_r6) ? 3 : 4);
114
+ i0.ɵɵconditional(ctx_r2.userViewsToAdd.includes(userView_r7) ? 3 : 4);
71
115
  } }
72
116
  function SingleListDetailComponent_kendo_dialog_15_Conditional_6_Template(rf, ctx) { if (rf & 1) {
73
117
  i0.ɵɵrepeaterCreate(0, SingleListDetailComponent_kendo_dialog_15_Conditional_6_For_1_Template, 6, 5, null, null, i0.ɵɵrepeaterTrackByIdentity);
@@ -76,22 +120,22 @@ function SingleListDetailComponent_kendo_dialog_15_Conditional_6_Template(rf, ct
76
120
  i0.ɵɵrepeater(ctx_r2.userViews);
77
121
  } }
78
122
  function SingleListDetailComponent_kendo_dialog_15_Template(rf, ctx) { if (rf & 1) {
79
- const _r4 = i0.ɵɵgetCurrentView();
80
- i0.ɵɵelementStart(0, "kendo-dialog", 13);
81
- i0.ɵɵlistener("close", function SingleListDetailComponent_kendo_dialog_15_Template_kendo_dialog_close_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.toggleAddDialog(false)); });
82
- i0.ɵɵelementStart(1, "div", 14);
83
- i0.ɵɵelement(2, "kendo-textbox", 15);
123
+ 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);
84
128
  i0.ɵɵelementEnd();
85
129
  i0.ɵɵelement(3, "hr");
86
- i0.ɵɵelementStart(4, "div", 16);
130
+ i0.ɵɵelementStart(4, "div", 23);
87
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);
88
132
  i0.ɵɵelementEnd();
89
- i0.ɵɵelementStart(7, "kendo-dialog-actions", 17)(8, "button", 18);
90
- i0.ɵɵlistener("click", function SingleListDetailComponent_kendo_dialog_15_Template_button_click_8_listener() { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.addTolist()); });
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()); });
91
135
  i0.ɵɵtext(9, " Done ");
92
136
  i0.ɵɵelementEnd();
93
- i0.ɵɵelementStart(10, "button", 19);
94
- i0.ɵɵlistener("click", function SingleListDetailComponent_kendo_dialog_15_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.toggleAddDialog(false)); });
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)); });
95
139
  i0.ɵɵtext(11, " Cancel ");
96
140
  i0.ɵɵelementEnd()()();
97
141
  } if (rf & 2) {
@@ -112,6 +156,7 @@ export class SingleListDetailComponent {
112
156
  this.route = route;
113
157
  this.sharedService = sharedService;
114
158
  this.listRecord = null;
159
+ this.listID = "";
115
160
  this.showLoader = false;
116
161
  this.sourceGridData = [];
117
162
  this.filteredGridData = [];
@@ -123,6 +168,16 @@ export class SingleListDetailComponent {
123
168
  this.filterItemsSubject = new Subject();
124
169
  this.filter = '';
125
170
  this.userViewsToAdd = [];
171
+ this.page = 0;
172
+ this.pageSize = 50;
173
+ this.gridHeight = 750;
174
+ this.sortSettings = [];
175
+ this.selectedKeys = [];
176
+ this.selectModeEnabled = false;
177
+ this.viewColumns = [];
178
+ this.visibleColumns = [];
179
+ this.totalRowCount = 0;
180
+ this.viewExecutionTime = 0;
126
181
  this.filterItemsSubject
127
182
  .pipe(debounceTime(this._resizeDebounceTime))
128
183
  .subscribe(() => this.filterItems(this.filter));
@@ -139,7 +194,9 @@ export class SingleListDetailComponent {
139
194
  }
140
195
  loadList(listID) {
141
196
  return __awaiter(this, void 0, void 0, function* () {
197
+ const startTime = new Date().getTime();
142
198
  if (listID) {
199
+ this.listID = listID;
143
200
  this.showLoader = true;
144
201
  const md = new Metadata();
145
202
  const rv = new RunView();
@@ -158,18 +215,44 @@ export class SingleListDetailComponent {
158
215
  LogError("Error fetching EntityInfo with ID " + listEntity.EntityID);
159
216
  return;
160
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
+ });
161
239
  this.listName = listEntity.Name;
162
240
  this.listRecord = listEntity;
163
241
  const runViewResult = yield rv.RunView({
164
242
  EntityName: 'List Details',
165
243
  ResultType: 'entity_object',
166
- ExtraFilter: `ListID = '${listID}'`
244
+ ExtraFilter: `ListID = '${listID}'`,
245
+ MaxRows: this.pageSize,
246
+ IgnoreMaxRows: false,
247
+ StartRow: Math.max(0, (this.page - 1) * this.pageSize)
167
248
  }, md.CurrentUser);
168
249
  if (!runViewResult.Success) {
169
250
  LogError("Error loading list details for list with ID " + listID);
170
251
  return;
171
252
  }
253
+ this.totalRowCount = runViewResult.TotalRowCount;
172
254
  const listDetailRecords = runViewResult.Results;
255
+ LogStatus(`Found ${listDetailRecords.length} records in list ${listID}`);
173
256
  if (listDetailRecords.length > 0) {
174
257
  const recordIDs = listDetailRecords.map(ld => `'${ld.RecordID}'`).join(',');
175
258
  let extraFilter = `ID IN (${recordIDs})`;
@@ -181,12 +264,65 @@ export class SingleListDetailComponent {
181
264
  LogError(`Error loading ${entity.Name} records with extra filter ${extraFilter}`);
182
265
  return;
183
266
  }
267
+ LogStatus(`Found ${rvResult.Results.length} records in entity ${entity.Name}`);
184
268
  this.sourceGridData = this.filteredGridData = rvResult.Results;
269
+ this.viewExecutionTime = (new Date().getTime() - startTime) / 1000; // in seconds
185
270
  }
186
271
  this.showLoader = false;
187
272
  }
188
273
  });
189
274
  }
275
+ pageChange(event) {
276
+ this.page = event.skip;
277
+ this.loadList(this.listID);
278
+ }
279
+ GetColumnTitle(col) {
280
+ if (col.DisplayName) {
281
+ // use view's display name first if it exists
282
+ return col.DisplayName;
283
+ }
284
+ else if (col.EntityField && col.EntityField.DisplayName) {
285
+ // then use entity display name, if that exist
286
+ return col.EntityField.DisplayName;
287
+ }
288
+ else {
289
+ // otherwise just use the column name
290
+ return col.Name || '';
291
+ }
292
+ }
293
+ getEditor(ef) {
294
+ if (!ef) {
295
+ return "text";
296
+ }
297
+ switch (ef.TSType) {
298
+ case EntityFieldTSType.Boolean:
299
+ return "boolean";
300
+ case EntityFieldTSType.Date:
301
+ return "date";
302
+ case EntityFieldTSType.Number:
303
+ return "numeric";
304
+ default:
305
+ return "text";
306
+ }
307
+ }
308
+ GetColumnCellStyle(col) {
309
+ if (!col || !col.EntityField) {
310
+ return { 'text-align': 'left', 'vertical-align': 'top' };
311
+ }
312
+ const fieldType = col.EntityField.Type.trim().toLowerCase();
313
+ switch (fieldType) {
314
+ case "money":
315
+ case 'decimal':
316
+ case 'real':
317
+ case 'float':
318
+ case 'int':
319
+ // right align numbers,
320
+ return { 'text-align': 'right', 'vertical-align': 'top' };
321
+ default:
322
+ // left align everything else
323
+ return { 'text-align': 'left', 'vertical-align': 'top' };
324
+ }
325
+ }
190
326
  toggleAddDialog(show) {
191
327
  return __awaiter(this, void 0, void 0, function* () {
192
328
  this.showAddDialog = show;
@@ -258,7 +394,7 @@ export class SingleListDetailComponent {
258
394
  if (count === hashMap.size) {
259
395
  this.showAddLoader = false;
260
396
  this.toggleAddDialog(false);
261
- this.loadList(this.listRecord.ID.toString());
397
+ this.loadList(this.listRecord.ID);
262
398
  }
263
399
  });
264
400
  }
@@ -289,7 +425,7 @@ export class SingleListDetailComponent {
289
425
  }
290
426
  }
291
427
  SingleListDetailComponent.ɵfac = function SingleListDetailComponent_Factory(t) { return new (t || SingleListDetailComponent)(i0.ɵɵdirectiveInject(i1.Router), i0.ɵɵdirectiveInject(i1.ActivatedRoute), i0.ɵɵdirectiveInject(i2.SharedService)); };
292
- 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"], ["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) {
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) {
293
429
  const _r1 = i0.ɵɵgetCurrentView();
294
430
  i0.ɵɵelementStart(0, "div", 1)(1, "div", 2)(2, "h1");
295
431
  i0.ɵɵtext(3);
@@ -303,7 +439,7 @@ SingleListDetailComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: S
303
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)); });
304
440
  i0.ɵɵtemplate(12, SingleListDetailComponent_ng_template_12_Template, 1, 0, "ng-template", 8);
305
441
  i0.ɵɵelementEnd()()()();
306
- i0.ɵɵtemplate(13, SingleListDetailComponent_Conditional_13_Template, 1, 0, "kendo-loader", 9)(14, SingleListDetailComponent_Conditional_14_Template, 1, 1, "kendo-grid", 10);
442
+ i0.ɵɵtemplate(13, SingleListDetailComponent_Conditional_13_Template, 1, 0, "kendo-loader", 9)(14, SingleListDetailComponent_Conditional_14_Template, 3, 3, "kendo-grid", 10);
307
443
  i0.ɵɵelementEnd();
308
444
  i0.ɵɵtemplate(15, SingleListDetailComponent_kendo_dialog_15_Template, 12, 7, "kendo-dialog", 11);
309
445
  } if (rf & 2) {
@@ -317,9 +453,9 @@ SingleListDetailComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: S
317
453
  i0.ɵɵconditional(ctx.showLoader ? 13 : 14);
318
454
  i0.ɵɵadvance(2);
319
455
  i0.ɵɵproperty("ngIf", ctx.showAddDialog);
320
- } }, dependencies: [i3.NgClass, i3.NgIf, i4.GridComponent, i5.DialogComponent, i5.DialogActionsComponent, i6.LoaderComponent, i7.ButtonComponent, i8.TextBoxComponent, i8.TextBoxPrefixTemplateDirective], 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}"] });
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}"] });
321
457
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SingleListDetailComponent, [{
322
458
  type: Component,
323
- 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 <kendo-grid [data]=\"filteredGridData\"></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}"] }]
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}"] }]
324
460
  }], () => [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.SharedService }], null); })();
325
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SingleListDetailComponent, { className: "SingleListDetailComponent", filePath: "src/lib/single-list-detail/single-list-detail.component.ts", lineNumber: 13 }); })();
461
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SingleListDetailComponent, { className: "SingleListDetailComponent", filePath: "src/lib/single-list-detail/single-list-detail.component.ts", lineNumber: 14 }); })();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@memberjunction/ng-explorer-core",
3
- "version": "2.1.4",
3
+ "version": "2.2.0",
4
4
  "description": "MemberJunction Explorer: Core Angular Components",
5
5
  "main": "./dist/public-api.js",
6
6
  "typings": "./dist/public-api.d.ts",
@@ -26,23 +26,23 @@
26
26
  "@angular/router": "18.0.2"
27
27
  },
28
28
  "dependencies": {
29
- "@memberjunction/global": "2.1.4",
30
- "@memberjunction/core": "2.1.4",
31
- "@memberjunction/ng-compare-records": "2.1.4",
32
- "@memberjunction/ng-file-storage": "2.1.4",
33
- "@memberjunction/ng-record-changes": "2.1.4",
34
- "@memberjunction/ng-container-directives": "2.1.4",
35
- "@memberjunction/ng-user-view-grid": "2.1.4",
36
- "@memberjunction/ng-query-grid": "2.1.4",
37
- "@memberjunction/ng-user-view-properties": "2.1.4",
38
- "@memberjunction/ng-shared": "2.1.4",
39
- "@memberjunction/ng-tabstrip": "2.1.4",
40
- "@memberjunction/ng-ask-skip": "2.1.4",
41
- "@memberjunction/ng-auth-services": "2.1.4",
42
- "@memberjunction/ng-explorer-settings": "2.1.4",
43
- "@memberjunction/ng-base-forms": "2.1.4",
44
- "@memberjunction/ng-entity-form-dialog": "2.1.4",
45
- "@memberjunction/ng-record-selector": "2.1.4",
29
+ "@memberjunction/global": "2.2.0",
30
+ "@memberjunction/core": "2.2.0",
31
+ "@memberjunction/ng-compare-records": "2.2.0",
32
+ "@memberjunction/ng-file-storage": "2.2.0",
33
+ "@memberjunction/ng-record-changes": "2.2.0",
34
+ "@memberjunction/ng-container-directives": "2.2.0",
35
+ "@memberjunction/ng-user-view-grid": "2.2.0",
36
+ "@memberjunction/ng-query-grid": "2.2.0",
37
+ "@memberjunction/ng-user-view-properties": "2.2.0",
38
+ "@memberjunction/ng-shared": "2.2.0",
39
+ "@memberjunction/ng-tabstrip": "2.2.0",
40
+ "@memberjunction/ng-ask-skip": "2.2.0",
41
+ "@memberjunction/ng-auth-services": "2.2.0",
42
+ "@memberjunction/ng-explorer-settings": "2.2.0",
43
+ "@memberjunction/ng-base-forms": "2.2.0",
44
+ "@memberjunction/ng-entity-form-dialog": "2.2.0",
45
+ "@memberjunction/ng-record-selector": "2.2.0",
46
46
  "@progress/kendo-angular-grid": "16.2.0",
47
47
  "@progress/kendo-angular-buttons": "16.2.0",
48
48
  "@progress/kendo-angular-listview": "16.2.0",