@memberjunction/ng-explorer-core 2.48.0 → 2.49.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 (105) hide show
  1. package/dist/app-routing.module.js +40 -53
  2. package/dist/app-routing.module.js.map +1 -1
  3. package/dist/generic/Events.types.js +104 -0
  4. package/dist/generic/Events.types.js.map +1 -1
  5. package/dist/generic/Item.types.js +28 -14
  6. package/dist/generic/Item.types.js.map +1 -1
  7. package/dist/generic/PathData.types.js +5 -0
  8. package/dist/generic/PathData.types.js.map +1 -1
  9. package/dist/generic/app-nav-view.types.js +3 -1
  10. package/dist/generic/app-nav-view.types.js.map +1 -1
  11. package/dist/lib/app-view/application-view.component.js +273 -294
  12. package/dist/lib/app-view/application-view.component.js.map +1 -1
  13. package/dist/lib/auth-button/auth-button.component.js +13 -22
  14. package/dist/lib/auth-button/auth-button.component.js.map +1 -1
  15. package/dist/lib/base-browser-component/base-browser-component.js +96 -108
  16. package/dist/lib/base-browser-component/base-browser-component.js.map +1 -1
  17. package/dist/lib/dashboard-browser-component/dashboard-browser.component.js +106 -124
  18. package/dist/lib/dashboard-browser-component/dashboard-browser.component.js.map +1 -1
  19. package/dist/lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component.js +257 -281
  20. package/dist/lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component.js.map +1 -1
  21. package/dist/lib/data-browser-component/data-browser.component.js +122 -137
  22. package/dist/lib/data-browser-component/data-browser.component.js.map +1 -1
  23. package/dist/lib/expansion-panel-component/expansion-panel-component.js +100 -117
  24. package/dist/lib/expansion-panel-component/expansion-panel-component.js.map +1 -1
  25. package/dist/lib/favorites/favorites.component.js +44 -54
  26. package/dist/lib/favorites/favorites.component.js.map +1 -1
  27. package/dist/lib/files/files.component.js +12 -11
  28. package/dist/lib/files/files.component.js.map +1 -1
  29. package/dist/lib/generic/form-toolbar.js +21 -20
  30. package/dist/lib/generic/form-toolbar.js.map +1 -1
  31. package/dist/lib/generic/resource-container-component.js +23 -20
  32. package/dist/lib/generic/resource-container-component.js.map +1 -1
  33. package/dist/lib/generic-browse-list/generic-browse-list.component.js +48 -46
  34. package/dist/lib/generic-browse-list/generic-browse-list.component.js.map +1 -1
  35. package/dist/lib/generic-browser-list/generic-browser-list.component.js +353 -386
  36. package/dist/lib/generic-browser-list/generic-browser-list.component.js.map +1 -1
  37. package/dist/lib/guards/auth-guard.service.js +4 -2
  38. package/dist/lib/guards/auth-guard.service.js.map +1 -1
  39. package/dist/lib/guards/entities.guard.js +1 -1
  40. package/dist/lib/guards/entities.guard.js.map +1 -1
  41. package/dist/lib/header/MSFT_UserImageService.js +4 -3
  42. package/dist/lib/header/MSFT_UserImageService.js.map +1 -1
  43. package/dist/lib/header/header.component.js +111 -121
  44. package/dist/lib/header/header.component.js.map +1 -1
  45. package/dist/lib/home-component/home.component.js +34 -42
  46. package/dist/lib/home-component/home.component.js.map +1 -1
  47. package/dist/lib/home-wrapper/home-wrapper.component.js +6 -6
  48. package/dist/lib/home-wrapper/home-wrapper.component.js.map +1 -1
  49. package/dist/lib/list-view/list-view.component.js +132 -152
  50. package/dist/lib/list-view/list-view.component.js.map +1 -1
  51. package/dist/lib/navigation/navigation.component.js +568 -615
  52. package/dist/lib/navigation/navigation.component.js.map +1 -1
  53. package/dist/lib/query-browser-component/query-browser.component.js +30 -39
  54. package/dist/lib/query-browser-component/query-browser.component.js.map +1 -1
  55. package/dist/lib/report-browser-component/report-browser.component.js +18 -30
  56. package/dist/lib/report-browser-component/report-browser.component.js.map +1 -1
  57. package/dist/lib/resource-browser/resource-browser.component.js +435 -457
  58. package/dist/lib/resource-browser/resource-browser.component.js.map +1 -1
  59. package/dist/lib/resource-wrappers/dashboard-resource.component.js +12 -25
  60. package/dist/lib/resource-wrappers/dashboard-resource.component.js.map +1 -1
  61. package/dist/lib/resource-wrappers/list-detail-resource.component.js +18 -31
  62. package/dist/lib/resource-wrappers/list-detail-resource.component.js.map +1 -1
  63. package/dist/lib/resource-wrappers/query-resource.component.js +15 -28
  64. package/dist/lib/resource-wrappers/query-resource.component.js.map +1 -1
  65. package/dist/lib/resource-wrappers/record-resource.component.js +35 -47
  66. package/dist/lib/resource-wrappers/record-resource.component.js.map +1 -1
  67. package/dist/lib/resource-wrappers/report-resource.component.js +15 -28
  68. package/dist/lib/resource-wrappers/report-resource.component.js.map +1 -1
  69. package/dist/lib/resource-wrappers/search-results-resource.component.js +21 -34
  70. package/dist/lib/resource-wrappers/search-results-resource.component.js.map +1 -1
  71. package/dist/lib/resource-wrappers/view-resource.component.js +23 -37
  72. package/dist/lib/resource-wrappers/view-resource.component.js.map +1 -1
  73. package/dist/lib/single-application/single-application.component.js +15 -20
  74. package/dist/lib/single-application/single-application.component.js.map +1 -1
  75. package/dist/lib/single-dashboard/Components/add-item/add-item.component.js +81 -95
  76. package/dist/lib/single-dashboard/Components/add-item/add-item.component.js.map +1 -1
  77. package/dist/lib/single-dashboard/Components/delete-item/delete-item.component.js +28 -29
  78. package/dist/lib/single-dashboard/Components/delete-item/delete-item.component.js.map +1 -1
  79. package/dist/lib/single-dashboard/Components/edit-dashboard/edit-dashboard.component.js +51 -64
  80. package/dist/lib/single-dashboard/Components/edit-dashboard/edit-dashboard.component.js.map +1 -1
  81. package/dist/lib/single-dashboard/single-dashboard.component.js +158 -165
  82. package/dist/lib/single-dashboard/single-dashboard.component.js.map +1 -1
  83. package/dist/lib/single-entity/single-entity.component.js +106 -118
  84. package/dist/lib/single-entity/single-entity.component.js.map +1 -1
  85. package/dist/lib/single-list-detail/single-list-detail.component.js +265 -287
  86. package/dist/lib/single-list-detail/single-list-detail.component.js.map +1 -1
  87. package/dist/lib/single-query/single-query.component.js +35 -44
  88. package/dist/lib/single-query/single-query.component.js.map +1 -1
  89. package/dist/lib/single-record/single-record.component.js +64 -73
  90. package/dist/lib/single-record/single-record.component.js.map +1 -1
  91. package/dist/lib/single-report/single-report.component.js +33 -43
  92. package/dist/lib/single-report/single-report.component.js.map +1 -1
  93. package/dist/lib/single-search-result/single-search-result.component.js +18 -30
  94. package/dist/lib/single-search-result/single-search-result.component.js.map +1 -1
  95. package/dist/lib/single-view/single-view.component.js +107 -124
  96. package/dist/lib/single-view/single-view.component.js.map +1 -1
  97. package/dist/lib/tabbed-dashboard/tabbed-dashboard.component.js +197 -210
  98. package/dist/lib/tabbed-dashboard/tabbed-dashboard.component.js.map +1 -1
  99. package/dist/lib/user-notifications/user-notifications.component.js +137 -155
  100. package/dist/lib/user-notifications/user-notifications.component.js.map +1 -1
  101. package/dist/lib/user-profile/user-profile.component.js +10 -8
  102. package/dist/lib/user-profile/user-profile.component.js.map +1 -1
  103. package/dist/module.js +51 -51
  104. package/dist/module.js.map +1 -1
  105. package/package.json +25 -25
@@ -1,12 +1,3 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
1
  import { Component, Input } from '@angular/core';
11
2
  import { EntityFieldTSType, LogError, LogStatus, Metadata, RunView } from '@memberjunction/core';
12
3
  import { Subject, debounceTime } from 'rxjs';
@@ -221,61 +212,64 @@ function SingleListDetailComponent_kendo_dialog_16_Template(rf, ctx) { if (rf &
221
212
  i0.ɵɵproperty("disabled", ctx_r2.showDialogLoader);
222
213
  } }
223
214
  export class SingleListDetailComponent {
215
+ router;
216
+ route;
217
+ sharedService;
218
+ ListID = "";
219
+ listRecord = null;
220
+ sourceEntityInfo = null;
221
+ showLoader = false;
222
+ sourceGridData = [];
223
+ filteredGridData = [];
224
+ showAddDialog = false;
225
+ showAddLoader = false;
226
+ showDialogLoader = false;
227
+ userViews = null;
228
+ filterDebounceTime = 250;
229
+ filterItemsSubject = new Subject();
230
+ filter = '';
231
+ userViewsToAdd = [];
232
+ page = 0;
233
+ pageSize = 50;
234
+ gridHeight = 750;
235
+ sortSettings = [];
236
+ selectedKeys = [];
237
+ selectModeEnabled = false;
238
+ viewColumns = [];
239
+ visibleColumns = [];
240
+ totalRowCount = 0;
241
+ viewExecutionTime = 0;
242
+ recordsToSave = 0;
243
+ recordsSaved = 0;
244
+ fetchingRecordsToSave = false;
245
+ showAddSingleRecordsDialog = false;
246
+ fetchingListRecords = false;
247
+ listRecords = [];
248
+ selectedListRecords = [];
249
+ searchFilter = "";
250
+ filterListrecordsSubject = new Subject();
251
+ addOptions = [
252
+ {
253
+ Text: 'Add From View',
254
+ Description: 'Add all records of a view to this list',
255
+ Icon: 'folder',
256
+ Action: () => {
257
+ this.toggleAddFromViewDialog(true);
258
+ }
259
+ },
260
+ {
261
+ Text: 'Add a Record',
262
+ Description: 'Add a specific record to the list',
263
+ Icon: 'folder',
264
+ Action: () => {
265
+ this.toggleAddRecordsDialog(true);
266
+ }
267
+ }
268
+ ];
224
269
  constructor(router, route, sharedService) {
225
270
  this.router = router;
226
271
  this.route = route;
227
272
  this.sharedService = sharedService;
228
- this.ListID = "";
229
- this.listRecord = null;
230
- this.sourceEntityInfo = null;
231
- this.showLoader = false;
232
- this.sourceGridData = [];
233
- this.filteredGridData = [];
234
- this.showAddDialog = false;
235
- this.showAddLoader = false;
236
- this.showDialogLoader = false;
237
- this.userViews = null;
238
- this.filterDebounceTime = 250;
239
- this.filterItemsSubject = new Subject();
240
- this.filter = '';
241
- this.userViewsToAdd = [];
242
- this.page = 0;
243
- this.pageSize = 50;
244
- this.gridHeight = 750;
245
- this.sortSettings = [];
246
- this.selectedKeys = [];
247
- this.selectModeEnabled = false;
248
- this.viewColumns = [];
249
- this.visibleColumns = [];
250
- this.totalRowCount = 0;
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
- ];
279
273
  this.filterItemsSubject
280
274
  .pipe(debounceTime(this.filterDebounceTime))
281
275
  .subscribe(() => this.filterItems(this.filter));
@@ -283,61 +277,57 @@ export class SingleListDetailComponent {
283
277
  .pipe(debounceTime(this.filterDebounceTime))
284
278
  .subscribe(() => this.loadListRecords());
285
279
  }
286
- ngOnInit() {
287
- return __awaiter(this, void 0, void 0, function* () {
288
- if (this.ListID) {
289
- yield this.loadList(this.ListID);
290
- }
291
- });
280
+ async ngOnInit() {
281
+ if (this.ListID) {
282
+ await this.loadList(this.ListID);
283
+ }
292
284
  }
293
- loadList(listID) {
294
- return __awaiter(this, void 0, void 0, function* () {
295
- if (!listID) {
296
- return;
297
- }
298
- const startTime = new Date().getTime();
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);
306
- this.showLoader = false;
307
- return;
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
285
+ async loadList(listID) {
286
+ if (!listID) {
287
+ return;
288
+ }
289
+ const startTime = new Date().getTime();
290
+ this.showLoader = true;
291
+ const md = new Metadata();
292
+ const rv = new RunView();
293
+ this.listRecord = await md.GetEntityObject("Lists");
294
+ const loadResult = await this.listRecord.Load(listID);
295
+ if (!loadResult) {
296
+ LogError("Error loading list with ID " + listID, undefined, this.listRecord.LatestResult);
339
297
  this.showLoader = false;
298
+ return;
299
+ }
300
+ this.sourceEntityInfo = md.EntityByID(this.listRecord.EntityID);
301
+ this.viewColumns = this.sourceEntityInfo.Fields.filter((field) => field.DefaultInView).map((field) => {
302
+ return {
303
+ ID: field.ID,
304
+ Name: field.CodeName,
305
+ DisplayName: field.DisplayName,
306
+ EntityField: field,
307
+ hidden: false,
308
+ orderIndex: field.Sequence,
309
+ width: field.DefaultColumnWidth || 100,
310
+ };
311
+ });
312
+ /*make sure there is an entity field linked*/
313
+ this.visibleColumns = this.viewColumns.filter(x => x.hidden === false && x.EntityField).sort((a, b) => {
314
+ const aOrder = a.orderIndex != null ? a.orderIndex : 9999;
315
+ const bOrder = b.orderIndex != null ? b.orderIndex : 9999;
316
+ return aOrder - bOrder;
340
317
  });
318
+ const primaryKeyName = this.sourceEntityInfo.FirstPrimaryKey.Name;
319
+ const rvResult = await rv.RunView({
320
+ EntityName: this.listRecord.Entity,
321
+ ExtraFilter: `${primaryKeyName} IN (SELECT [RecordID] FROM ${md.ConfigData.MJCoreSchemaName}.[vwListDetails] WHERE ListID = '${this.listRecord.ID}')`
322
+ }, md.CurrentUser);
323
+ if (!rvResult.Success) {
324
+ LogError(`Error loading ${this.listRecord.Entity} records: ${rvResult.ErrorMessage}`);
325
+ this.showLoader = false;
326
+ return;
327
+ }
328
+ this.sourceGridData = this.filteredGridData = rvResult.Results;
329
+ this.viewExecutionTime = (new Date().getTime() - startTime) / 1000; // in seconds
330
+ this.showLoader = false;
341
331
  }
342
332
  pageChange(event) {
343
333
  this.page = event.skip;
@@ -390,89 +380,83 @@ export class SingleListDetailComponent {
390
380
  return { 'text-align': 'left', 'vertical-align': 'top' };
391
381
  }
392
382
  }
393
- toggleAddFromViewDialog(show) {
394
- return __awaiter(this, void 0, void 0, function* () {
395
- this.showAddDialog = show;
396
- if (show && !this.userViews) {
397
- yield this.loadEntityViews();
398
- }
399
- });
383
+ async toggleAddFromViewDialog(show) {
384
+ this.showAddDialog = show;
385
+ if (show && !this.userViews) {
386
+ await this.loadEntityViews();
387
+ }
400
388
  }
401
- loadEntityViews() {
402
- return __awaiter(this, void 0, void 0, function* () {
403
- this.showAddLoader = true;
404
- if (!this.listRecord || !this.listRecord.Entity) {
405
- return;
406
- }
407
- const rv = new RunView();
408
- const md = new Metadata();
409
- const runViewResult = yield rv.RunView({
389
+ async loadEntityViews() {
390
+ this.showAddLoader = true;
391
+ if (!this.listRecord || !this.listRecord.Entity) {
392
+ return;
393
+ }
394
+ const rv = new RunView();
395
+ const md = new Metadata();
396
+ const runViewResult = await rv.RunView({
397
+ EntityName: "User Views",
398
+ ExtraFilter: `UserID = '${md.CurrentUser.ID}' AND EntityID = '${this.listRecord.EntityID}'`,
399
+ ResultType: 'entity_object'
400
+ }, md.CurrentUser);
401
+ if (!runViewResult.Success) {
402
+ this.showAddLoader = false;
403
+ LogError(`Error loading ${this.listRecord.Entity} User View records for user ${md.CurrentUser.ID}`);
404
+ return;
405
+ }
406
+ this.userViews = runViewResult.Results;
407
+ this.showAddLoader = false;
408
+ }
409
+ async addTolist() {
410
+ if (!this.listRecord) {
411
+ return;
412
+ }
413
+ if (!this.listRecord.Entity) {
414
+ return;
415
+ }
416
+ this.showAddLoader = true;
417
+ this.fetchingRecordsToSave = true;
418
+ const rv = new RunView();
419
+ const md = new Metadata();
420
+ const hashMap = new Map();
421
+ await Promise.all(this.userViewsToAdd.map(async (userView) => {
422
+ const runViewResult = await rv.RunView({
410
423
  EntityName: "User Views",
411
- ExtraFilter: `UserID = '${md.CurrentUser.ID}' AND EntityID = '${this.listRecord.EntityID}'`,
412
- ResultType: 'entity_object'
424
+ ViewEntity: userView,
425
+ Fields: ["ID"]
413
426
  }, md.CurrentUser);
414
427
  if (!runViewResult.Success) {
415
- this.showAddLoader = false;
416
- LogError(`Error loading ${this.listRecord.Entity} User View records for user ${md.CurrentUser.ID}`);
417
- return;
418
- }
419
- this.userViews = runViewResult.Results;
420
- this.showAddLoader = false;
421
- });
422
- }
423
- addTolist() {
424
- return __awaiter(this, void 0, void 0, function* () {
425
- if (!this.listRecord) {
428
+ LogError(`Error loading view ${userView.Name} for user ${md.CurrentUser.ID}`);
426
429
  return;
427
430
  }
428
- if (!this.listRecord.Entity) {
429
- return;
431
+ const records = runViewResult.Results;
432
+ for (const record of records) {
433
+ hashMap.set(record.ID, record);
430
434
  }
431
- this.showAddLoader = true;
432
- this.fetchingRecordsToSave = true;
433
- const rv = new RunView();
434
- const md = new Metadata();
435
- const hashMap = new Map();
436
- yield Promise.all(this.userViewsToAdd.map((userView) => __awaiter(this, void 0, void 0, function* () {
437
- const runViewResult = yield rv.RunView({
438
- EntityName: "User Views",
439
- ViewEntity: userView,
440
- Fields: ["ID"]
441
- }, md.CurrentUser);
442
- if (!runViewResult.Success) {
443
- LogError(`Error loading view ${userView.Name} for user ${md.CurrentUser.ID}`);
444
- return;
445
- }
446
- const records = runViewResult.Results;
447
- for (const record of records) {
448
- hashMap.set(record.ID, record);
435
+ }));
436
+ this.recordsToSave = hashMap.size;
437
+ this.recordsSaved = 0;
438
+ this.fetchingRecordsToSave = false;
439
+ LogStatus(`Adding ${hashMap.size} records to list ${this.listRecord.ID}`);
440
+ //now add the records to the list
441
+ const recordIDs = [...hashMap.keys()];
442
+ const chunkSize = 100;
443
+ for (let i = 0; i < recordIDs.length; i += chunkSize) {
444
+ const chunk = recordIDs.slice(i, i + chunkSize);
445
+ await Promise.all(chunk.map(async (recordID) => {
446
+ const listDetail = await md.GetEntityObject("List Details");
447
+ listDetail.ListID = this.listRecord.ID;
448
+ listDetail.RecordID = recordID.toString();
449
+ listDetail.ContextCurrentUser = md.CurrentUser;
450
+ const saveResult = await listDetail.Save();
451
+ if (!saveResult) {
452
+ LogError(`Error adding record ${recordID} to list ${this.listRecord.ID}`, undefined, listDetail.LatestResult);
449
453
  }
450
- })));
451
- this.recordsToSave = hashMap.size;
452
- this.recordsSaved = 0;
453
- this.fetchingRecordsToSave = false;
454
- LogStatus(`Adding ${hashMap.size} records to list ${this.listRecord.ID}`);
455
- //now add the records to the list
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) {
467
- LogError(`Error adding record ${recordID} to list ${this.listRecord.ID}`, undefined, listDetail.LatestResult);
468
- }
469
- this.recordsSaved++;
470
- })));
471
- }
472
- this.showAddLoader = false;
473
- this.toggleAddFromViewDialog(false);
474
- this.loadList(this.listRecord.ID);
475
- });
454
+ this.recordsSaved++;
455
+ }));
456
+ }
457
+ this.showAddLoader = false;
458
+ this.toggleAddFromViewDialog(false);
459
+ this.loadList(this.listRecord.ID);
476
460
  }
477
461
  onListSearchValueChange(Value) {
478
462
  this.filter = Value;
@@ -516,114 +500,108 @@ export class SingleListDetailComponent {
516
500
  }
517
501
  item.Action();
518
502
  }
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
- });
503
+ async toggleAddRecordsDialog(show) {
504
+ this.showAddSingleRecordsDialog = show;
505
+ if (show) {
506
+ this.listRecords = [];
507
+ this.searchFilter = "";
508
+ await this.loadListRecords();
509
+ }
528
510
  }
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
- });
511
+ async loadListRecords() {
512
+ if (!this.listRecord) {
513
+ LogError("Error loading list records. List record is null");
514
+ return;
515
+ }
516
+ if (!this.sourceEntityInfo) {
517
+ LogError("Error loading list records. Source entity info is null");
518
+ return;
519
+ }
520
+ this.fetchingListRecords = true;
521
+ const primaryKeyName = this.sourceEntityInfo.FirstPrimaryKey.Name;
522
+ let filter = undefined;
523
+ const nameField = this.sourceEntityInfo.Fields.find((field) => field.IsNameField);
524
+ if (nameField && this.searchFilter) {
525
+ filter = `${nameField.Name} LIKE '%${this.searchFilter}%'`;
526
+ }
527
+ const rv = new RunView();
528
+ const rvResult = await rv.RunView({
529
+ EntityName: this.listRecord.Entity,
530
+ ExtraFilter: filter,
531
+ MaxRows: 50
532
+ });
533
+ if (!rvResult.Success) {
534
+ LogError(`Error loading list records for list ${this.listRecord.ID}`, undefined, rvResult.ErrorMessage);
564
535
  this.fetchingListRecords = false;
536
+ return;
537
+ }
538
+ this.listRecords = rvResult.Results.filter((record) => {
539
+ const alreadyExits = this.sourceGridData.some((selectedRecord) => selectedRecord.ID === record[primaryKeyName]);
540
+ return !alreadyExits;
541
+ }).map((record) => {
542
+ let result = { ID: record[primaryKeyName], Name: record[nameField.Name] };
543
+ return result;
565
544
  });
545
+ this.fetchingListRecords = false;
566
546
  }
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);
547
+ async addListRecord(listRecord) {
548
+ if (!this.listRecord) {
549
+ LogError("Error adding list record. List record is null");
550
+ this.sharedService.CreateSimpleNotification("Unable to add record to list");
551
+ return;
552
+ }
553
+ const md = new Metadata();
554
+ const listEntity = await md.GetEntityObject("List Details", md.CurrentUser);
555
+ listEntity.ListID = this.listRecord.ID;
556
+ listEntity.RecordID = listRecord.ID;
557
+ const saveResult = await listEntity.Save();
558
+ if (!saveResult) {
559
+ LogError(`Error adding record ${listRecord.ID} to list ${this.listRecord.ID}`, undefined, listEntity.LatestResult);
560
+ const alreadyExists = listEntity.LatestResult.Message.includes("already exists in List");
561
+ if (alreadyExists) {
562
+ this.sharedService.CreateSimpleNotification("Record already exists in this list", 'error', 2500);
587
563
  return;
588
564
  }
589
- this.sharedService.CreateSimpleNotification("Unable to add record to list", 'success', 2500);
590
- });
565
+ this.sharedService.CreateSimpleNotification("Unable to add record to list", 'error', 2500);
566
+ return;
567
+ }
568
+ this.sharedService.CreateSimpleNotification("Unable to add record to list", 'success', 2500);
591
569
  }
570
+ static ɵfac = function SingleListDetailComponent_Factory(t) { return new (t || SingleListDetailComponent)(i0.ɵɵdirectiveInject(i1.Router), i0.ɵɵdirectiveInject(i1.ActivatedRoute), i0.ɵɵdirectiveInject(i2.SharedService)); };
571
+ static ɵ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) {
572
+ const _r1 = i0.ɵɵgetCurrentView();
573
+ i0.ɵɵelementStart(0, "div", 1)(1, "div", 2)(2, "h1");
574
+ i0.ɵɵtext(3);
575
+ i0.ɵɵelementEnd();
576
+ i0.ɵɵelementStart(4, "kendo-dropdownbutton", 3);
577
+ i0.ɵɵlistener("itemClick", function SingleListDetailComponent_Template_kendo_dropdownbutton_itemClick_4_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onDropdownItemClick($event)); });
578
+ i0.ɵɵelement(5, "span", 4);
579
+ i0.ɵɵtext(6, " Add to List ");
580
+ i0.ɵɵelementEnd()();
581
+ i0.ɵɵelementStart(7, "div")(8, "div", 5)(9, "div", 6)(10, "kendo-textbox", 7, 0);
582
+ 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)); });
583
+ i0.ɵɵtemplate(12, SingleListDetailComponent_ng_template_12_Template, 1, 0, "ng-template", 8);
584
+ i0.ɵɵelementEnd()()()();
585
+ i0.ɵɵtemplate(13, SingleListDetailComponent_Conditional_13_Template, 1, 0, "kendo-loader", 9)(14, SingleListDetailComponent_Conditional_14_Template, 3, 3, "kendo-grid", 10);
586
+ i0.ɵɵelementEnd();
587
+ i0.ɵɵtemplate(15, SingleListDetailComponent_kendo_dialog_15_Template, 8, 6, "kendo-dialog", 11)(16, SingleListDetailComponent_kendo_dialog_16_Template, 6, 6, "kendo-dialog", 12);
588
+ } if (rf & 2) {
589
+ i0.ɵɵadvance(3);
590
+ i0.ɵɵtextInterpolate(ctx.listRecord ? ctx.listRecord.Name : "List");
591
+ i0.ɵɵadvance();
592
+ i0.ɵɵproperty("data", ctx.addOptions);
593
+ i0.ɵɵadvance(6);
594
+ i0.ɵɵproperty("clearButton", true);
595
+ i0.ɵɵadvance(2);
596
+ i0.ɵɵproperty("showSeparator", true);
597
+ i0.ɵɵadvance();
598
+ i0.ɵɵconditional(ctx.showLoader ? 13 : 14);
599
+ i0.ɵɵadvance(2);
600
+ i0.ɵɵproperty("ngIf", ctx.showAddDialog);
601
+ i0.ɵɵadvance();
602
+ i0.ɵɵproperty("ngIf", ctx.showAddSingleRecordsDialog);
603
+ } }, 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}"] });
592
604
  }
593
- SingleListDetailComponent.ɵfac = function SingleListDetailComponent_Factory(t) { return new (t || SingleListDetailComponent)(i0.ɵɵdirectiveInject(i1.Router), i0.ɵɵdirectiveInject(i1.ActivatedRoute), i0.ɵɵdirectiveInject(i2.SharedService)); };
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) {
595
- const _r1 = i0.ɵɵgetCurrentView();
596
- i0.ɵɵelementStart(0, "div", 1)(1, "div", 2)(2, "h1");
597
- i0.ɵɵtext(3);
598
- i0.ɵɵelementEnd();
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)); });
601
- i0.ɵɵelement(5, "span", 4);
602
- i0.ɵɵtext(6, " Add to List ");
603
- i0.ɵɵelementEnd()();
604
- i0.ɵɵelementStart(7, "div")(8, "div", 5)(9, "div", 6)(10, "kendo-textbox", 7, 0);
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)); });
606
- i0.ɵɵtemplate(12, SingleListDetailComponent_ng_template_12_Template, 1, 0, "ng-template", 8);
607
- i0.ɵɵelementEnd()()()();
608
- i0.ɵɵtemplate(13, SingleListDetailComponent_Conditional_13_Template, 1, 0, "kendo-loader", 9)(14, SingleListDetailComponent_Conditional_14_Template, 3, 3, "kendo-grid", 10);
609
- i0.ɵɵelementEnd();
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);
611
- } if (rf & 2) {
612
- i0.ɵɵadvance(3);
613
- i0.ɵɵtextInterpolate(ctx.listRecord ? ctx.listRecord.Name : "List");
614
- i0.ɵɵadvance();
615
- i0.ɵɵproperty("data", ctx.addOptions);
616
- i0.ɵɵadvance(6);
617
- i0.ɵɵproperty("clearButton", true);
618
- i0.ɵɵadvance(2);
619
- i0.ɵɵproperty("showSeparator", true);
620
- i0.ɵɵadvance();
621
- i0.ɵɵconditional(ctx.showLoader ? 13 : 14);
622
- i0.ɵɵadvance(2);
623
- i0.ɵɵproperty("ngIf", ctx.showAddDialog);
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}"] });
627
605
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SingleListDetailComponent, [{
628
606
  type: Component,
629
607
  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"] }]