@memberjunction/ng-core-entity-forms 5.30.1 → 5.32.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 (163) hide show
  1. package/dist/lib/__tests__/content-source-form.test.d.ts +2 -0
  2. package/dist/lib/__tests__/content-source-form.test.d.ts.map +1 -0
  3. package/dist/lib/__tests__/content-source-form.test.js +183 -0
  4. package/dist/lib/__tests__/content-source-form.test.js.map +1 -0
  5. package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts +2 -1
  6. package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts.map +1 -1
  7. package/dist/lib/custom/AIAgents/add-action-dialog.component.js +6 -4
  8. package/dist/lib/custom/AIAgents/add-action-dialog.component.js.map +1 -1
  9. package/dist/lib/custom/AIAgents/agent-advanced-settings-dialog.component.js +2 -2
  10. package/dist/lib/custom/AIAgents/agent-advanced-settings-dialog.component.js.map +1 -1
  11. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts +2 -1
  12. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts.map +1 -1
  13. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js +6 -4
  14. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js.map +1 -1
  15. package/dist/lib/custom/AIAgents/ai-agent-form.component.js +15 -15
  16. package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
  17. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts +2 -1
  18. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts.map +1 -1
  19. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js +9 -7
  20. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js.map +1 -1
  21. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts +2 -1
  22. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts.map +1 -1
  23. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js +11 -9
  24. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js.map +1 -1
  25. package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts +2 -1
  26. package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts.map +1 -1
  27. package/dist/lib/custom/AIAgents/new-agent-dialog.component.js +6 -5
  28. package/dist/lib/custom/AIAgents/new-agent-dialog.component.js.map +1 -1
  29. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts +2 -1
  30. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts.map +1 -1
  31. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js +6 -4
  32. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js.map +1 -1
  33. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts +2 -1
  34. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts.map +1 -1
  35. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js +6 -4
  36. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js.map +1 -1
  37. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts +2 -1
  38. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts.map +1 -1
  39. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js +6 -4
  40. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js.map +1 -1
  41. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +3 -3
  42. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
  43. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts +1 -1
  44. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts.map +1 -1
  45. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +6 -6
  46. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
  47. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts +2 -1
  48. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts.map +1 -1
  49. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js +7 -5
  50. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js.map +1 -1
  51. package/dist/lib/custom/Actions/action-execution-log-form.component.js +3 -3
  52. package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
  53. package/dist/lib/custom/Actions/action-form.component.js +12 -12
  54. package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
  55. package/dist/lib/custom/ContentSources/content-source-form.component.d.ts +59 -5
  56. package/dist/lib/custom/ContentSources/content-source-form.component.d.ts.map +1 -1
  57. package/dist/lib/custom/ContentSources/content-source-form.component.js +379 -34
  58. package/dist/lib/custom/ContentSources/content-source-form.component.js.map +1 -1
  59. package/dist/lib/custom/Entities/entity-form.component.d.ts +1 -1
  60. package/dist/lib/custom/Entities/entity-form.component.d.ts.map +1 -1
  61. package/dist/lib/custom/Entities/entity-form.component.js +5 -5
  62. package/dist/lib/custom/Entities/entity-form.component.js.map +1 -1
  63. package/dist/lib/custom/Lists/list-form.component.d.ts +1 -1
  64. package/dist/lib/custom/Lists/list-form.component.d.ts.map +1 -1
  65. package/dist/lib/custom/Lists/list-form.component.js +10 -10
  66. package/dist/lib/custom/Lists/list-form.component.js.map +1 -1
  67. package/dist/lib/custom/Queries/query-category-dialog.component.d.ts +2 -1
  68. package/dist/lib/custom/Queries/query-category-dialog.component.d.ts.map +1 -1
  69. package/dist/lib/custom/Queries/query-category-dialog.component.js +9 -7
  70. package/dist/lib/custom/Queries/query-category-dialog.component.js.map +1 -1
  71. package/dist/lib/custom/Queries/query-form.component.js +17 -17
  72. package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
  73. package/dist/lib/custom/Queries/query-run-dialog.component.d.ts +2 -1
  74. package/dist/lib/custom/Queries/query-run-dialog.component.d.ts.map +1 -1
  75. package/dist/lib/custom/Queries/query-run-dialog.component.js +7 -6
  76. package/dist/lib/custom/Queries/query-run-dialog.component.js.map +1 -1
  77. package/dist/lib/custom/Templates/template-param-dialog.component.d.ts +2 -1
  78. package/dist/lib/custom/Templates/template-param-dialog.component.d.ts.map +1 -1
  79. package/dist/lib/custom/Templates/template-param-dialog.component.js +10 -8
  80. package/dist/lib/custom/Templates/template-param-dialog.component.js.map +1 -1
  81. package/dist/lib/custom/Templates/template-params-grid.component.d.ts +2 -1
  82. package/dist/lib/custom/Templates/template-params-grid.component.d.ts.map +1 -1
  83. package/dist/lib/custom/Templates/template-params-grid.component.js +9 -7
  84. package/dist/lib/custom/Templates/template-params-grid.component.js.map +1 -1
  85. package/dist/lib/custom/Templates/templates-form.component.js +8 -8
  86. package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
  87. package/dist/lib/custom/Tests/entity-link-pill.component.d.ts +3 -2
  88. package/dist/lib/custom/Tests/entity-link-pill.component.d.ts.map +1 -1
  89. package/dist/lib/custom/Tests/entity-link-pill.component.js +8 -6
  90. package/dist/lib/custom/Tests/entity-link-pill.component.js.map +1 -1
  91. package/dist/lib/custom/Tests/test-form.component.d.ts +1 -1
  92. package/dist/lib/custom/Tests/test-form.component.d.ts.map +1 -1
  93. package/dist/lib/custom/Tests/test-form.component.js +7 -7
  94. package/dist/lib/custom/Tests/test-form.component.js.map +1 -1
  95. package/dist/lib/custom/Tests/test-run-form.component.js +5 -5
  96. package/dist/lib/custom/Tests/test-run-form.component.js.map +1 -1
  97. package/dist/lib/custom/Tests/test-suite-form.component.d.ts +1 -1
  98. package/dist/lib/custom/Tests/test-suite-form.component.d.ts.map +1 -1
  99. package/dist/lib/custom/Tests/test-suite-form.component.js +8 -8
  100. package/dist/lib/custom/Tests/test-suite-form.component.js.map +1 -1
  101. package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts +1 -1
  102. package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts.map +1 -1
  103. package/dist/lib/custom/Tests/test-suite-run-form.component.js +6 -6
  104. package/dist/lib/custom/Tests/test-suite-run-form.component.js.map +1 -1
  105. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts +2 -1
  106. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts.map +1 -1
  107. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js +8 -6
  108. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js.map +1 -1
  109. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.d.ts +9 -0
  110. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.d.ts.map +1 -1
  111. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js +15 -3
  112. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js.map +1 -1
  113. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts +3 -2
  114. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts.map +1 -1
  115. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js +10 -5
  116. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js.map +1 -1
  117. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +2 -2
  118. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
  119. package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts +2 -1
  120. package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts.map +1 -1
  121. package/dist/lib/custom/shared/entity-selector-dialog.component.js +6 -4
  122. package/dist/lib/custom/shared/entity-selector-dialog.component.js.map +1 -1
  123. package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.d.ts.map +1 -1
  124. package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js +46 -28
  125. package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js.map +1 -1
  126. package/dist/lib/generated/Entities/MJComponentLibrary/mjcomponentlibrary.form.component.js +15 -13
  127. package/dist/lib/generated/Entities/MJComponentLibrary/mjcomponentlibrary.form.component.js.map +1 -1
  128. package/dist/lib/generated/Entities/MJContentItem/mjcontentitem.form.component.d.ts.map +1 -1
  129. package/dist/lib/generated/Entities/MJContentItem/mjcontentitem.form.component.js +25 -7
  130. package/dist/lib/generated/Entities/MJContentItem/mjcontentitem.form.component.js.map +1 -1
  131. package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.d.ts.map +1 -1
  132. package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.js +25 -7
  133. package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.js.map +1 -1
  134. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.d.ts.map +1 -1
  135. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js +106 -88
  136. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js.map +1 -1
  137. package/dist/lib/generated/Entities/MJTag/mjtag.form.component.d.ts.map +1 -1
  138. package/dist/lib/generated/Entities/MJTag/mjtag.form.component.js +177 -57
  139. package/dist/lib/generated/Entities/MJTag/mjtag.form.component.js.map +1 -1
  140. package/dist/lib/generated/Entities/MJTagScope/mjtagscope.form.component.d.ts +10 -0
  141. package/dist/lib/generated/Entities/MJTagScope/mjtagscope.form.component.d.ts.map +1 -0
  142. package/dist/lib/generated/Entities/MJTagScope/mjtagscope.form.component.js +63 -0
  143. package/dist/lib/generated/Entities/MJTagScope/mjtagscope.form.component.js.map +1 -0
  144. package/dist/lib/generated/Entities/MJTagSuggestion/mjtagsuggestion.form.component.d.ts +10 -0
  145. package/dist/lib/generated/Entities/MJTagSuggestion/mjtagsuggestion.form.component.d.ts.map +1 -0
  146. package/dist/lib/generated/Entities/MJTagSuggestion/mjtagsuggestion.form.component.js +95 -0
  147. package/dist/lib/generated/Entities/MJTagSuggestion/mjtagsuggestion.form.component.js.map +1 -0
  148. package/dist/lib/generated/Entities/MJTagSynonym/mjtagsynonym.form.component.d.ts +10 -0
  149. package/dist/lib/generated/Entities/MJTagSynonym/mjtagsynonym.form.component.d.ts.map +1 -0
  150. package/dist/lib/generated/Entities/MJTagSynonym/mjtagsynonym.form.component.js +63 -0
  151. package/dist/lib/generated/Entities/MJTagSynonym/mjtagsynonym.form.component.js.map +1 -0
  152. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.d.ts.map +1 -1
  153. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js +193 -175
  154. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js.map +1 -1
  155. package/dist/lib/generated/generated-forms.module.d.ts +51 -48
  156. package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
  157. package/dist/lib/generated/generated-forms.module.js +27 -18
  158. package/dist/lib/generated/generated-forms.module.js.map +1 -1
  159. package/dist/lib/shared/components/template-editor.component.d.ts +3 -2
  160. package/dist/lib/shared/components/template-editor.component.d.ts.map +1 -1
  161. package/dist/lib/shared/components/template-editor.component.js +8 -6
  162. package/dist/lib/shared/components/template-editor.component.js.map +1 -1
  163. package/package.json +37 -35
@@ -92,7 +92,7 @@ export declare class MJListFormComponentExtended extends MJListFormComponent imp
92
92
  showShareDialog: boolean;
93
93
  shareDialogConfig: ListShareDialogConfig | null;
94
94
  private destroy$;
95
- private metadata;
95
+ private get metadata();
96
96
  ngOnInit(): Promise<void>;
97
97
  private showNotification;
98
98
  ngOnDestroy(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"list-form.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/Lists/list-form.component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"list-form.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/Lists/list-form.component.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,7 @@ import { RegisterClass, UUIDsEqual, NormalizeUUID } from '@memberjunction/global
10
10
  import { BaseFormComponent } from '@memberjunction/ng-base-forms';
11
11
  import { SharedService } from '@memberjunction/ng-shared';
12
12
  import { MJListFormComponent } from '../../generated/Entities/MJList/mjlist.form.component';
13
- import { Metadata, RunView, LogError, LogStatus } from '@memberjunction/core';
13
+ import { RunView, LogError, LogStatus } from '@memberjunction/core';
14
14
  import * as i0 from "@angular/core";
15
15
  import * as i1 from "@angular/forms";
16
16
  import * as i2 from "@memberjunction/ng-ui-components";
@@ -987,8 +987,8 @@ let MJListFormComponentExtended = class MJListFormComponentExtended extends MJLi
987
987
  this.showShareDialog = false;
988
988
  this.shareDialogConfig = null;
989
989
  this.destroy$ = new Subject();
990
- this.metadata = new Metadata();
991
990
  }
991
+ get metadata() { return this.ProviderToUse; }
992
992
  async ngOnInit() {
993
993
  await super.ngOnInit();
994
994
  // Set up search debounce
@@ -1029,7 +1029,7 @@ let MJListFormComponentExtended = class MJListFormComponentExtended extends MJLi
1029
1029
  }
1030
1030
  }
1031
1031
  async loadCategories() {
1032
- const rv = new RunView();
1032
+ const rv = RunView.FromMetadataProvider(this.ProviderToUse);
1033
1033
  const result = await rv.RunView({
1034
1034
  EntityName: 'MJ: List Categories',
1035
1035
  OrderBy: 'Name',
@@ -1045,7 +1045,7 @@ let MJListFormComponentExtended = class MJListFormComponentExtended extends MJLi
1045
1045
  this.isLoadingItems = true;
1046
1046
  this.cdr.markForCheck();
1047
1047
  try {
1048
- const rv = new RunView();
1048
+ const rv = RunView.FromMetadataProvider(this.ProviderToUse);
1049
1049
  const result = await rv.RunView({
1050
1050
  EntityName: 'MJ: List Details',
1051
1051
  ExtraFilter: `ListID = '${this.record.ID}'`,
@@ -1073,7 +1073,7 @@ let MJListFormComponentExtended = class MJListFormComponentExtended extends MJLi
1073
1073
  async loadRecordNames() {
1074
1074
  if (!this.entityInfo)
1075
1075
  return;
1076
- const rv = new RunView();
1076
+ const rv = RunView.FromMetadataProvider(this.ProviderToUse);
1077
1077
  // Get the name field - NameField is EntityFieldInfo or undefined
1078
1078
  const nameFieldInfo = this.entityInfo.NameField;
1079
1079
  const nameFieldName = nameFieldInfo ? nameFieldInfo.Name : 'ID';
@@ -1105,7 +1105,7 @@ let MJListFormComponentExtended = class MJListFormComponentExtended extends MJLi
1105
1105
  return;
1106
1106
  this.isLoadingStats = true;
1107
1107
  try {
1108
- const rv = new RunView();
1108
+ const rv = RunView.FromMetadataProvider(this.ProviderToUse);
1109
1109
  const [itemsResult, sharesResult, invitationsResult] = await rv.RunViews([
1110
1110
  {
1111
1111
  EntityName: 'MJ: List Details',
@@ -1351,7 +1351,7 @@ let MJListFormComponentExtended = class MJListFormComponentExtended extends MJLi
1351
1351
  async loadExistingListDetailIds() {
1352
1352
  if (!this.record)
1353
1353
  return;
1354
- const rv = new RunView();
1354
+ const rv = RunView.FromMetadataProvider(this.ProviderToUse);
1355
1355
  const result = await rv.RunView({
1356
1356
  EntityName: 'MJ: List Details',
1357
1357
  ExtraFilter: `ListID = '${this.record.ID}'`,
@@ -1386,7 +1386,7 @@ let MJListFormComponentExtended = class MJListFormComponentExtended extends MJLi
1386
1386
  if (nameField) {
1387
1387
  filter = `${nameField.Name} LIKE '%${searchText}%'`;
1388
1388
  }
1389
- const rv = new RunView();
1389
+ const rv = RunView.FromMetadataProvider(this.ProviderToUse);
1390
1390
  const result = await rv.RunView({
1391
1391
  EntityName: this.record.Entity,
1392
1392
  ExtraFilter: filter,
@@ -1482,7 +1482,7 @@ let MJListFormComponentExtended = class MJListFormComponentExtended extends MJLi
1482
1482
  return;
1483
1483
  this.showAddFromViewLoader = true;
1484
1484
  this.cdr.markForCheck();
1485
- const rv = new RunView();
1485
+ const rv = RunView.FromMetadataProvider(this.ProviderToUse);
1486
1486
  const runViewResult = await rv.RunView({
1487
1487
  EntityName: 'MJ: User Views',
1488
1488
  ExtraFilter: `UserID = '${this.metadata.CurrentUser.ID}' AND EntityID = '${this.record.EntityID}'`,
@@ -1516,7 +1516,7 @@ let MJListFormComponentExtended = class MJListFormComponentExtended extends MJLi
1516
1516
  this.showAddFromViewLoader = true;
1517
1517
  this.fetchingRecordsToSave = true;
1518
1518
  this.cdr.markForCheck();
1519
- const rv = new RunView();
1519
+ const rv = RunView.FromMetadataProvider(this.ProviderToUse);
1520
1520
  // Collect all unique record IDs from selected views
1521
1521
  const recordIdSet = new Set();
1522
1522
  for (const userView of this.userViewsToAdd) {
@@ -1 +1 @@
1
- {"version":3,"file":"list-form.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/Lists/list-form.component.ts","../../../../src/lib/custom/Lists/list-form.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectionStrategy, inject } from '@angular/core';\nimport { Subject, debounceTime } from 'rxjs';\nimport { RegisterClass, UUIDsEqual, NormalizeUUID } from '@memberjunction/global';\nimport { BaseFormComponent } from '@memberjunction/ng-base-forms';\nimport { SharedService } from '@memberjunction/ng-shared';\nimport { MJListFormComponent } from '../../generated/Entities/MJList/mjlist.form.component';\nimport { MJListEntity, MJListDetailEntity, MJListDetailEntityExtended, MJListCategoryEntity, MJUserViewEntityExtended } from '@memberjunction/core-entities';\nimport { Metadata, RunView, RunViewResult, EntityInfo, LogError, LogStatus } from '@memberjunction/core';\nimport { ListShareDialogConfig, ListShareDialogResult } from '@memberjunction/ng-list-management';\n\nexport type ListSection = 'overview' | 'items' | 'sharing' | 'activity' | 'settings';\n\nexport interface ListItemViewModel {\n detail: MJListDetailEntity;\n recordName: string;\n isLoading: boolean;\n}\n\nexport interface ListStats {\n itemCount: number;\n shareCount: number;\n invitationCount: number;\n lastUpdated: Date | null;\n}\n\n/**\n * Represents a record that can be added to a list\n */\nexport interface AddableRecord {\n ID: string;\n Name: string;\n isInList: boolean;\n isSelected: boolean;\n}\n\n/**\n * World-class List form component that provides a rich exploration experience\n * for managing lists in the MemberJunction system.\n *\n * Features:\n * - Overview with visual stats and entity context\n * - Items grid with inline record navigation\n * - Sharing management (coming soon)\n * - Activity history\n * - Settings and configuration\n */\n@RegisterClass(BaseFormComponent, 'MJ: Lists')\n@Component({\n standalone: false,\n selector: 'mj-list-form-extended',\n templateUrl: './list-form.component.html',\n styleUrls: ['./list-form.component.css', '../../../shared/form-styles.css'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MJListFormComponentExtended extends MJListFormComponent implements OnInit, OnDestroy {\n private sharedService = inject(SharedService);\n\n public override record!: MJListEntity;\n\n // Navigation\n public activeSection: ListSection = 'overview';\n public navItems = [\n { id: 'overview' as ListSection, icon: 'fa-solid fa-house', label: 'Overview' },\n { id: 'items' as ListSection, icon: 'fa-solid fa-list', label: 'Items', badge: 0 },\n { id: 'sharing' as ListSection, icon: 'fa-solid fa-share-nodes', label: 'Sharing', badge: 0, disabled: false },\n { id: 'activity' as ListSection, icon: 'fa-solid fa-clock-rotate-left', label: 'Activity' },\n { id: 'settings' as ListSection, icon: 'fa-solid fa-gear', label: 'Settings' }\n ];\n\n // Data\n public listItems: ListItemViewModel[] = [];\n public categories: MJListCategoryEntity[] = [];\n public entityInfo: EntityInfo | null = null;\n public stats: ListStats = {\n itemCount: 0,\n shareCount: 0,\n invitationCount: 0,\n lastUpdated: null\n };\n\n // Loading states\n public isLoadingItems = false;\n public isLoadingStats = false;\n public explorerError: string | null = null;\n\n // Items section\n public itemSearchTerm = '';\n public selectedItems = new Set<string>();\n public isSelectAllChecked = false;\n\n // Edit state\n public isEditingName = false;\n public isEditingDescription = false;\n public editingName = '';\n public editingDescription = '';\n\n // Add Records dialog\n public showAddRecordsDialog = false;\n public addDialogLoading = false;\n public addDialogSaving = false;\n public addableRecords: AddableRecord[] = [];\n public addRecordsSearchFilter = '';\n public existingListDetailIds = new Set<string>();\n public addProgress = 0;\n public addTotal = 0;\n private searchSubject = new Subject<string>();\n\n // Add From View dialog\n public showAddFromViewDialog = false;\n public showAddFromViewLoader = false;\n public userViews: MJUserViewEntityExtended[] | null = null;\n public userViewsToAdd: MJUserViewEntityExtended[] = [];\n public addFromViewProgress = 0;\n public addFromViewTotal = 0;\n public fetchingRecordsToSave = false;\n\n // Share dialog\n public showShareDialog = false;\n public shareDialogConfig: ListShareDialogConfig | null = null;\n\n private destroy$ = new Subject<void>();\n private metadata = new Metadata();\n\n override async ngOnInit(): Promise<void> {\n await super.ngOnInit();\n\n // Set up search debounce\n this.searchSubject\n .pipe(debounceTime(300))\n .subscribe((searchText) => this.searchRecords(searchText));\n\n await this.loadExplorerData();\n }\n\n // Helper to show notifications using SharedService's deprecated method\n private showNotification(message: string, style: 'success' | 'error' | 'info' = 'info', duration: number = 3000): void {\n this.sharedService.CreateSimpleNotification(message, style, duration);\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private async loadExplorerData(): Promise<void> {\n try {\n // Load entity info for context\n if (this.record?.EntityID) {\n this.entityInfo = this.metadata.Entities.find(e => UUIDsEqual(e.ID, this.record.EntityID)) || null;\n }\n\n // Load categories for dropdown\n await this.loadCategories();\n\n // Load items and stats in parallel\n await Promise.all([\n this.loadItems(),\n this.loadStats()\n ]);\n\n this.updateNavBadges();\n } catch (error) {\n console.error('Error loading list data:', error);\n this.explorerError = 'Failed to load list data';\n } finally {\n this.cdr.markForCheck();\n }\n }\n\n private async loadCategories(): Promise<void> {\n const rv = new RunView();\n const result = await rv.RunView<MJListCategoryEntity>({\n EntityName: 'MJ: List Categories',\n OrderBy: 'Name',\n ResultType: 'entity_object'\n });\n if (result.Success) {\n this.categories = result.Results;\n }\n }\n\n private async loadItems(): Promise<void> {\n if (!this.record?.IsSaved) return;\n\n this.isLoadingItems = true;\n this.cdr.markForCheck();\n\n try {\n const rv = new RunView();\n const result = await rv.RunView<MJListDetailEntity>({\n EntityName: 'MJ: List Details',\n ExtraFilter: `ListID = '${this.record.ID}'`,\n OrderBy: '__mj_CreatedAt DESC',\n ResultType: 'entity_object'\n });\n\n if (result.Success) {\n this.listItems = result.Results.map(detail => ({\n detail,\n recordName: detail.RecordID || 'Loading...',\n isLoading: true\n }));\n\n // Load record names asynchronously\n this.loadRecordNames();\n }\n } catch (error) {\n console.error('Error loading list items:', error);\n } finally {\n this.isLoadingItems = false;\n this.cdr.markForCheck();\n }\n }\n\n private async loadRecordNames(): Promise<void> {\n if (!this.entityInfo) return;\n\n const rv = new RunView();\n // Get the name field - NameField is EntityFieldInfo or undefined\n const nameFieldInfo = this.entityInfo.NameField;\n const nameFieldName = nameFieldInfo ? nameFieldInfo.Name : 'ID';\n\n for (const item of this.listItems) {\n try {\n const result = await rv.RunView({\n EntityName: this.entityInfo.Name,\n ExtraFilter: `ID = '${item.detail.RecordID}'`,\n Fields: [nameFieldName],\n ResultType: 'simple',\n MaxRows: 1\n });\n\n if (result.Success && result.Results.length > 0) {\n const record = result.Results[0] as Record<string, string>;\n item.recordName = record[nameFieldName] || item.detail.RecordID || '';\n }\n } catch (error) {\n item.recordName = item.detail.RecordID || 'Unknown';\n } finally {\n item.isLoading = false;\n }\n }\n this.cdr.markForCheck();\n }\n\n private async loadStats(): Promise<void> {\n if (!this.record?.IsSaved) return;\n\n this.isLoadingStats = true;\n\n try {\n const rv = new RunView();\n const [itemsResult, sharesResult, invitationsResult] = await rv.RunViews([\n {\n EntityName: 'MJ: List Details',\n ExtraFilter: `ListID = '${this.record.ID}'`,\n ResultType: 'count_only'\n },\n {\n EntityName: 'MJ: List Shares',\n ExtraFilter: `ListID = '${this.record.ID}'`,\n ResultType: 'count_only'\n },\n {\n EntityName: 'MJ: List Invitations',\n ExtraFilter: `ListID = '${this.record.ID}'`,\n ResultType: 'count_only'\n }\n ]);\n\n this.stats = {\n itemCount: itemsResult.Success ? itemsResult.TotalRowCount : 0,\n shareCount: sharesResult.Success ? sharesResult.TotalRowCount : 0,\n invitationCount: invitationsResult.Success ? invitationsResult.TotalRowCount : 0,\n lastUpdated: this.record.__mj_UpdatedAt\n };\n } catch (error) {\n console.error('Error loading stats:', error);\n } finally {\n this.isLoadingStats = false;\n this.cdr.markForCheck();\n }\n }\n\n private updateNavBadges(): void {\n this.navItems = this.navItems.map(item => {\n switch (item.id) {\n case 'items':\n return { ...item, badge: this.stats.itemCount };\n case 'sharing':\n return { ...item, badge: this.stats.shareCount + this.stats.invitationCount };\n default:\n return item;\n }\n });\n }\n\n // === Navigation ===\n\n public setActiveSection(section: ListSection): void {\n const navItem = this.navItems.find(n => n.id === section);\n if (navItem?.disabled) return;\n\n this.activeSection = section;\n this.cdr.markForCheck();\n }\n\n // === Items Management ===\n\n public get filteredItems(): ListItemViewModel[] {\n if (!this.itemSearchTerm) return this.listItems;\n\n const term = this.itemSearchTerm.toLowerCase();\n return this.listItems.filter(item =>\n item.recordName.toLowerCase().includes(term) ||\n item.detail.RecordID?.toLowerCase().includes(term)\n );\n }\n\n public toggleItemSelection(item: ListItemViewModel): void {\n const id = item.detail.ID;\n if (this.selectedItems.has(id)) {\n this.selectedItems.delete(id);\n } else {\n this.selectedItems.add(id);\n }\n this.updateSelectAllState();\n this.cdr.markForCheck();\n }\n\n public toggleSelectAll(): void {\n if (this.isSelectAllChecked) {\n this.selectedItems.clear();\n } else {\n for (const item of this.filteredItems) {\n this.selectedItems.add(item.detail.ID);\n }\n }\n this.isSelectAllChecked = !this.isSelectAllChecked;\n this.cdr.markForCheck();\n }\n\n private updateSelectAllState(): void {\n this.isSelectAllChecked = this.filteredItems.length > 0 &&\n this.filteredItems.every(item => this.selectedItems.has(item.detail.ID));\n }\n\n public async removeSelectedItems(): Promise<void> {\n if (this.selectedItems.size === 0) return;\n\n const count = this.selectedItems.size;\n const confirmMessage = `Remove ${count} item${count > 1 ? 's' : ''} from this list?`;\n\n if (!confirm(confirmMessage)) return;\n\n try {\n for (const id of this.selectedItems) {\n const item = this.listItems.find(i => UUIDsEqual(i.detail.ID, id));\n if (item) {\n await item.detail.Delete();\n }\n }\n\n this.showNotification(\n `Removed ${count} item${count > 1 ? 's' : ''} from list`,\n 'success',\n 3000\n );\n\n this.selectedItems.clear();\n await this.loadItems();\n await this.loadStats();\n this.updateNavBadges();\n } catch (error) {\n console.error('Error removing items:', error);\n this.showNotification(\n 'Error removing items from list',\n 'error',\n 4000\n );\n }\n }\n\n public openRecord(item: ListItemViewModel): void {\n if (!this.entityInfo || !item.detail.RecordID) return;\n\n // Use SharedService to open the record\n this.sharedService.InvokeManualResize();\n }\n\n // === Inline Editing ===\n\n public startEditingName(): void {\n this.editingName = this.record.Name;\n this.isEditingName = true;\n this.cdr.markForCheck();\n }\n\n public async saveNameEdit(): Promise<void> {\n if (!this.editingName.trim()) {\n this.cancelNameEdit();\n return;\n }\n\n this.record.Name = this.editingName.trim();\n const saved = await this.record.Save();\n\n if (saved) {\n this.showNotification('Name updated', 'success', 2000);\n } else {\n this.showNotification('Failed to update name', 'error', 3000);\n }\n\n this.isEditingName = false;\n this.cdr.markForCheck();\n }\n\n public cancelNameEdit(): void {\n this.isEditingName = false;\n this.cdr.markForCheck();\n }\n\n public startEditingDescription(): void {\n this.editingDescription = this.record.Description || '';\n this.isEditingDescription = true;\n this.cdr.markForCheck();\n }\n\n public async saveDescriptionEdit(): Promise<void> {\n this.record.Description = this.editingDescription.trim() || null;\n const saved = await this.record.Save();\n\n if (saved) {\n this.showNotification('Description updated', 'success', 2000);\n } else {\n this.showNotification('Failed to update description', 'error', 3000);\n }\n\n this.isEditingDescription = false;\n this.cdr.markForCheck();\n }\n\n public cancelDescriptionEdit(): void {\n this.isEditingDescription = false;\n this.cdr.markForCheck();\n }\n\n // === Helpers ===\n\n public get entityDisplayName(): string {\n return this.entityInfo?.DisplayName || this.entityInfo?.Name || this.record?.Entity || 'Unknown';\n }\n\n public get entityIcon(): string {\n return this.entityInfo?.Icon || 'fa-solid fa-table';\n }\n\n public get categoryName(): string {\n if (!this.record?.CategoryID) return 'Uncategorized';\n const category = this.categories.find(c => UUIDsEqual(c.ID, this.record.CategoryID));\n return category?.Name || 'Unknown';\n }\n\n public get formattedItemCount(): string {\n return this.stats.itemCount.toLocaleString();\n }\n\n public get formattedLastUpdated(): string {\n if (!this.stats.lastUpdated) return 'Never';\n const date = new Date(this.stats.lastUpdated);\n const now = new Date();\n const diffMs = now.getTime() - date.getTime();\n const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24));\n\n if (diffDays === 0) return 'Today';\n if (diffDays === 1) return 'Yesterday';\n if (diffDays < 7) return `${diffDays} days ago`;\n return date.toLocaleDateString();\n }\n\n public getOwnerName(): string {\n return this.record?.User || 'Unknown';\n }\n\n public isCurrentUserOwner(): boolean {\n return UUIDsEqual(this.record?.UserID, this.metadata.CurrentUser?.ID);\n }\n\n public async onCategoryChange(categoryId: string | null): Promise<void> {\n this.record.CategoryID = categoryId;\n const saved = await this.record.Save();\n\n if (saved) {\n this.showNotification('Category updated', 'success', 2000);\n } else {\n this.showNotification('Failed to update category', 'error', 3000);\n }\n\n this.cdr.markForCheck();\n }\n\n public async refreshItems(): Promise<void> {\n await this.loadItems();\n await this.loadStats();\n this.updateNavBadges();\n }\n\n // ==========================================\n // Add Records Dialog\n // ==========================================\n\n public async openAddRecordsDialog(): Promise<void> {\n this.showAddRecordsDialog = true;\n this.addableRecords = [];\n this.addRecordsSearchFilter = '';\n this.addDialogLoading = true;\n this.addDialogSaving = false;\n\n // Load existing list detail IDs to mark which records are already in the list\n await this.loadExistingListDetailIds();\n this.addDialogLoading = false;\n this.cdr.markForCheck();\n }\n\n public closeAddRecordsDialog(): void {\n this.showAddRecordsDialog = false;\n this.addableRecords = [];\n this.addRecordsSearchFilter = '';\n this.existingListDetailIds.clear();\n this.addDialogSaving = false;\n this.addProgress = 0;\n this.addTotal = 0;\n this.cdr.markForCheck();\n }\n\n private async loadExistingListDetailIds(): Promise<void> {\n if (!this.record) return;\n\n const rv = new RunView();\n const result = await rv.RunView<{ RecordID: string }>({\n EntityName: 'MJ: List Details',\n ExtraFilter: `ListID = '${this.record.ID}'`,\n Fields: ['RecordID'],\n ResultType: 'simple'\n }, this.metadata.CurrentUser);\n\n if (result.Success) {\n this.existingListDetailIds = new Set(result.Results.map(r => NormalizeUUID(r.RecordID)));\n }\n }\n\n public onAddRecordsSearchChange(value: string): void {\n this.addRecordsSearchFilter = value;\n this.searchSubject.next(value);\n }\n\n private async searchRecords(searchText: string): Promise<void> {\n if (!this.record || !searchText || searchText.length < 2) {\n this.addableRecords = [];\n this.cdr.markForCheck();\n return;\n }\n\n this.addDialogLoading = true;\n this.cdr.markForCheck();\n\n const sourceEntityInfo = this.metadata.EntityByID(this.record.EntityID);\n if (!sourceEntityInfo) {\n this.addDialogLoading = false;\n this.cdr.markForCheck();\n return;\n }\n\n const nameField = sourceEntityInfo.Fields.find(field => field.IsNameField);\n const pkField = sourceEntityInfo.FirstPrimaryKey?.Name || 'ID';\n\n let filter: string | undefined;\n if (nameField) {\n filter = `${nameField.Name} LIKE '%${searchText}%'`;\n }\n\n const rv = new RunView();\n const result: RunViewResult = await rv.RunView({\n EntityName: this.record.Entity,\n ExtraFilter: filter,\n MaxRows: 100,\n ResultType: 'simple'\n });\n\n if (result.Success) {\n this.addableRecords = result.Results.map((record: Record<string, unknown>) => {\n const recordId = String(record[pkField]);\n return {\n ID: recordId,\n Name: nameField ? String(record[nameField.Name]) : recordId,\n isInList: this.existingListDetailIds.has(NormalizeUUID(recordId)),\n isSelected: false\n };\n });\n }\n\n this.addDialogLoading = false;\n this.cdr.markForCheck();\n }\n\n public toggleRecordSelection(record: AddableRecord): void {\n if (record.isInList) return; // Can't select records already in list\n record.isSelected = !record.isSelected;\n this.cdr.markForCheck();\n }\n\n public get selectedAddableRecords(): AddableRecord[] {\n return this.addableRecords.filter(r => r.isSelected);\n }\n\n public selectAllAddable(): void {\n this.addableRecords.forEach(r => {\n if (!r.isInList) r.isSelected = true;\n });\n this.cdr.markForCheck();\n }\n\n public deselectAllAddable(): void {\n this.addableRecords.forEach(r => r.isSelected = false);\n this.cdr.markForCheck();\n }\n\n public async confirmAddRecords(): Promise<void> {\n const recordsToAdd = this.selectedAddableRecords;\n if (recordsToAdd.length === 0 || !this.record) return;\n\n this.addDialogSaving = true;\n this.addTotal = recordsToAdd.length;\n this.addProgress = 0;\n this.cdr.markForCheck();\n\n // Use transaction group for bulk insert\n const tg = await this.metadata.CreateTransactionGroup();\n\n for (const record of recordsToAdd) {\n const listDetail = await this.metadata.GetEntityObject<MJListDetailEntityExtended>('MJ: List Details');\n listDetail.ListID = this.record.ID;\n listDetail.RecordID = record.ID;\n listDetail.TransactionGroup = tg;\n await listDetail.Save();\n }\n\n const success = await tg.Submit();\n\n if (success) {\n this.addProgress = this.addTotal;\n this.showNotification(\n `Added ${recordsToAdd.length} record${recordsToAdd.length !== 1 ? 's' : ''} to list`,\n 'success',\n 2500\n );\n this.closeAddRecordsDialog();\n await this.refreshItems();\n } else {\n LogError('Error adding records to list');\n this.showNotification('Failed to add some records', 'error', 2500);\n this.addDialogSaving = false;\n this.cdr.markForCheck();\n }\n }\n\n // ==========================================\n // Add From View Dialog\n // ==========================================\n\n public async openAddFromViewDialog(): Promise<void> {\n this.showAddFromViewDialog = true;\n this.userViewsToAdd = [];\n this.cdr.markForCheck();\n\n if (!this.userViews) {\n await this.loadEntityViews();\n }\n }\n\n public closeAddFromViewDialog(): void {\n this.showAddFromViewDialog = false;\n this.userViewsToAdd = [];\n this.showAddFromViewLoader = false;\n this.addFromViewProgress = 0;\n this.addFromViewTotal = 0;\n this.cdr.markForCheck();\n }\n\n private async loadEntityViews(): Promise<void> {\n if (!this.record || !this.record.Entity) return;\n\n this.showAddFromViewLoader = true;\n this.cdr.markForCheck();\n\n const rv = new RunView();\n const runViewResult = await rv.RunView<MJUserViewEntityExtended>({\n EntityName: 'MJ: User Views',\n ExtraFilter: `UserID = '${this.metadata.CurrentUser.ID}' AND EntityID = '${this.record.EntityID}'`,\n ResultType: 'entity_object'\n }, this.metadata.CurrentUser);\n\n if (!runViewResult.Success) {\n LogError(`Error loading User Views for entity ${this.record.Entity}`);\n } else {\n this.userViews = runViewResult.Results;\n }\n\n this.showAddFromViewLoader = false;\n this.cdr.markForCheck();\n }\n\n public toggleViewSelection(view: MJUserViewEntityExtended): void {\n const index = this.userViewsToAdd.findIndex(v => UUIDsEqual(v.ID, view.ID));\n if (index >= 0) {\n this.userViewsToAdd.splice(index, 1);\n } else {\n this.userViewsToAdd.push(view);\n }\n this.cdr.markForCheck();\n }\n\n public isViewSelected(view: MJUserViewEntityExtended): boolean {\n return this.userViewsToAdd.some(v => UUIDsEqual(v.ID, view.ID));\n }\n\n public async confirmAddFromView(): Promise<void> {\n if (!this.record || this.userViewsToAdd.length === 0) return;\n\n this.showAddFromViewLoader = true;\n this.fetchingRecordsToSave = true;\n this.cdr.markForCheck();\n\n const rv = new RunView();\n\n // Collect all unique record IDs from selected views\n const recordIdSet = new Set<string>();\n\n for (const userView of this.userViewsToAdd) {\n const runViewResult = await rv.RunView({\n ViewID: userView.ID,\n ViewEntity: userView,\n Fields: ['ID']\n }, this.metadata.CurrentUser);\n\n if (runViewResult.Success) {\n const records = runViewResult.Results as Array<Record<string, string>>;\n records.forEach(r => recordIdSet.add(NormalizeUUID(r.ID)));\n }\n }\n\n // Filter out records already in the list\n await this.loadExistingListDetailIds();\n const recordsToAdd = [...recordIdSet].filter(id => !this.existingListDetailIds.has(id));\n\n this.addFromViewTotal = recordsToAdd.length;\n this.addFromViewProgress = 0;\n this.fetchingRecordsToSave = false;\n this.cdr.markForCheck();\n\n if (recordsToAdd.length === 0) {\n this.showNotification('All records already in list', 'info', 2500);\n this.showAddFromViewLoader = false;\n this.cdr.markForCheck();\n return;\n }\n\n LogStatus(`Adding ${recordsToAdd.length} records to list`);\n\n // Use transaction group for bulk insert\n const tg = await this.metadata.CreateTransactionGroup();\n\n for (const recordID of recordsToAdd) {\n const listDetail = await this.metadata.GetEntityObject<MJListDetailEntityExtended>('MJ: List Details');\n listDetail.ListID = this.record.ID;\n listDetail.RecordID = recordID;\n listDetail.TransactionGroup = tg;\n await listDetail.Save();\n }\n\n const success = await tg.Submit();\n\n if (success) {\n this.addFromViewProgress = this.addFromViewTotal;\n this.showNotification(\n `Added ${recordsToAdd.length} record${recordsToAdd.length !== 1 ? 's' : ''} to list`,\n 'success',\n 2500\n );\n this.closeAddFromViewDialog();\n await this.refreshItems();\n } else {\n LogError('Error adding records from view to list');\n this.showNotification('Failed to add some records', 'error', 2500);\n this.showAddFromViewLoader = false;\n this.cdr.markForCheck();\n }\n }\n\n // ==========================================\n // Share Dialog\n // ==========================================\n\n public openShareDialog(): void {\n if (!this.record?.IsSaved) return;\n\n this.shareDialogConfig = {\n listId: this.record.ID,\n listName: this.record.Name,\n currentUserId: this.metadata.CurrentUser.ID,\n isOwner: this.isCurrentUserOwner()\n };\n this.showShareDialog = true;\n this.cdr.markForCheck();\n }\n\n public onShareDialogComplete(result: ListShareDialogResult): void {\n this.showShareDialog = false;\n this.shareDialogConfig = null;\n\n if (result.action === 'apply') {\n // Refresh stats to update share counts\n this.loadStats().then(() => {\n this.updateNavBadges();\n this.cdr.markForCheck();\n });\n }\n this.cdr.markForCheck();\n }\n\n public onShareDialogCancel(): void {\n this.showShareDialog = false;\n this.shareDialogConfig = null;\n this.cdr.markForCheck();\n }\n}\n","<!-- World-Class List Form -->\n<div class=\"list-form-explorer\">\n <!-- Header -->\n <header class=\"list-header\">\n <div class=\"header-content\">\n <div class=\"header-icon\" [style.background-color]=\"'var(--mj-brand-primary)'\">\n <i [class]=\"entityIcon\"></i>\n </div>\n <div class=\"header-info\">\n <div class=\"name-row\">\n @if (!isEditingName) {\n <h1 class=\"list-name\">{{record.Name || 'Untitled List'}}</h1>\n @if (isCurrentUserOwner()) {\n <button\n class=\"edit-btn\"\n (click)=\"startEditingName()\"\n title=\"Edit name\"\n >\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n }\n }\n @if (isEditingName) {\n <input\n type=\"text\"\n class=\"inline-edit-input name-input\"\n [(ngModel)]=\"editingName\"\n (keydown.enter)=\"saveNameEdit()\"\n (keydown.escape)=\"cancelNameEdit()\"\n #nameInput />\n <button class=\"save-btn\" (click)=\"saveNameEdit()\">\n <i class=\"fa-solid fa-check\"></i>\n </button>\n <button class=\"cancel-btn\" (click)=\"cancelNameEdit()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n }\n </div>\n <div class=\"entity-badge\">\n <i [class]=\"entityIcon\"></i>\n <span>{{entityDisplayName}}</span>\n </div>\n </div>\n </div>\n <div class=\"header-stats\">\n <div class=\"stat-item\">\n <span class=\"stat-value\">{{formattedItemCount}}</span>\n <span class=\"stat-label\">Items</span>\n </div>\n <div class=\"stat-item\">\n <span class=\"stat-value\">{{stats.shareCount}}</span>\n <span class=\"stat-label\">Shares</span>\n </div>\n <div class=\"stat-item\">\n <span class=\"stat-value\">{{formattedLastUpdated}}</span>\n <span class=\"stat-label\">Updated</span>\n </div>\n </div>\n </header>\n\n <!-- Navigation Rail -->\n <nav class=\"nav-rail\">\n @for (nav of navItems; track nav) {\n <button\n class=\"nav-item\"\n [class.active]=\"activeSection === nav.id\"\n [class.disabled]=\"nav.disabled\"\n (click)=\"setActiveSection(nav.id)\"\n [title]=\"nav.label\">\n <i [class]=\"nav.icon\"></i>\n <span class=\"nav-label\">{{nav.label}}</span>\n @if (nav.badge && nav.badge > 0) {\n <span class=\"nav-badge\">{{nav.badge}}</span>\n }\n </button>\n }\n </nav>\n\n <!-- Main Content -->\n <main class=\"main-content\">\n <!-- Overview Section -->\n @if (activeSection === 'overview') {\n <section class=\"section overview-section\">\n <div class=\"overview-grid\">\n <!-- Description Card -->\n <div class=\"overview-card description-card\">\n <div class=\"card-header\">\n <h3><i class=\"fa-solid fa-align-left\"></i> Description</h3>\n @if (isCurrentUserOwner() && !isEditingDescription) {\n <button\n class=\"edit-btn\"\n (click)=\"startEditingDescription()\"\n >\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n }\n </div>\n <div class=\"card-body\">\n @if (!isEditingDescription) {\n @if (record.Description) {\n <p class=\"description-text\">{{record.Description}}</p>\n }\n @if (!record.Description) {\n <p class=\"description-empty\">No description provided</p>\n }\n }\n @if (isEditingDescription) {\n <textarea\n class=\"inline-edit-input description-input\"\n [(ngModel)]=\"editingDescription\"\n placeholder=\"Add a description...\"\n rows=\"3\"\n (keydown.escape)=\"cancelDescriptionEdit()\"></textarea>\n <div class=\"edit-actions\">\n <button class=\"btn-primary\" (click)=\"saveDescriptionEdit()\">Save</button>\n <button class=\"btn-secondary\" (click)=\"cancelDescriptionEdit()\">Cancel</button>\n </div>\n }\n </div>\n </div>\n <!-- Details Card -->\n <div class=\"overview-card details-card\">\n <div class=\"card-header\">\n <h3><i class=\"fa-solid fa-info-circle\"></i> Details</h3>\n </div>\n <div class=\"card-body\">\n <div class=\"detail-row\">\n <span class=\"detail-label\">Entity</span>\n <span class=\"detail-value\">\n <i [class]=\"entityIcon\" class=\"detail-icon\"></i>\n {{entityDisplayName}}\n </span>\n </div>\n <div class=\"detail-row\">\n <span class=\"detail-label\">Category</span>\n @if (!isCurrentUserOwner()) {\n <span class=\"detail-value\">\n <i class=\"fa-solid fa-folder detail-icon\"></i>\n {{categoryName}}\n </span>\n }\n @if (isCurrentUserOwner()) {\n <select\n class=\"category-select\"\n [ngModel]=\"record.CategoryID\"\n (ngModelChange)=\"onCategoryChange($event)\">\n <option [ngValue]=\"null\">Uncategorized</option>\n @for (cat of categories; track cat) {\n <option [ngValue]=\"cat.ID\">{{cat.Name}}</option>\n }\n </select>\n }\n </div>\n <div class=\"detail-row\">\n <span class=\"detail-label\">Owner</span>\n <span class=\"detail-value\">\n <i class=\"fa-solid fa-user detail-icon\"></i>\n {{getOwnerName()}}\n @if (isCurrentUserOwner()) {\n <span class=\"owner-badge\">You</span>\n }\n </span>\n </div>\n <div class=\"detail-row\">\n <span class=\"detail-label\">Created</span>\n <span class=\"detail-value\">\n <i class=\"fa-solid fa-calendar detail-icon\"></i>\n {{record.__mj_CreatedAt | date:'mediumDate'}}\n </span>\n </div>\n </div>\n </div>\n <!-- Quick Actions Card -->\n <div class=\"overview-card actions-card\">\n <div class=\"card-header\">\n <h3><i class=\"fa-solid fa-bolt\"></i> Quick Actions</h3>\n </div>\n <div class=\"card-body\">\n <button class=\"action-btn\" (click)=\"setActiveSection('items')\">\n <i class=\"fa-solid fa-list\"></i>\n <span>View Items</span>\n <span class=\"action-count\">{{stats.itemCount}}</span>\n </button>\n @if (isCurrentUserOwner()) {\n <button class=\"action-btn\" (click)=\"openShareDialog()\">\n <i class=\"fa-solid fa-share-nodes\"></i>\n <span>Share List</span>\n @if (stats.shareCount > 0) {\n <span class=\"action-count\">{{stats.shareCount}}</span>\n }\n </button>\n }\n @if (!isCurrentUserOwner()) {\n <button class=\"action-btn\" (click)=\"setActiveSection('sharing')\">\n <i class=\"fa-solid fa-share-nodes\"></i>\n <span>View Sharing</span>\n </button>\n }\n <button class=\"action-btn\" [disabled]=\"true\" title=\"Coming soon\">\n <i class=\"fa-solid fa-file-export\"></i>\n <span>Export Data</span>\n <span class=\"coming-soon\">Soon</span>\n </button>\n </div>\n </div>\n </div>\n </section>\n }\n\n <!-- Items Section -->\n @if (activeSection === 'items') {\n <section class=\"section items-section\">\n <div class=\"section-header\">\n <h2>List Items</h2>\n <div class=\"section-actions\">\n <div class=\"search-box\">\n <i class=\"fa-solid fa-search\"></i>\n <input\n type=\"text\"\n placeholder=\"Search items...\"\n [(ngModel)]=\"itemSearchTerm\" />\n </div>\n @if (isCurrentUserOwner()) {\n <div class=\"add-buttons\">\n <button class=\"btn-secondary\" (click)=\"openAddRecordsDialog()\" title=\"Add individual records\">\n <i class=\"fa-solid fa-plus\"></i> Add Records\n </button>\n <button class=\"btn-secondary\" (click)=\"openAddFromViewDialog()\" title=\"Add records from a saved view\">\n <i class=\"fa-solid fa-table-list\"></i> Add From View\n </button>\n </div>\n }\n <button class=\"btn-icon\" (click)=\"refreshItems()\" title=\"Refresh\">\n <i class=\"fa-solid fa-refresh\"></i>\n </button>\n </div>\n </div>\n <!-- Loading State -->\n @if (isLoadingItems) {\n <div class=\"loading-state\">\n <mj-loading text=\"Loading items...\" size=\"medium\"></mj-loading>\n </div>\n }\n <!-- Empty State -->\n @if (!isLoadingItems && listItems.length === 0) {\n <div class=\"empty-state\">\n <div class=\"empty-icon\">\n <i class=\"fa-solid fa-inbox\"></i>\n </div>\n <h3>No Items Yet</h3>\n <p>This list doesn't have any items. Add records from the {{entityDisplayName}} entity.</p>\n </div>\n }\n <!-- Items Table -->\n @if (!isLoadingItems && listItems.length > 0) {\n <div class=\"items-table-container\">\n @if (selectedItems.size > 0) {\n <div class=\"items-toolbar\">\n <span class=\"selection-count\">{{selectedItems.size}} selected</span>\n <button class=\"btn-danger\" (click)=\"removeSelectedItems()\">\n <i class=\"fa-solid fa-trash\"></i>\n Remove from List\n </button>\n </div>\n }\n <table class=\"items-table\">\n <thead>\n <tr>\n <th class=\"col-checkbox\">\n <input\n type=\"checkbox\"\n [checked]=\"isSelectAllChecked\"\n (change)=\"toggleSelectAll()\" />\n </th>\n <th class=\"col-name\">Name</th>\n <th class=\"col-id\">Record ID</th>\n <th class=\"col-added\">Added</th>\n <th class=\"col-actions\"></th>\n </tr>\n </thead>\n <tbody>\n @for (item of filteredItems; track item) {\n <tr\n [class.selected]=\"selectedItems.has(item.detail.ID)\">\n <td class=\"col-checkbox\">\n <input\n type=\"checkbox\"\n [checked]=\"selectedItems.has(item.detail.ID)\"\n (change)=\"toggleItemSelection(item)\" />\n </td>\n <td class=\"col-name\">\n <div class=\"item-name\" [class.loading]=\"item.isLoading\">\n <i [class]=\"entityIcon\" class=\"item-icon\"></i>\n <span>{{item.recordName}}</span>\n @if (item.isLoading) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n }\n </div>\n </td>\n <td class=\"col-id\">\n <code class=\"record-id\">{{item.detail.RecordID}}</code>\n </td>\n <td class=\"col-added\">\n {{item.detail.__mj_CreatedAt | date:'shortDate'}}\n </td>\n <td class=\"col-actions\">\n <button\n class=\"btn-icon\"\n (click)=\"openRecord(item)\"\n title=\"Open record\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\"></i>\n </button>\n </td>\n </tr>\n }\n </tbody>\n </table>\n <div class=\"items-footer\">\n <span class=\"items-count\">\n Showing {{filteredItems.length}} of {{listItems.length}} items\n </span>\n </div>\n </div>\n }\n </section>\n }\n\n <!-- Sharing Section -->\n @if (activeSection === 'sharing') {\n <section class=\"section sharing-section\">\n <div class=\"section-header\">\n <h2>Sharing</h2>\n @if (isCurrentUserOwner()) {\n <div class=\"section-actions\">\n <button class=\"btn-primary\" (click)=\"openShareDialog()\">\n <i class=\"fa-solid fa-user-plus\"></i> Manage Sharing\n </button>\n </div>\n }\n </div>\n <!-- Sharing summary -->\n @if (stats.shareCount > 0 || stats.invitationCount > 0) {\n <div class=\"sharing-summary\">\n <div class=\"summary-card\">\n <div class=\"summary-icon\">\n <i class=\"fa-solid fa-users\"></i>\n </div>\n <div class=\"summary-content\">\n <span class=\"summary-value\">{{stats.shareCount}}</span>\n <span class=\"summary-label\">Active Share{{stats.shareCount !== 1 ? 's' : ''}}</span>\n </div>\n </div>\n @if (stats.invitationCount > 0) {\n <div class=\"summary-card\">\n <div class=\"summary-icon pending\">\n <i class=\"fa-solid fa-envelope\"></i>\n </div>\n <div class=\"summary-content\">\n <span class=\"summary-value\">{{stats.invitationCount}}</span>\n <span class=\"summary-label\">Pending Invitation{{stats.invitationCount !== 1 ? 's' : ''}}</span>\n </div>\n </div>\n }\n </div>\n }\n <!-- Empty state for no shares -->\n @if (stats.shareCount === 0 && stats.invitationCount === 0) {\n <div class=\"empty-state\">\n <div class=\"empty-icon\">\n <i class=\"fa-solid fa-share-nodes\"></i>\n </div>\n <h3>Not Shared Yet</h3>\n @if (isCurrentUserOwner()) {\n <p>This list is private. Click \"Manage Sharing\" to share it with other users or roles.</p>\n }\n @if (!isCurrentUserOwner()) {\n <p>This list hasn't been shared with anyone else.</p>\n }\n @if (isCurrentUserOwner()) {\n <button class=\"btn-primary\" (click)=\"openShareDialog()\">\n <i class=\"fa-solid fa-user-plus\"></i> Share This List\n </button>\n }\n </div>\n }\n <!-- Read-only notice for non-owners -->\n @if (!isCurrentUserOwner() && (stats.shareCount > 0 || stats.invitationCount > 0)) {\n <div class=\"readonly-notice\">\n <i class=\"fa-solid fa-info-circle\"></i>\n <span>Only the list owner can manage sharing settings.</span>\n </div>\n }\n </section>\n }\n\n <!-- Activity Section -->\n @if (activeSection === 'activity') {\n <section class=\"section activity-section\">\n <div class=\"section-header\">\n <h2>Activity</h2>\n </div>\n <div class=\"activity-timeline\">\n <div class=\"timeline-item\">\n <div class=\"timeline-icon\">\n <i class=\"fa-solid fa-edit\"></i>\n </div>\n <div class=\"timeline-content\">\n <p class=\"timeline-text\">List updated</p>\n <span class=\"timeline-date\">{{record.__mj_UpdatedAt | date:'medium'}}</span>\n </div>\n </div>\n <div class=\"timeline-item\">\n <div class=\"timeline-icon create\">\n <i class=\"fa-solid fa-plus\"></i>\n </div>\n <div class=\"timeline-content\">\n <p class=\"timeline-text\">List created</p>\n <span class=\"timeline-date\">{{record.__mj_CreatedAt | date:'medium'}}</span>\n </div>\n </div>\n </div>\n <div class=\"activity-info\">\n <p>Detailed activity tracking coming soon. You'll be able to see who added items, when shares were created, and more.</p>\n </div>\n </section>\n }\n\n <!-- Settings Section -->\n @if (activeSection === 'settings') {\n <section class=\"section settings-section\">\n <div class=\"section-header\">\n <h2>Settings</h2>\n </div>\n <div class=\"settings-form\">\n <mj-collapsible-panel\n SectionKey=\"listSettings\"\n SectionName=\"List Settings\"\n Icon=\"fa fa-cog\"\n [Form]=\"this\"\n [FormContext]=\"formContext\">\n <div class=\"form-body\">\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"Name\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"Description\"\n Type=\"textarea\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"CategoryID\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n LinkType=\"Record\"\n LinkComponentType=\"Search\">\n </mj-form-field>\n </div>\n </mj-collapsible-panel>\n <mj-collapsible-panel\n SectionKey=\"systemInfo\"\n SectionName=\"System Information\"\n Icon=\"fa fa-info-circle\"\n [Form]=\"this\"\n [FormContext]=\"formContext\">\n <div class=\"form-body\">\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"EntityID\"\n Type=\"textbox\"\n [EditMode]=\"false\"\n [FormContext]=\"formContext\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"UserID\"\n Type=\"textbox\"\n [EditMode]=\"false\"\n [FormContext]=\"formContext\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"__mj_CreatedAt\"\n Type=\"textbox\"\n [EditMode]=\"false\"\n [FormContext]=\"formContext\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"__mj_UpdatedAt\"\n Type=\"textbox\"\n [EditMode]=\"false\"\n [FormContext]=\"formContext\">\n </mj-form-field>\n </div>\n </mj-collapsible-panel>\n </div>\n </section>\n }\n </main>\n</div>\n\n<!-- Add Records Dialog -->\n@if (showAddRecordsDialog) {\n <mj-dialog\n [Title]=\"'Add ' + entityDisplayName + ' to List'\"\n (Close)=\"closeAddRecordsDialog()\"\n [Visible]=\"showAddRecordsDialog\"\n [MinWidth]=\"400\"\n [Width]=\"600\"\n [Height]=\"550\">\n <div class=\"dialog-content add-records-dialog\">\n @if (addDialogSaving) {\n <div class=\"dialog-loading\">\n <mj-loading [text]=\"'Adding ' + addTotal + ' records to list...'\" size=\"small\"></mj-loading>\n </div>\n }\n @if (!addDialogSaving) {\n <!-- Search Input -->\n <div class=\"search-section\">\n <div class=\"search-input-wrapper\">\n <span class=\"fa-solid fa-search search-icon\"></span>\n <input\n type=\"text\"\n class=\"mj-input search-input\"\n [placeholder]=\"'Search ' + entityDisplayName + '...'\"\n [(ngModel)]=\"addRecordsSearchFilter\"\n (ngModelChange)=\"onAddRecordsSearchChange($event)\" />\n </div>\n <span class=\"search-hint\">Type at least 2 characters to search</span>\n </div>\n <!-- Records List -->\n <div class=\"records-list\">\n @if (addDialogLoading) {\n <div class=\"list-loading\">\n <mj-loading [showText]=\"false\" size=\"small\"></mj-loading>\n </div>\n }\n @if (!addDialogLoading && addableRecords.length === 0 && addRecordsSearchFilter.length >= 2) {\n <div class=\"empty-results\">\n <span class=\"fa-solid fa-search empty-icon\"></span>\n <p>No records found matching \"{{ addRecordsSearchFilter }}\"</p>\n </div>\n }\n @if (!addDialogLoading && addableRecords.length === 0 && addRecordsSearchFilter.length < 2) {\n <div class=\"empty-results\">\n <span class=\"fa-solid fa-list empty-icon\"></span>\n <p>Search for records to add to this list</p>\n </div>\n }\n @if (!addDialogLoading && addableRecords.length > 0) {\n <!-- Selection controls -->\n <div class=\"selection-controls\">\n <button mjButton variant=\"flat\" (click)=\"selectAllAddable()\">Select All</button>\n <button mjButton variant=\"flat\" (click)=\"deselectAllAddable()\">Deselect All</button>\n <span class=\"selection-info\">{{ selectedAddableRecords.length }} selected</span>\n </div>\n <!-- Records -->\n <div class=\"records-scroll\">\n @for (record of addableRecords; track record) {\n <div class=\"record-item\"\n [class.in-list]=\"record.isInList\"\n [class.selected]=\"record.isSelected\"\n (click)=\"toggleRecordSelection(record)\">\n <div class=\"record-checkbox\">\n @if (record.isInList) {\n <span class=\"fa-solid fa-check in-list-icon\" title=\"Already in list\"></span>\n }\n @if (!record.isInList) {\n <input type=\"checkbox\"\n [checked]=\"record.isSelected\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleRecordSelection(record)\">\n }\n </div>\n <div class=\"record-name\">{{ record.Name }}</div>\n @if (record.isInList) {\n <span class=\"in-list-badge\">In List</span>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n <mj-dialog-actions>\n <button mjButton\n (click)=\"confirmAddRecords()\"\n [disabled]=\"addDialogSaving || selectedAddableRecords.length === 0\"\n variant=\"primary\">\n Add {{ selectedAddableRecords.length > 0 ? selectedAddableRecords.length : '' }} Record{{ selectedAddableRecords.length !== 1 ? 's' : '' }}\n </button>\n <button mjButton\n (click)=\"closeAddRecordsDialog()\"\n [disabled]=\"addDialogSaving\">\n Cancel\n </button>\n </mj-dialog-actions>\n </mj-dialog>\n}\n\n<!-- Add From View Dialog -->\n@if (showAddFromViewDialog) {\n <mj-dialog\n Title=\"Add Records from Views\"\n (Close)=\"closeAddFromViewDialog()\"\n [Visible]=\"showAddFromViewDialog\"\n [MinWidth]=\"400\"\n [Width]=\"600\"\n [Height]=\"500\">\n <div class=\"dialog-content\">\n @if (showAddFromViewLoader && fetchingRecordsToSave) {\n <div class=\"dialog-loading\">\n <mj-loading text=\"Loading records from views...\" size=\"small\"></mj-loading>\n </div>\n }\n @if (showAddFromViewLoader && addFromViewTotal > 0 && !fetchingRecordsToSave) {\n <div class=\"dialog-loading\">\n <mj-loading [text]=\"'Adding ' + addFromViewTotal + ' records to list...'\" size=\"small\"></mj-loading>\n </div>\n }\n @if (showAddFromViewLoader && !fetchingRecordsToSave && addFromViewTotal === 0) {\n <div class=\"dialog-loading\">\n <mj-loading text=\"Loading views...\" size=\"small\"></mj-loading>\n </div>\n }\n @if (!showAddFromViewLoader) {\n <p class=\"dialog-instruction\">Select views to add their records to this list:</p>\n <div class=\"views-list\">\n @if (!userViews || userViews.length === 0) {\n <div class=\"empty-results\">\n <span class=\"fa-solid fa-folder-open empty-icon\"></span>\n <p>No saved views found for this entity</p>\n </div>\n }\n @if (userViews && userViews.length > 0) {\n @for (view of userViews; track view) {\n <div class=\"view-item\"\n [class.selected]=\"isViewSelected(view)\"\n (click)=\"toggleViewSelection(view)\">\n <input type=\"checkbox\"\n [checked]=\"isViewSelected(view)\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleViewSelection(view)\">\n <span class=\"fa-solid fa-table-list view-icon\"></span>\n <span class=\"view-name\">{{ view.Name }}</span>\n </div>\n }\n }\n </div>\n }\n </div>\n <mj-dialog-actions>\n <button mjButton\n (click)=\"confirmAddFromView()\"\n [disabled]=\"showAddFromViewLoader || userViewsToAdd.length === 0\"\n variant=\"primary\">\n Add from {{ userViewsToAdd.length }} View{{ userViewsToAdd.length !== 1 ? 's' : '' }}\n </button>\n <button mjButton\n (click)=\"closeAddFromViewDialog()\"\n [disabled]=\"showAddFromViewLoader\">\n Cancel\n </button>\n </mj-dialog-actions>\n </mj-dialog>\n}\n\n<!-- Share Dialog -->\n@if (showShareDialog && shareDialogConfig) {\n <mj-list-share-dialog\n [config]=\"shareDialogConfig\"\n [visible]=\"showShareDialog\"\n (complete)=\"onShareDialogComplete($event)\"\n (cancel)=\"onShareDialogCancel()\">\n </mj-list-share-dialog>\n}\n"]}
1
+ {"version":3,"file":"list-form.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/Lists/list-form.component.ts","../../../../src/lib/custom/Lists/list-form.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectionStrategy, inject } from '@angular/core';\nimport { Subject, debounceTime } from 'rxjs';\nimport { RegisterClass, UUIDsEqual, NormalizeUUID } from '@memberjunction/global';\nimport { BaseFormComponent } from '@memberjunction/ng-base-forms';\nimport { SharedService } from '@memberjunction/ng-shared';\nimport { MJListFormComponent } from '../../generated/Entities/MJList/mjlist.form.component';\nimport { MJListEntity, MJListDetailEntity, MJListDetailEntityExtended, MJListCategoryEntity, MJUserViewEntityExtended } from '@memberjunction/core-entities';\nimport { Metadata, RunView, RunViewResult, EntityInfo, LogError, LogStatus } from '@memberjunction/core';\nimport { ListShareDialogConfig, ListShareDialogResult } from '@memberjunction/ng-list-management';\n\nexport type ListSection = 'overview' | 'items' | 'sharing' | 'activity' | 'settings';\n\nexport interface ListItemViewModel {\n detail: MJListDetailEntity;\n recordName: string;\n isLoading: boolean;\n}\n\nexport interface ListStats {\n itemCount: number;\n shareCount: number;\n invitationCount: number;\n lastUpdated: Date | null;\n}\n\n/**\n * Represents a record that can be added to a list\n */\nexport interface AddableRecord {\n ID: string;\n Name: string;\n isInList: boolean;\n isSelected: boolean;\n}\n\n/**\n * World-class List form component that provides a rich exploration experience\n * for managing lists in the MemberJunction system.\n *\n * Features:\n * - Overview with visual stats and entity context\n * - Items grid with inline record navigation\n * - Sharing management (coming soon)\n * - Activity history\n * - Settings and configuration\n */\n@RegisterClass(BaseFormComponent, 'MJ: Lists')\n@Component({\n standalone: false,\n selector: 'mj-list-form-extended',\n templateUrl: './list-form.component.html',\n styleUrls: ['./list-form.component.css', '../../../shared/form-styles.css'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MJListFormComponentExtended extends MJListFormComponent implements OnInit, OnDestroy {\n private sharedService = inject(SharedService);\n\n public override record!: MJListEntity;\n\n // Navigation\n public activeSection: ListSection = 'overview';\n public navItems = [\n { id: 'overview' as ListSection, icon: 'fa-solid fa-house', label: 'Overview' },\n { id: 'items' as ListSection, icon: 'fa-solid fa-list', label: 'Items', badge: 0 },\n { id: 'sharing' as ListSection, icon: 'fa-solid fa-share-nodes', label: 'Sharing', badge: 0, disabled: false },\n { id: 'activity' as ListSection, icon: 'fa-solid fa-clock-rotate-left', label: 'Activity' },\n { id: 'settings' as ListSection, icon: 'fa-solid fa-gear', label: 'Settings' }\n ];\n\n // Data\n public listItems: ListItemViewModel[] = [];\n public categories: MJListCategoryEntity[] = [];\n public entityInfo: EntityInfo | null = null;\n public stats: ListStats = {\n itemCount: 0,\n shareCount: 0,\n invitationCount: 0,\n lastUpdated: null\n };\n\n // Loading states\n public isLoadingItems = false;\n public isLoadingStats = false;\n public explorerError: string | null = null;\n\n // Items section\n public itemSearchTerm = '';\n public selectedItems = new Set<string>();\n public isSelectAllChecked = false;\n\n // Edit state\n public isEditingName = false;\n public isEditingDescription = false;\n public editingName = '';\n public editingDescription = '';\n\n // Add Records dialog\n public showAddRecordsDialog = false;\n public addDialogLoading = false;\n public addDialogSaving = false;\n public addableRecords: AddableRecord[] = [];\n public addRecordsSearchFilter = '';\n public existingListDetailIds = new Set<string>();\n public addProgress = 0;\n public addTotal = 0;\n private searchSubject = new Subject<string>();\n\n // Add From View dialog\n public showAddFromViewDialog = false;\n public showAddFromViewLoader = false;\n public userViews: MJUserViewEntityExtended[] | null = null;\n public userViewsToAdd: MJUserViewEntityExtended[] = [];\n public addFromViewProgress = 0;\n public addFromViewTotal = 0;\n public fetchingRecordsToSave = false;\n\n // Share dialog\n public showShareDialog = false;\n public shareDialogConfig: ListShareDialogConfig | null = null;\n\n private destroy$ = new Subject<void>();\n private get metadata() { return this.ProviderToUse; }\n override async ngOnInit(): Promise<void> {\n await super.ngOnInit();\n\n // Set up search debounce\n this.searchSubject\n .pipe(debounceTime(300))\n .subscribe((searchText) => this.searchRecords(searchText));\n\n await this.loadExplorerData();\n }\n\n // Helper to show notifications using SharedService's deprecated method\n private showNotification(message: string, style: 'success' | 'error' | 'info' = 'info', duration: number = 3000): void {\n this.sharedService.CreateSimpleNotification(message, style, duration);\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private async loadExplorerData(): Promise<void> {\n try {\n // Load entity info for context\n if (this.record?.EntityID) {\n this.entityInfo = this.metadata.Entities.find(e => UUIDsEqual(e.ID, this.record.EntityID)) || null;\n }\n\n // Load categories for dropdown\n await this.loadCategories();\n\n // Load items and stats in parallel\n await Promise.all([\n this.loadItems(),\n this.loadStats()\n ]);\n\n this.updateNavBadges();\n } catch (error) {\n console.error('Error loading list data:', error);\n this.explorerError = 'Failed to load list data';\n } finally {\n this.cdr.markForCheck();\n }\n }\n\n private async loadCategories(): Promise<void> {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView<MJListCategoryEntity>({\n EntityName: 'MJ: List Categories',\n OrderBy: 'Name',\n ResultType: 'entity_object'\n });\n if (result.Success) {\n this.categories = result.Results;\n }\n }\n\n private async loadItems(): Promise<void> {\n if (!this.record?.IsSaved) return;\n\n this.isLoadingItems = true;\n this.cdr.markForCheck();\n\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView<MJListDetailEntity>({\n EntityName: 'MJ: List Details',\n ExtraFilter: `ListID = '${this.record.ID}'`,\n OrderBy: '__mj_CreatedAt DESC',\n ResultType: 'entity_object'\n });\n\n if (result.Success) {\n this.listItems = result.Results.map(detail => ({\n detail,\n recordName: detail.RecordID || 'Loading...',\n isLoading: true\n }));\n\n // Load record names asynchronously\n this.loadRecordNames();\n }\n } catch (error) {\n console.error('Error loading list items:', error);\n } finally {\n this.isLoadingItems = false;\n this.cdr.markForCheck();\n }\n }\n\n private async loadRecordNames(): Promise<void> {\n if (!this.entityInfo) return;\n\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n // Get the name field - NameField is EntityFieldInfo or undefined\n const nameFieldInfo = this.entityInfo.NameField;\n const nameFieldName = nameFieldInfo ? nameFieldInfo.Name : 'ID';\n\n for (const item of this.listItems) {\n try {\n const result = await rv.RunView({\n EntityName: this.entityInfo.Name,\n ExtraFilter: `ID = '${item.detail.RecordID}'`,\n Fields: [nameFieldName],\n ResultType: 'simple',\n MaxRows: 1\n });\n\n if (result.Success && result.Results.length > 0) {\n const record = result.Results[0] as Record<string, string>;\n item.recordName = record[nameFieldName] || item.detail.RecordID || '';\n }\n } catch (error) {\n item.recordName = item.detail.RecordID || 'Unknown';\n } finally {\n item.isLoading = false;\n }\n }\n this.cdr.markForCheck();\n }\n\n private async loadStats(): Promise<void> {\n if (!this.record?.IsSaved) return;\n\n this.isLoadingStats = true;\n\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const [itemsResult, sharesResult, invitationsResult] = await rv.RunViews([\n {\n EntityName: 'MJ: List Details',\n ExtraFilter: `ListID = '${this.record.ID}'`,\n ResultType: 'count_only'\n },\n {\n EntityName: 'MJ: List Shares',\n ExtraFilter: `ListID = '${this.record.ID}'`,\n ResultType: 'count_only'\n },\n {\n EntityName: 'MJ: List Invitations',\n ExtraFilter: `ListID = '${this.record.ID}'`,\n ResultType: 'count_only'\n }\n ]);\n\n this.stats = {\n itemCount: itemsResult.Success ? itemsResult.TotalRowCount : 0,\n shareCount: sharesResult.Success ? sharesResult.TotalRowCount : 0,\n invitationCount: invitationsResult.Success ? invitationsResult.TotalRowCount : 0,\n lastUpdated: this.record.__mj_UpdatedAt\n };\n } catch (error) {\n console.error('Error loading stats:', error);\n } finally {\n this.isLoadingStats = false;\n this.cdr.markForCheck();\n }\n }\n\n private updateNavBadges(): void {\n this.navItems = this.navItems.map(item => {\n switch (item.id) {\n case 'items':\n return { ...item, badge: this.stats.itemCount };\n case 'sharing':\n return { ...item, badge: this.stats.shareCount + this.stats.invitationCount };\n default:\n return item;\n }\n });\n }\n\n // === Navigation ===\n\n public setActiveSection(section: ListSection): void {\n const navItem = this.navItems.find(n => n.id === section);\n if (navItem?.disabled) return;\n\n this.activeSection = section;\n this.cdr.markForCheck();\n }\n\n // === Items Management ===\n\n public get filteredItems(): ListItemViewModel[] {\n if (!this.itemSearchTerm) return this.listItems;\n\n const term = this.itemSearchTerm.toLowerCase();\n return this.listItems.filter(item =>\n item.recordName.toLowerCase().includes(term) ||\n item.detail.RecordID?.toLowerCase().includes(term)\n );\n }\n\n public toggleItemSelection(item: ListItemViewModel): void {\n const id = item.detail.ID;\n if (this.selectedItems.has(id)) {\n this.selectedItems.delete(id);\n } else {\n this.selectedItems.add(id);\n }\n this.updateSelectAllState();\n this.cdr.markForCheck();\n }\n\n public toggleSelectAll(): void {\n if (this.isSelectAllChecked) {\n this.selectedItems.clear();\n } else {\n for (const item of this.filteredItems) {\n this.selectedItems.add(item.detail.ID);\n }\n }\n this.isSelectAllChecked = !this.isSelectAllChecked;\n this.cdr.markForCheck();\n }\n\n private updateSelectAllState(): void {\n this.isSelectAllChecked = this.filteredItems.length > 0 &&\n this.filteredItems.every(item => this.selectedItems.has(item.detail.ID));\n }\n\n public async removeSelectedItems(): Promise<void> {\n if (this.selectedItems.size === 0) return;\n\n const count = this.selectedItems.size;\n const confirmMessage = `Remove ${count} item${count > 1 ? 's' : ''} from this list?`;\n\n if (!confirm(confirmMessage)) return;\n\n try {\n for (const id of this.selectedItems) {\n const item = this.listItems.find(i => UUIDsEqual(i.detail.ID, id));\n if (item) {\n await item.detail.Delete();\n }\n }\n\n this.showNotification(\n `Removed ${count} item${count > 1 ? 's' : ''} from list`,\n 'success',\n 3000\n );\n\n this.selectedItems.clear();\n await this.loadItems();\n await this.loadStats();\n this.updateNavBadges();\n } catch (error) {\n console.error('Error removing items:', error);\n this.showNotification(\n 'Error removing items from list',\n 'error',\n 4000\n );\n }\n }\n\n public openRecord(item: ListItemViewModel): void {\n if (!this.entityInfo || !item.detail.RecordID) return;\n\n // Use SharedService to open the record\n this.sharedService.InvokeManualResize();\n }\n\n // === Inline Editing ===\n\n public startEditingName(): void {\n this.editingName = this.record.Name;\n this.isEditingName = true;\n this.cdr.markForCheck();\n }\n\n public async saveNameEdit(): Promise<void> {\n if (!this.editingName.trim()) {\n this.cancelNameEdit();\n return;\n }\n\n this.record.Name = this.editingName.trim();\n const saved = await this.record.Save();\n\n if (saved) {\n this.showNotification('Name updated', 'success', 2000);\n } else {\n this.showNotification('Failed to update name', 'error', 3000);\n }\n\n this.isEditingName = false;\n this.cdr.markForCheck();\n }\n\n public cancelNameEdit(): void {\n this.isEditingName = false;\n this.cdr.markForCheck();\n }\n\n public startEditingDescription(): void {\n this.editingDescription = this.record.Description || '';\n this.isEditingDescription = true;\n this.cdr.markForCheck();\n }\n\n public async saveDescriptionEdit(): Promise<void> {\n this.record.Description = this.editingDescription.trim() || null;\n const saved = await this.record.Save();\n\n if (saved) {\n this.showNotification('Description updated', 'success', 2000);\n } else {\n this.showNotification('Failed to update description', 'error', 3000);\n }\n\n this.isEditingDescription = false;\n this.cdr.markForCheck();\n }\n\n public cancelDescriptionEdit(): void {\n this.isEditingDescription = false;\n this.cdr.markForCheck();\n }\n\n // === Helpers ===\n\n public get entityDisplayName(): string {\n return this.entityInfo?.DisplayName || this.entityInfo?.Name || this.record?.Entity || 'Unknown';\n }\n\n public get entityIcon(): string {\n return this.entityInfo?.Icon || 'fa-solid fa-table';\n }\n\n public get categoryName(): string {\n if (!this.record?.CategoryID) return 'Uncategorized';\n const category = this.categories.find(c => UUIDsEqual(c.ID, this.record.CategoryID));\n return category?.Name || 'Unknown';\n }\n\n public get formattedItemCount(): string {\n return this.stats.itemCount.toLocaleString();\n }\n\n public get formattedLastUpdated(): string {\n if (!this.stats.lastUpdated) return 'Never';\n const date = new Date(this.stats.lastUpdated);\n const now = new Date();\n const diffMs = now.getTime() - date.getTime();\n const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24));\n\n if (diffDays === 0) return 'Today';\n if (diffDays === 1) return 'Yesterday';\n if (diffDays < 7) return `${diffDays} days ago`;\n return date.toLocaleDateString();\n }\n\n public getOwnerName(): string {\n return this.record?.User || 'Unknown';\n }\n\n public isCurrentUserOwner(): boolean {\n return UUIDsEqual(this.record?.UserID, this.metadata.CurrentUser?.ID);\n }\n\n public async onCategoryChange(categoryId: string | null): Promise<void> {\n this.record.CategoryID = categoryId;\n const saved = await this.record.Save();\n\n if (saved) {\n this.showNotification('Category updated', 'success', 2000);\n } else {\n this.showNotification('Failed to update category', 'error', 3000);\n }\n\n this.cdr.markForCheck();\n }\n\n public async refreshItems(): Promise<void> {\n await this.loadItems();\n await this.loadStats();\n this.updateNavBadges();\n }\n\n // ==========================================\n // Add Records Dialog\n // ==========================================\n\n public async openAddRecordsDialog(): Promise<void> {\n this.showAddRecordsDialog = true;\n this.addableRecords = [];\n this.addRecordsSearchFilter = '';\n this.addDialogLoading = true;\n this.addDialogSaving = false;\n\n // Load existing list detail IDs to mark which records are already in the list\n await this.loadExistingListDetailIds();\n this.addDialogLoading = false;\n this.cdr.markForCheck();\n }\n\n public closeAddRecordsDialog(): void {\n this.showAddRecordsDialog = false;\n this.addableRecords = [];\n this.addRecordsSearchFilter = '';\n this.existingListDetailIds.clear();\n this.addDialogSaving = false;\n this.addProgress = 0;\n this.addTotal = 0;\n this.cdr.markForCheck();\n }\n\n private async loadExistingListDetailIds(): Promise<void> {\n if (!this.record) return;\n\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView<{ RecordID: string }>({\n EntityName: 'MJ: List Details',\n ExtraFilter: `ListID = '${this.record.ID}'`,\n Fields: ['RecordID'],\n ResultType: 'simple'\n }, this.metadata.CurrentUser);\n\n if (result.Success) {\n this.existingListDetailIds = new Set(result.Results.map(r => NormalizeUUID(r.RecordID)));\n }\n }\n\n public onAddRecordsSearchChange(value: string): void {\n this.addRecordsSearchFilter = value;\n this.searchSubject.next(value);\n }\n\n private async searchRecords(searchText: string): Promise<void> {\n if (!this.record || !searchText || searchText.length < 2) {\n this.addableRecords = [];\n this.cdr.markForCheck();\n return;\n }\n\n this.addDialogLoading = true;\n this.cdr.markForCheck();\n\n const sourceEntityInfo = this.metadata.EntityByID(this.record.EntityID);\n if (!sourceEntityInfo) {\n this.addDialogLoading = false;\n this.cdr.markForCheck();\n return;\n }\n\n const nameField = sourceEntityInfo.Fields.find(field => field.IsNameField);\n const pkField = sourceEntityInfo.FirstPrimaryKey?.Name || 'ID';\n\n let filter: string | undefined;\n if (nameField) {\n filter = `${nameField.Name} LIKE '%${searchText}%'`;\n }\n\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result: RunViewResult = await rv.RunView({\n EntityName: this.record.Entity,\n ExtraFilter: filter,\n MaxRows: 100,\n ResultType: 'simple'\n });\n\n if (result.Success) {\n this.addableRecords = result.Results.map((record: Record<string, unknown>) => {\n const recordId = String(record[pkField]);\n return {\n ID: recordId,\n Name: nameField ? String(record[nameField.Name]) : recordId,\n isInList: this.existingListDetailIds.has(NormalizeUUID(recordId)),\n isSelected: false\n };\n });\n }\n\n this.addDialogLoading = false;\n this.cdr.markForCheck();\n }\n\n public toggleRecordSelection(record: AddableRecord): void {\n if (record.isInList) return; // Can't select records already in list\n record.isSelected = !record.isSelected;\n this.cdr.markForCheck();\n }\n\n public get selectedAddableRecords(): AddableRecord[] {\n return this.addableRecords.filter(r => r.isSelected);\n }\n\n public selectAllAddable(): void {\n this.addableRecords.forEach(r => {\n if (!r.isInList) r.isSelected = true;\n });\n this.cdr.markForCheck();\n }\n\n public deselectAllAddable(): void {\n this.addableRecords.forEach(r => r.isSelected = false);\n this.cdr.markForCheck();\n }\n\n public async confirmAddRecords(): Promise<void> {\n const recordsToAdd = this.selectedAddableRecords;\n if (recordsToAdd.length === 0 || !this.record) return;\n\n this.addDialogSaving = true;\n this.addTotal = recordsToAdd.length;\n this.addProgress = 0;\n this.cdr.markForCheck();\n\n // Use transaction group for bulk insert\n const tg = await this.metadata.CreateTransactionGroup();\n\n for (const record of recordsToAdd) {\n const listDetail = await this.metadata.GetEntityObject<MJListDetailEntityExtended>('MJ: List Details');\n listDetail.ListID = this.record.ID;\n listDetail.RecordID = record.ID;\n listDetail.TransactionGroup = tg;\n await listDetail.Save();\n }\n\n const success = await tg.Submit();\n\n if (success) {\n this.addProgress = this.addTotal;\n this.showNotification(\n `Added ${recordsToAdd.length} record${recordsToAdd.length !== 1 ? 's' : ''} to list`,\n 'success',\n 2500\n );\n this.closeAddRecordsDialog();\n await this.refreshItems();\n } else {\n LogError('Error adding records to list');\n this.showNotification('Failed to add some records', 'error', 2500);\n this.addDialogSaving = false;\n this.cdr.markForCheck();\n }\n }\n\n // ==========================================\n // Add From View Dialog\n // ==========================================\n\n public async openAddFromViewDialog(): Promise<void> {\n this.showAddFromViewDialog = true;\n this.userViewsToAdd = [];\n this.cdr.markForCheck();\n\n if (!this.userViews) {\n await this.loadEntityViews();\n }\n }\n\n public closeAddFromViewDialog(): void {\n this.showAddFromViewDialog = false;\n this.userViewsToAdd = [];\n this.showAddFromViewLoader = false;\n this.addFromViewProgress = 0;\n this.addFromViewTotal = 0;\n this.cdr.markForCheck();\n }\n\n private async loadEntityViews(): Promise<void> {\n if (!this.record || !this.record.Entity) return;\n\n this.showAddFromViewLoader = true;\n this.cdr.markForCheck();\n\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const runViewResult = await rv.RunView<MJUserViewEntityExtended>({\n EntityName: 'MJ: User Views',\n ExtraFilter: `UserID = '${this.metadata.CurrentUser.ID}' AND EntityID = '${this.record.EntityID}'`,\n ResultType: 'entity_object'\n }, this.metadata.CurrentUser);\n\n if (!runViewResult.Success) {\n LogError(`Error loading User Views for entity ${this.record.Entity}`);\n } else {\n this.userViews = runViewResult.Results;\n }\n\n this.showAddFromViewLoader = false;\n this.cdr.markForCheck();\n }\n\n public toggleViewSelection(view: MJUserViewEntityExtended): void {\n const index = this.userViewsToAdd.findIndex(v => UUIDsEqual(v.ID, view.ID));\n if (index >= 0) {\n this.userViewsToAdd.splice(index, 1);\n } else {\n this.userViewsToAdd.push(view);\n }\n this.cdr.markForCheck();\n }\n\n public isViewSelected(view: MJUserViewEntityExtended): boolean {\n return this.userViewsToAdd.some(v => UUIDsEqual(v.ID, view.ID));\n }\n\n public async confirmAddFromView(): Promise<void> {\n if (!this.record || this.userViewsToAdd.length === 0) return;\n\n this.showAddFromViewLoader = true;\n this.fetchingRecordsToSave = true;\n this.cdr.markForCheck();\n\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n\n // Collect all unique record IDs from selected views\n const recordIdSet = new Set<string>();\n\n for (const userView of this.userViewsToAdd) {\n const runViewResult = await rv.RunView({\n ViewID: userView.ID,\n ViewEntity: userView,\n Fields: ['ID']\n }, this.metadata.CurrentUser);\n\n if (runViewResult.Success) {\n const records = runViewResult.Results as Array<Record<string, string>>;\n records.forEach(r => recordIdSet.add(NormalizeUUID(r.ID)));\n }\n }\n\n // Filter out records already in the list\n await this.loadExistingListDetailIds();\n const recordsToAdd = [...recordIdSet].filter(id => !this.existingListDetailIds.has(id));\n\n this.addFromViewTotal = recordsToAdd.length;\n this.addFromViewProgress = 0;\n this.fetchingRecordsToSave = false;\n this.cdr.markForCheck();\n\n if (recordsToAdd.length === 0) {\n this.showNotification('All records already in list', 'info', 2500);\n this.showAddFromViewLoader = false;\n this.cdr.markForCheck();\n return;\n }\n\n LogStatus(`Adding ${recordsToAdd.length} records to list`);\n\n // Use transaction group for bulk insert\n const tg = await this.metadata.CreateTransactionGroup();\n\n for (const recordID of recordsToAdd) {\n const listDetail = await this.metadata.GetEntityObject<MJListDetailEntityExtended>('MJ: List Details');\n listDetail.ListID = this.record.ID;\n listDetail.RecordID = recordID;\n listDetail.TransactionGroup = tg;\n await listDetail.Save();\n }\n\n const success = await tg.Submit();\n\n if (success) {\n this.addFromViewProgress = this.addFromViewTotal;\n this.showNotification(\n `Added ${recordsToAdd.length} record${recordsToAdd.length !== 1 ? 's' : ''} to list`,\n 'success',\n 2500\n );\n this.closeAddFromViewDialog();\n await this.refreshItems();\n } else {\n LogError('Error adding records from view to list');\n this.showNotification('Failed to add some records', 'error', 2500);\n this.showAddFromViewLoader = false;\n this.cdr.markForCheck();\n }\n }\n\n // ==========================================\n // Share Dialog\n // ==========================================\n\n public openShareDialog(): void {\n if (!this.record?.IsSaved) return;\n\n this.shareDialogConfig = {\n listId: this.record.ID,\n listName: this.record.Name,\n currentUserId: this.metadata.CurrentUser.ID,\n isOwner: this.isCurrentUserOwner()\n };\n this.showShareDialog = true;\n this.cdr.markForCheck();\n }\n\n public onShareDialogComplete(result: ListShareDialogResult): void {\n this.showShareDialog = false;\n this.shareDialogConfig = null;\n\n if (result.action === 'apply') {\n // Refresh stats to update share counts\n this.loadStats().then(() => {\n this.updateNavBadges();\n this.cdr.markForCheck();\n });\n }\n this.cdr.markForCheck();\n }\n\n public onShareDialogCancel(): void {\n this.showShareDialog = false;\n this.shareDialogConfig = null;\n this.cdr.markForCheck();\n }\n}\n","<!-- World-Class List Form -->\n<div class=\"list-form-explorer\">\n <!-- Header -->\n <header class=\"list-header\">\n <div class=\"header-content\">\n <div class=\"header-icon\" [style.background-color]=\"'var(--mj-brand-primary)'\">\n <i [class]=\"entityIcon\"></i>\n </div>\n <div class=\"header-info\">\n <div class=\"name-row\">\n @if (!isEditingName) {\n <h1 class=\"list-name\">{{record.Name || 'Untitled List'}}</h1>\n @if (isCurrentUserOwner()) {\n <button\n class=\"edit-btn\"\n (click)=\"startEditingName()\"\n title=\"Edit name\"\n >\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n }\n }\n @if (isEditingName) {\n <input\n type=\"text\"\n class=\"inline-edit-input name-input\"\n [(ngModel)]=\"editingName\"\n (keydown.enter)=\"saveNameEdit()\"\n (keydown.escape)=\"cancelNameEdit()\"\n #nameInput />\n <button class=\"save-btn\" (click)=\"saveNameEdit()\">\n <i class=\"fa-solid fa-check\"></i>\n </button>\n <button class=\"cancel-btn\" (click)=\"cancelNameEdit()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n }\n </div>\n <div class=\"entity-badge\">\n <i [class]=\"entityIcon\"></i>\n <span>{{entityDisplayName}}</span>\n </div>\n </div>\n </div>\n <div class=\"header-stats\">\n <div class=\"stat-item\">\n <span class=\"stat-value\">{{formattedItemCount}}</span>\n <span class=\"stat-label\">Items</span>\n </div>\n <div class=\"stat-item\">\n <span class=\"stat-value\">{{stats.shareCount}}</span>\n <span class=\"stat-label\">Shares</span>\n </div>\n <div class=\"stat-item\">\n <span class=\"stat-value\">{{formattedLastUpdated}}</span>\n <span class=\"stat-label\">Updated</span>\n </div>\n </div>\n </header>\n\n <!-- Navigation Rail -->\n <nav class=\"nav-rail\">\n @for (nav of navItems; track nav) {\n <button\n class=\"nav-item\"\n [class.active]=\"activeSection === nav.id\"\n [class.disabled]=\"nav.disabled\"\n (click)=\"setActiveSection(nav.id)\"\n [title]=\"nav.label\">\n <i [class]=\"nav.icon\"></i>\n <span class=\"nav-label\">{{nav.label}}</span>\n @if (nav.badge && nav.badge > 0) {\n <span class=\"nav-badge\">{{nav.badge}}</span>\n }\n </button>\n }\n </nav>\n\n <!-- Main Content -->\n <main class=\"main-content\">\n <!-- Overview Section -->\n @if (activeSection === 'overview') {\n <section class=\"section overview-section\">\n <div class=\"overview-grid\">\n <!-- Description Card -->\n <div class=\"overview-card description-card\">\n <div class=\"card-header\">\n <h3><i class=\"fa-solid fa-align-left\"></i> Description</h3>\n @if (isCurrentUserOwner() && !isEditingDescription) {\n <button\n class=\"edit-btn\"\n (click)=\"startEditingDescription()\"\n >\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n }\n </div>\n <div class=\"card-body\">\n @if (!isEditingDescription) {\n @if (record.Description) {\n <p class=\"description-text\">{{record.Description}}</p>\n }\n @if (!record.Description) {\n <p class=\"description-empty\">No description provided</p>\n }\n }\n @if (isEditingDescription) {\n <textarea\n class=\"inline-edit-input description-input\"\n [(ngModel)]=\"editingDescription\"\n placeholder=\"Add a description...\"\n rows=\"3\"\n (keydown.escape)=\"cancelDescriptionEdit()\"></textarea>\n <div class=\"edit-actions\">\n <button class=\"btn-primary\" (click)=\"saveDescriptionEdit()\">Save</button>\n <button class=\"btn-secondary\" (click)=\"cancelDescriptionEdit()\">Cancel</button>\n </div>\n }\n </div>\n </div>\n <!-- Details Card -->\n <div class=\"overview-card details-card\">\n <div class=\"card-header\">\n <h3><i class=\"fa-solid fa-info-circle\"></i> Details</h3>\n </div>\n <div class=\"card-body\">\n <div class=\"detail-row\">\n <span class=\"detail-label\">Entity</span>\n <span class=\"detail-value\">\n <i [class]=\"entityIcon\" class=\"detail-icon\"></i>\n {{entityDisplayName}}\n </span>\n </div>\n <div class=\"detail-row\">\n <span class=\"detail-label\">Category</span>\n @if (!isCurrentUserOwner()) {\n <span class=\"detail-value\">\n <i class=\"fa-solid fa-folder detail-icon\"></i>\n {{categoryName}}\n </span>\n }\n @if (isCurrentUserOwner()) {\n <select\n class=\"category-select\"\n [ngModel]=\"record.CategoryID\"\n (ngModelChange)=\"onCategoryChange($event)\">\n <option [ngValue]=\"null\">Uncategorized</option>\n @for (cat of categories; track cat) {\n <option [ngValue]=\"cat.ID\">{{cat.Name}}</option>\n }\n </select>\n }\n </div>\n <div class=\"detail-row\">\n <span class=\"detail-label\">Owner</span>\n <span class=\"detail-value\">\n <i class=\"fa-solid fa-user detail-icon\"></i>\n {{getOwnerName()}}\n @if (isCurrentUserOwner()) {\n <span class=\"owner-badge\">You</span>\n }\n </span>\n </div>\n <div class=\"detail-row\">\n <span class=\"detail-label\">Created</span>\n <span class=\"detail-value\">\n <i class=\"fa-solid fa-calendar detail-icon\"></i>\n {{record.__mj_CreatedAt | date:'mediumDate'}}\n </span>\n </div>\n </div>\n </div>\n <!-- Quick Actions Card -->\n <div class=\"overview-card actions-card\">\n <div class=\"card-header\">\n <h3><i class=\"fa-solid fa-bolt\"></i> Quick Actions</h3>\n </div>\n <div class=\"card-body\">\n <button class=\"action-btn\" (click)=\"setActiveSection('items')\">\n <i class=\"fa-solid fa-list\"></i>\n <span>View Items</span>\n <span class=\"action-count\">{{stats.itemCount}}</span>\n </button>\n @if (isCurrentUserOwner()) {\n <button class=\"action-btn\" (click)=\"openShareDialog()\">\n <i class=\"fa-solid fa-share-nodes\"></i>\n <span>Share List</span>\n @if (stats.shareCount > 0) {\n <span class=\"action-count\">{{stats.shareCount}}</span>\n }\n </button>\n }\n @if (!isCurrentUserOwner()) {\n <button class=\"action-btn\" (click)=\"setActiveSection('sharing')\">\n <i class=\"fa-solid fa-share-nodes\"></i>\n <span>View Sharing</span>\n </button>\n }\n <button class=\"action-btn\" [disabled]=\"true\" title=\"Coming soon\">\n <i class=\"fa-solid fa-file-export\"></i>\n <span>Export Data</span>\n <span class=\"coming-soon\">Soon</span>\n </button>\n </div>\n </div>\n </div>\n </section>\n }\n\n <!-- Items Section -->\n @if (activeSection === 'items') {\n <section class=\"section items-section\">\n <div class=\"section-header\">\n <h2>List Items</h2>\n <div class=\"section-actions\">\n <div class=\"search-box\">\n <i class=\"fa-solid fa-search\"></i>\n <input\n type=\"text\"\n placeholder=\"Search items...\"\n [(ngModel)]=\"itemSearchTerm\" />\n </div>\n @if (isCurrentUserOwner()) {\n <div class=\"add-buttons\">\n <button class=\"btn-secondary\" (click)=\"openAddRecordsDialog()\" title=\"Add individual records\">\n <i class=\"fa-solid fa-plus\"></i> Add Records\n </button>\n <button class=\"btn-secondary\" (click)=\"openAddFromViewDialog()\" title=\"Add records from a saved view\">\n <i class=\"fa-solid fa-table-list\"></i> Add From View\n </button>\n </div>\n }\n <button class=\"btn-icon\" (click)=\"refreshItems()\" title=\"Refresh\">\n <i class=\"fa-solid fa-refresh\"></i>\n </button>\n </div>\n </div>\n <!-- Loading State -->\n @if (isLoadingItems) {\n <div class=\"loading-state\">\n <mj-loading text=\"Loading items...\" size=\"medium\"></mj-loading>\n </div>\n }\n <!-- Empty State -->\n @if (!isLoadingItems && listItems.length === 0) {\n <div class=\"empty-state\">\n <div class=\"empty-icon\">\n <i class=\"fa-solid fa-inbox\"></i>\n </div>\n <h3>No Items Yet</h3>\n <p>This list doesn't have any items. Add records from the {{entityDisplayName}} entity.</p>\n </div>\n }\n <!-- Items Table -->\n @if (!isLoadingItems && listItems.length > 0) {\n <div class=\"items-table-container\">\n @if (selectedItems.size > 0) {\n <div class=\"items-toolbar\">\n <span class=\"selection-count\">{{selectedItems.size}} selected</span>\n <button class=\"btn-danger\" (click)=\"removeSelectedItems()\">\n <i class=\"fa-solid fa-trash\"></i>\n Remove from List\n </button>\n </div>\n }\n <table class=\"items-table\">\n <thead>\n <tr>\n <th class=\"col-checkbox\">\n <input\n type=\"checkbox\"\n [checked]=\"isSelectAllChecked\"\n (change)=\"toggleSelectAll()\" />\n </th>\n <th class=\"col-name\">Name</th>\n <th class=\"col-id\">Record ID</th>\n <th class=\"col-added\">Added</th>\n <th class=\"col-actions\"></th>\n </tr>\n </thead>\n <tbody>\n @for (item of filteredItems; track item) {\n <tr\n [class.selected]=\"selectedItems.has(item.detail.ID)\">\n <td class=\"col-checkbox\">\n <input\n type=\"checkbox\"\n [checked]=\"selectedItems.has(item.detail.ID)\"\n (change)=\"toggleItemSelection(item)\" />\n </td>\n <td class=\"col-name\">\n <div class=\"item-name\" [class.loading]=\"item.isLoading\">\n <i [class]=\"entityIcon\" class=\"item-icon\"></i>\n <span>{{item.recordName}}</span>\n @if (item.isLoading) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n }\n </div>\n </td>\n <td class=\"col-id\">\n <code class=\"record-id\">{{item.detail.RecordID}}</code>\n </td>\n <td class=\"col-added\">\n {{item.detail.__mj_CreatedAt | date:'shortDate'}}\n </td>\n <td class=\"col-actions\">\n <button\n class=\"btn-icon\"\n (click)=\"openRecord(item)\"\n title=\"Open record\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\"></i>\n </button>\n </td>\n </tr>\n }\n </tbody>\n </table>\n <div class=\"items-footer\">\n <span class=\"items-count\">\n Showing {{filteredItems.length}} of {{listItems.length}} items\n </span>\n </div>\n </div>\n }\n </section>\n }\n\n <!-- Sharing Section -->\n @if (activeSection === 'sharing') {\n <section class=\"section sharing-section\">\n <div class=\"section-header\">\n <h2>Sharing</h2>\n @if (isCurrentUserOwner()) {\n <div class=\"section-actions\">\n <button class=\"btn-primary\" (click)=\"openShareDialog()\">\n <i class=\"fa-solid fa-user-plus\"></i> Manage Sharing\n </button>\n </div>\n }\n </div>\n <!-- Sharing summary -->\n @if (stats.shareCount > 0 || stats.invitationCount > 0) {\n <div class=\"sharing-summary\">\n <div class=\"summary-card\">\n <div class=\"summary-icon\">\n <i class=\"fa-solid fa-users\"></i>\n </div>\n <div class=\"summary-content\">\n <span class=\"summary-value\">{{stats.shareCount}}</span>\n <span class=\"summary-label\">Active Share{{stats.shareCount !== 1 ? 's' : ''}}</span>\n </div>\n </div>\n @if (stats.invitationCount > 0) {\n <div class=\"summary-card\">\n <div class=\"summary-icon pending\">\n <i class=\"fa-solid fa-envelope\"></i>\n </div>\n <div class=\"summary-content\">\n <span class=\"summary-value\">{{stats.invitationCount}}</span>\n <span class=\"summary-label\">Pending Invitation{{stats.invitationCount !== 1 ? 's' : ''}}</span>\n </div>\n </div>\n }\n </div>\n }\n <!-- Empty state for no shares -->\n @if (stats.shareCount === 0 && stats.invitationCount === 0) {\n <div class=\"empty-state\">\n <div class=\"empty-icon\">\n <i class=\"fa-solid fa-share-nodes\"></i>\n </div>\n <h3>Not Shared Yet</h3>\n @if (isCurrentUserOwner()) {\n <p>This list is private. Click \"Manage Sharing\" to share it with other users or roles.</p>\n }\n @if (!isCurrentUserOwner()) {\n <p>This list hasn't been shared with anyone else.</p>\n }\n @if (isCurrentUserOwner()) {\n <button class=\"btn-primary\" (click)=\"openShareDialog()\">\n <i class=\"fa-solid fa-user-plus\"></i> Share This List\n </button>\n }\n </div>\n }\n <!-- Read-only notice for non-owners -->\n @if (!isCurrentUserOwner() && (stats.shareCount > 0 || stats.invitationCount > 0)) {\n <div class=\"readonly-notice\">\n <i class=\"fa-solid fa-info-circle\"></i>\n <span>Only the list owner can manage sharing settings.</span>\n </div>\n }\n </section>\n }\n\n <!-- Activity Section -->\n @if (activeSection === 'activity') {\n <section class=\"section activity-section\">\n <div class=\"section-header\">\n <h2>Activity</h2>\n </div>\n <div class=\"activity-timeline\">\n <div class=\"timeline-item\">\n <div class=\"timeline-icon\">\n <i class=\"fa-solid fa-edit\"></i>\n </div>\n <div class=\"timeline-content\">\n <p class=\"timeline-text\">List updated</p>\n <span class=\"timeline-date\">{{record.__mj_UpdatedAt | date:'medium'}}</span>\n </div>\n </div>\n <div class=\"timeline-item\">\n <div class=\"timeline-icon create\">\n <i class=\"fa-solid fa-plus\"></i>\n </div>\n <div class=\"timeline-content\">\n <p class=\"timeline-text\">List created</p>\n <span class=\"timeline-date\">{{record.__mj_CreatedAt | date:'medium'}}</span>\n </div>\n </div>\n </div>\n <div class=\"activity-info\">\n <p>Detailed activity tracking coming soon. You'll be able to see who added items, when shares were created, and more.</p>\n </div>\n </section>\n }\n\n <!-- Settings Section -->\n @if (activeSection === 'settings') {\n <section class=\"section settings-section\">\n <div class=\"section-header\">\n <h2>Settings</h2>\n </div>\n <div class=\"settings-form\">\n <mj-collapsible-panel\n SectionKey=\"listSettings\"\n SectionName=\"List Settings\"\n Icon=\"fa fa-cog\"\n [Form]=\"this\"\n [FormContext]=\"formContext\">\n <div class=\"form-body\">\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"Name\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"Description\"\n Type=\"textarea\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"CategoryID\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n LinkType=\"Record\"\n LinkComponentType=\"Search\">\n </mj-form-field>\n </div>\n </mj-collapsible-panel>\n <mj-collapsible-panel\n SectionKey=\"systemInfo\"\n SectionName=\"System Information\"\n Icon=\"fa fa-info-circle\"\n [Form]=\"this\"\n [FormContext]=\"formContext\">\n <div class=\"form-body\">\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"EntityID\"\n Type=\"textbox\"\n [EditMode]=\"false\"\n [FormContext]=\"formContext\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"UserID\"\n Type=\"textbox\"\n [EditMode]=\"false\"\n [FormContext]=\"formContext\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"__mj_CreatedAt\"\n Type=\"textbox\"\n [EditMode]=\"false\"\n [FormContext]=\"formContext\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"__mj_UpdatedAt\"\n Type=\"textbox\"\n [EditMode]=\"false\"\n [FormContext]=\"formContext\">\n </mj-form-field>\n </div>\n </mj-collapsible-panel>\n </div>\n </section>\n }\n </main>\n</div>\n\n<!-- Add Records Dialog -->\n@if (showAddRecordsDialog) {\n <mj-dialog\n [Title]=\"'Add ' + entityDisplayName + ' to List'\"\n (Close)=\"closeAddRecordsDialog()\"\n [Visible]=\"showAddRecordsDialog\"\n [MinWidth]=\"400\"\n [Width]=\"600\"\n [Height]=\"550\">\n <div class=\"dialog-content add-records-dialog\">\n @if (addDialogSaving) {\n <div class=\"dialog-loading\">\n <mj-loading [text]=\"'Adding ' + addTotal + ' records to list...'\" size=\"small\"></mj-loading>\n </div>\n }\n @if (!addDialogSaving) {\n <!-- Search Input -->\n <div class=\"search-section\">\n <div class=\"search-input-wrapper\">\n <span class=\"fa-solid fa-search search-icon\"></span>\n <input\n type=\"text\"\n class=\"mj-input search-input\"\n [placeholder]=\"'Search ' + entityDisplayName + '...'\"\n [(ngModel)]=\"addRecordsSearchFilter\"\n (ngModelChange)=\"onAddRecordsSearchChange($event)\" />\n </div>\n <span class=\"search-hint\">Type at least 2 characters to search</span>\n </div>\n <!-- Records List -->\n <div class=\"records-list\">\n @if (addDialogLoading) {\n <div class=\"list-loading\">\n <mj-loading [showText]=\"false\" size=\"small\"></mj-loading>\n </div>\n }\n @if (!addDialogLoading && addableRecords.length === 0 && addRecordsSearchFilter.length >= 2) {\n <div class=\"empty-results\">\n <span class=\"fa-solid fa-search empty-icon\"></span>\n <p>No records found matching \"{{ addRecordsSearchFilter }}\"</p>\n </div>\n }\n @if (!addDialogLoading && addableRecords.length === 0 && addRecordsSearchFilter.length < 2) {\n <div class=\"empty-results\">\n <span class=\"fa-solid fa-list empty-icon\"></span>\n <p>Search for records to add to this list</p>\n </div>\n }\n @if (!addDialogLoading && addableRecords.length > 0) {\n <!-- Selection controls -->\n <div class=\"selection-controls\">\n <button mjButton variant=\"flat\" (click)=\"selectAllAddable()\">Select All</button>\n <button mjButton variant=\"flat\" (click)=\"deselectAllAddable()\">Deselect All</button>\n <span class=\"selection-info\">{{ selectedAddableRecords.length }} selected</span>\n </div>\n <!-- Records -->\n <div class=\"records-scroll\">\n @for (record of addableRecords; track record) {\n <div class=\"record-item\"\n [class.in-list]=\"record.isInList\"\n [class.selected]=\"record.isSelected\"\n (click)=\"toggleRecordSelection(record)\">\n <div class=\"record-checkbox\">\n @if (record.isInList) {\n <span class=\"fa-solid fa-check in-list-icon\" title=\"Already in list\"></span>\n }\n @if (!record.isInList) {\n <input type=\"checkbox\"\n [checked]=\"record.isSelected\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleRecordSelection(record)\">\n }\n </div>\n <div class=\"record-name\">{{ record.Name }}</div>\n @if (record.isInList) {\n <span class=\"in-list-badge\">In List</span>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n <mj-dialog-actions>\n <button mjButton\n (click)=\"confirmAddRecords()\"\n [disabled]=\"addDialogSaving || selectedAddableRecords.length === 0\"\n variant=\"primary\">\n Add {{ selectedAddableRecords.length > 0 ? selectedAddableRecords.length : '' }} Record{{ selectedAddableRecords.length !== 1 ? 's' : '' }}\n </button>\n <button mjButton\n (click)=\"closeAddRecordsDialog()\"\n [disabled]=\"addDialogSaving\">\n Cancel\n </button>\n </mj-dialog-actions>\n </mj-dialog>\n}\n\n<!-- Add From View Dialog -->\n@if (showAddFromViewDialog) {\n <mj-dialog\n Title=\"Add Records from Views\"\n (Close)=\"closeAddFromViewDialog()\"\n [Visible]=\"showAddFromViewDialog\"\n [MinWidth]=\"400\"\n [Width]=\"600\"\n [Height]=\"500\">\n <div class=\"dialog-content\">\n @if (showAddFromViewLoader && fetchingRecordsToSave) {\n <div class=\"dialog-loading\">\n <mj-loading text=\"Loading records from views...\" size=\"small\"></mj-loading>\n </div>\n }\n @if (showAddFromViewLoader && addFromViewTotal > 0 && !fetchingRecordsToSave) {\n <div class=\"dialog-loading\">\n <mj-loading [text]=\"'Adding ' + addFromViewTotal + ' records to list...'\" size=\"small\"></mj-loading>\n </div>\n }\n @if (showAddFromViewLoader && !fetchingRecordsToSave && addFromViewTotal === 0) {\n <div class=\"dialog-loading\">\n <mj-loading text=\"Loading views...\" size=\"small\"></mj-loading>\n </div>\n }\n @if (!showAddFromViewLoader) {\n <p class=\"dialog-instruction\">Select views to add their records to this list:</p>\n <div class=\"views-list\">\n @if (!userViews || userViews.length === 0) {\n <div class=\"empty-results\">\n <span class=\"fa-solid fa-folder-open empty-icon\"></span>\n <p>No saved views found for this entity</p>\n </div>\n }\n @if (userViews && userViews.length > 0) {\n @for (view of userViews; track view) {\n <div class=\"view-item\"\n [class.selected]=\"isViewSelected(view)\"\n (click)=\"toggleViewSelection(view)\">\n <input type=\"checkbox\"\n [checked]=\"isViewSelected(view)\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"toggleViewSelection(view)\">\n <span class=\"fa-solid fa-table-list view-icon\"></span>\n <span class=\"view-name\">{{ view.Name }}</span>\n </div>\n }\n }\n </div>\n }\n </div>\n <mj-dialog-actions>\n <button mjButton\n (click)=\"confirmAddFromView()\"\n [disabled]=\"showAddFromViewLoader || userViewsToAdd.length === 0\"\n variant=\"primary\">\n Add from {{ userViewsToAdd.length }} View{{ userViewsToAdd.length !== 1 ? 's' : '' }}\n </button>\n <button mjButton\n (click)=\"closeAddFromViewDialog()\"\n [disabled]=\"showAddFromViewLoader\">\n Cancel\n </button>\n </mj-dialog-actions>\n </mj-dialog>\n}\n\n<!-- Share Dialog -->\n@if (showShareDialog && shareDialogConfig) {\n <mj-list-share-dialog\n [config]=\"shareDialogConfig\"\n [visible]=\"showShareDialog\"\n (complete)=\"onShareDialogComplete($event)\"\n (cancel)=\"onShareDialogCancel()\">\n </mj-list-share-dialog>\n}\n"]}