@memberjunction/ng-dashboards 5.22.0 → 5.23.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 (204) hide show
  1. package/README.md +51 -0
  2. package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
  3. package/dist/AI/components/agents/agent-configuration.component.js +364 -362
  4. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  5. package/dist/AI/components/agents/agent-editor.component.js +2 -2
  6. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts +275 -64
  7. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
  8. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +2645 -436
  9. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
  10. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +240 -6
  11. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
  12. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +2166 -256
  13. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
  14. package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
  15. package/dist/AI/components/execution-monitoring.component.js +191 -197
  16. package/dist/AI/components/execution-monitoring.component.js.map +1 -1
  17. package/dist/AI/components/models/model-management.component.js +9 -8
  18. package/dist/AI/components/models/model-management.component.js.map +1 -1
  19. package/dist/AI/components/prompts/prompt-management.component.js +305 -299
  20. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  21. package/dist/AI/components/system/system-configuration.component.js +319 -313
  22. package/dist/AI/components/system/system-configuration.component.js.map +1 -1
  23. package/dist/AI/components/vectors/vector-management-resource.component.d.ts +1 -2
  24. package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
  25. package/dist/AI/components/vectors/vector-management-resource.component.js +12 -27
  26. package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
  27. package/dist/APIKeys/api-applications-panel.component.js +10 -12
  28. package/dist/APIKeys/api-applications-panel.component.js.map +1 -1
  29. package/dist/APIKeys/api-key-create-dialog.component.js +13 -19
  30. package/dist/APIKeys/api-key-create-dialog.component.js.map +1 -1
  31. package/dist/APIKeys/api-key-edit-panel.component.js +12 -14
  32. package/dist/APIKeys/api-key-edit-panel.component.js.map +1 -1
  33. package/dist/APIKeys/api-scopes-panel.component.js +61 -68
  34. package/dist/APIKeys/api-scopes-panel.component.js.map +1 -1
  35. package/dist/APIKeys/api-usage-panel.component.js +10 -11
  36. package/dist/APIKeys/api-usage-panel.component.js.map +1 -1
  37. package/dist/Actions/components/actions-list-view.component.js +82 -96
  38. package/dist/Actions/components/actions-list-view.component.js.map +1 -1
  39. package/dist/Actions/components/actions-overview.component.js +130 -134
  40. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  41. package/dist/Actions/components/categories-list-view.component.d.ts.map +1 -1
  42. package/dist/Actions/components/categories-list-view.component.js +40 -46
  43. package/dist/Actions/components/categories-list-view.component.js.map +1 -1
  44. package/dist/Actions/components/code-management.component.js +2 -2
  45. package/dist/Actions/components/code-management.component.js.map +1 -1
  46. package/dist/Actions/components/entity-integration.component.js +2 -2
  47. package/dist/Actions/components/entity-integration.component.js.map +1 -1
  48. package/dist/Actions/components/execution-monitoring.component.js +127 -132
  49. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  50. package/dist/Actions/components/executions-list-view.component.js +2 -2
  51. package/dist/Actions/components/executions-list-view.component.js.map +1 -1
  52. package/dist/Actions/components/explorer/action-card.component.js +11 -17
  53. package/dist/Actions/components/explorer/action-card.component.js.map +1 -1
  54. package/dist/Actions/components/explorer/action-explorer.component.js +5 -11
  55. package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
  56. package/dist/Actions/components/explorer/action-list-item.component.js +8 -10
  57. package/dist/Actions/components/explorer/action-list-item.component.js.map +1 -1
  58. package/dist/Actions/components/explorer/action-toolbar.component.js +112 -133
  59. package/dist/Actions/components/explorer/action-toolbar.component.js.map +1 -1
  60. package/dist/Actions/components/explorer/action-tree-panel.component.js +63 -83
  61. package/dist/Actions/components/explorer/action-tree-panel.component.js.map +1 -1
  62. package/dist/Actions/components/explorer/new-action-panel.component.js +17 -21
  63. package/dist/Actions/components/explorer/new-action-panel.component.js.map +1 -1
  64. package/dist/Actions/components/explorer/new-category-panel.component.js +17 -21
  65. package/dist/Actions/components/explorer/new-category-panel.component.js.map +1 -1
  66. package/dist/Actions/components/scheduled-actions.component.js +2 -2
  67. package/dist/Actions/components/scheduled-actions.component.js.map +1 -1
  68. package/dist/Actions/components/security-permissions.component.js +2 -2
  69. package/dist/Actions/components/security-permissions.component.js.map +1 -1
  70. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts +13 -5
  71. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
  72. package/dist/ComponentStudio/component-studio-dashboard.component.js +168 -145
  73. package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
  74. package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts +4 -5
  75. package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts.map +1 -1
  76. package/dist/ComponentStudio/components/artifact-load-dialog.component.js +197 -200
  77. package/dist/ComponentStudio/components/artifact-load-dialog.component.js.map +1 -1
  78. package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts +5 -7
  79. package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
  80. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +142 -148
  81. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
  82. package/dist/ComponentStudio/components/browser/component-browser.component.js +153 -166
  83. package/dist/ComponentStudio/components/browser/component-browser.component.js.map +1 -1
  84. package/dist/ComponentStudio/components/editors/code-editor-panel.component.js +15 -20
  85. package/dist/ComponentStudio/components/editors/code-editor-panel.component.js.map +1 -1
  86. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js +16 -21
  87. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js.map +1 -1
  88. package/dist/ComponentStudio/components/editors/requirements-editor.component.js +18 -23
  89. package/dist/ComponentStudio/components/editors/requirements-editor.component.js.map +1 -1
  90. package/dist/ComponentStudio/components/editors/spec-editor.component.js +25 -30
  91. package/dist/ComponentStudio/components/editors/spec-editor.component.js.map +1 -1
  92. package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.js +10 -11
  93. package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.js.map +1 -1
  94. package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.d.ts.map +1 -1
  95. package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js +24 -35
  96. package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js.map +1 -1
  97. package/dist/ComponentStudio/components/text-import-dialog.component.js +15 -17
  98. package/dist/ComponentStudio/components/text-import-dialog.component.js.map +1 -1
  99. package/dist/Credentials/components/credentials-categories-resource.component.js +7 -6
  100. package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
  101. package/dist/Credentials/components/credentials-list-resource.component.js +6 -5
  102. package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
  103. package/dist/Credentials/components/credentials-types-resource.component.js +7 -6
  104. package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
  105. package/dist/DashboardBrowser/dashboard-share-dialog.component.js +9 -9
  106. package/dist/DashboardBrowser/dashboard-share-dialog.component.js.map +1 -1
  107. package/dist/Home/home-dashboard.component.js +4 -4
  108. package/dist/Home/home-dashboard.component.js.map +1 -1
  109. package/dist/Integration/components/connections/connections.component.js +4 -4
  110. package/dist/Integration/components/connections/connections.component.js.map +1 -1
  111. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +246 -259
  112. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
  113. package/dist/Integration/components/widgets/integration-card.component.js +7 -9
  114. package/dist/Integration/components/widgets/integration-card.component.js.map +1 -1
  115. package/dist/Integration/integration.module.d.ts +6 -10
  116. package/dist/Integration/integration.module.d.ts.map +1 -1
  117. package/dist/Integration/integration.module.js +12 -20
  118. package/dist/Integration/integration.module.js.map +1 -1
  119. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts +106 -0
  120. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts.map +1 -0
  121. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +607 -0
  122. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -0
  123. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts +7 -2
  124. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts.map +1 -1
  125. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +59 -31
  126. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
  127. package/dist/KnowledgeHub/index.d.ts +1 -0
  128. package/dist/KnowledgeHub/index.d.ts.map +1 -1
  129. package/dist/KnowledgeHub/index.js +1 -0
  130. package/dist/KnowledgeHub/index.js.map +1 -1
  131. package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
  132. package/dist/Lists/components/lists-browse-resource.component.js +9 -7
  133. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  134. package/dist/Lists/components/lists-my-lists-resource.component.js +5 -4
  135. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  136. package/dist/Lists/components/lists-operations-resource.component.js +10 -9
  137. package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
  138. package/dist/MCP/components/mcp-connection-dialog.component.js +141 -132
  139. package/dist/MCP/components/mcp-connection-dialog.component.js.map +1 -1
  140. package/dist/MCP/components/mcp-log-detail-panel.component.js +4 -4
  141. package/dist/MCP/components/mcp-log-detail-panel.component.js.map +1 -1
  142. package/dist/MCP/components/mcp-server-dialog.component.js +141 -128
  143. package/dist/MCP/components/mcp-server-dialog.component.js.map +1 -1
  144. package/dist/MCP/components/mcp-test-tool-dialog.component.js +210 -218
  145. package/dist/MCP/components/mcp-test-tool-dialog.component.js.map +1 -1
  146. package/dist/MCP/mcp-dashboard.component.js +2 -2
  147. package/dist/MCP/mcp-dashboard.component.js.map +1 -1
  148. package/dist/MCP/mcp.module.d.ts +6 -9
  149. package/dist/MCP/mcp.module.d.ts.map +1 -1
  150. package/dist/MCP/mcp.module.js +20 -22
  151. package/dist/MCP/mcp.module.js.map +1 -1
  152. package/dist/Scheduling/components/scheduling-activity.component.js +5 -4
  153. package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -1
  154. package/dist/Scheduling/components/scheduling-jobs.component.js +6 -5
  155. package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
  156. package/dist/Scheduling/components/scheduling-overview.component.js +93 -92
  157. package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
  158. package/dist/Testing/testing-dashboard.component.js +9 -10
  159. package/dist/Testing/testing-dashboard.component.js.map +1 -1
  160. package/dist/actions-dashboards.module.d.ts +8 -13
  161. package/dist/actions-dashboards.module.d.ts.map +1 -1
  162. package/dist/actions-dashboards.module.js +6 -27
  163. package/dist/actions-dashboards.module.js.map +1 -1
  164. package/dist/ai-dashboards.module.d.ts +16 -20
  165. package/dist/ai-dashboards.module.d.ts.map +1 -1
  166. package/dist/ai-dashboards.module.js +23 -44
  167. package/dist/ai-dashboards.module.js.map +1 -1
  168. package/dist/communication-dashboards.module.d.ts +4 -8
  169. package/dist/communication-dashboards.module.d.ts.map +1 -1
  170. package/dist/communication-dashboards.module.js +0 -19
  171. package/dist/communication-dashboards.module.js.map +1 -1
  172. package/dist/component-studio-dashboards.module.d.ts +7 -11
  173. package/dist/component-studio-dashboards.module.d.ts.map +1 -1
  174. package/dist/component-studio-dashboards.module.js +22 -34
  175. package/dist/component-studio-dashboards.module.js.map +1 -1
  176. package/dist/core-dashboards.module.d.ts +12 -18
  177. package/dist/core-dashboards.module.d.ts.map +1 -1
  178. package/dist/core-dashboards.module.js +15 -31
  179. package/dist/core-dashboards.module.js.map +1 -1
  180. package/dist/credentials-dashboards.module.d.ts +5 -8
  181. package/dist/credentials-dashboards.module.d.ts.map +1 -1
  182. package/dist/credentials-dashboards.module.js +3 -19
  183. package/dist/credentials-dashboards.module.js.map +1 -1
  184. package/dist/data-explorer-dashboards.module.d.ts +7 -13
  185. package/dist/data-explorer-dashboards.module.d.ts.map +1 -1
  186. package/dist/data-explorer-dashboards.module.js +0 -27
  187. package/dist/data-explorer-dashboards.module.js.map +1 -1
  188. package/dist/lists-dashboards.module.d.ts +5 -8
  189. package/dist/lists-dashboards.module.d.ts.map +1 -1
  190. package/dist/lists-dashboards.module.js +3 -19
  191. package/dist/lists-dashboards.module.js.map +1 -1
  192. package/dist/public-api.d.ts +1 -0
  193. package/dist/public-api.d.ts.map +1 -1
  194. package/dist/public-api.js +1 -0
  195. package/dist/public-api.js.map +1 -1
  196. package/dist/scheduling-dashboards.module.d.ts +6 -10
  197. package/dist/scheduling-dashboards.module.d.ts.map +1 -1
  198. package/dist/scheduling-dashboards.module.js +3 -23
  199. package/dist/scheduling-dashboards.module.js.map +1 -1
  200. package/dist/testing-dashboards.module.d.ts +7 -13
  201. package/dist/testing-dashboards.module.d.ts.map +1 -1
  202. package/dist/testing-dashboards.module.js +0 -27
  203. package/dist/testing-dashboards.module.js.map +1 -1
  204. package/package.json +47 -55
@@ -1 +1 @@
1
- {"version":3,"file":"credentials-list-resource.component.js","sourceRoot":"","sources":["../../../src/Credentials/components/credentials-list-resource.component.ts","../../../src/Credentials/components/credentials-list-resource.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectorRef, ChangeDetectionStrategy, ViewChild } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { ResourceData, MJCredentialEntity, MJCredentialTypeEntity } from '@memberjunction/core-entities';\nimport { RegisterClass , UUIDsEqual } from '@memberjunction/global';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { RunView, Metadata } from '@memberjunction/core';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { CredentialEditPanelComponent } from '@memberjunction/ng-credentials';\ntype ViewMode = 'grid' | 'list';\ntype StatusFilter = '' | 'active' | 'inactive' | 'expired' | 'expiring';\n\n@RegisterClass(BaseResourceComponent, 'CredentialsListResource')\n@Component({\n standalone: false,\n selector: 'mj-credentials-list-resource',\n templateUrl: './credentials-list-resource.component.html',\n styleUrls: ['./credentials-list-resource.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class CredentialsListResourceComponent extends BaseResourceComponent implements OnInit, OnDestroy {\n public isLoading = true;\n public credentials: MJCredentialEntity[] = [];\n public filteredCredentials: MJCredentialEntity[] = [];\n public types: MJCredentialTypeEntity[] = [];\n\n // View state\n public viewMode: ViewMode = 'grid';\n public searchText = '';\n public selectedTypeFilter = '';\n public selectedStatusFilter: StatusFilter = '';\n public showActiveOnly = false;\n\n // Selection for bulk operations\n public selectedCredentials = new Set<string>();\n private _isAllSelected = false;\n\n // Permissions\n private _metadata = new Metadata();\n private _permissionCache = new Map<string, boolean>();\n\n private destroy$ = new Subject<void>();\n\n @ViewChild('editPanel') editPanel!: CredentialEditPanelComponent;\n\n constructor(\n private cdr: ChangeDetectorRef\n ) {\n super();\n }\n\n ngOnInit(): void {\n this.loadData();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return 'Credentials';\n }\n\n async GetResourceIconClass(data: ResourceData): Promise<string> {\n return 'fa-solid fa-key';\n }\n\n // === Permission Checks ===\n public get UserCanCreate(): boolean {\n return this.checkEntityPermission('MJ: Credentials', 'Create');\n }\n\n public get UserCanUpdate(): boolean {\n return this.checkEntityPermission('MJ: Credentials', 'Update');\n }\n\n public get UserCanDelete(): boolean {\n return this.checkEntityPermission('MJ: Credentials', 'Delete');\n }\n\n private checkEntityPermission(entityName: string, permissionType: 'Create' | 'Read' | 'Update' | 'Delete'): boolean {\n const cacheKey = `${entityName}_${permissionType}`;\n\n if (this._permissionCache.has(cacheKey)) {\n return this._permissionCache.get(cacheKey)!;\n }\n\n try {\n const entityInfo = this._metadata.Entities.find(e => e.Name === entityName);\n if (!entityInfo) {\n this._permissionCache.set(cacheKey, false);\n return false;\n }\n\n const userPermissions = entityInfo.GetUserPermisions(this._metadata.CurrentUser);\n let hasPermission = false;\n\n switch (permissionType) {\n case 'Create': hasPermission = userPermissions.CanCreate; break;\n case 'Read': hasPermission = userPermissions.CanRead; break;\n case 'Update': hasPermission = userPermissions.CanUpdate; break;\n case 'Delete': hasPermission = userPermissions.CanDelete; break;\n }\n\n this._permissionCache.set(cacheKey, hasPermission);\n return hasPermission;\n } catch (error) {\n this._permissionCache.set(cacheKey, false);\n return false;\n }\n }\n\n private async loadData(): Promise<void> {\n try {\n this.isLoading = true;\n this.cdr.markForCheck();\n\n const rv = new RunView();\n\n const [credResult, typeResult] = await rv.RunViews([\n {\n EntityName: 'MJ: Credentials',\n OrderBy: '__mj_UpdatedAt DESC',\n ResultType: 'entity_object'\n },\n {\n EntityName: 'MJ: Credential Types',\n OrderBy: 'Category, Name',\n ResultType: 'entity_object'\n }\n ]);\n\n if (credResult.Success) {\n this.credentials = credResult.Results as MJCredentialEntity[];\n }\n\n if (typeResult.Success) {\n this.types = typeResult.Results as MJCredentialTypeEntity[];\n }\n\n this.applyFilters();\n\n } catch (error) {\n console.error('Error loading credentials:', error);\n MJNotificationService.Instance.CreateSimpleNotification('Error loading credentials', 'error', 3000);\n } finally {\n this.isLoading = false;\n this.NotifyLoadComplete();\n this.cdr.markForCheck();\n\n // Handle navigation params from Data.Configuration (passed via NavigationService)\n this.handleNavigationConfig();\n }\n }\n\n // === Navigation Handling ===\n\n private handleNavigationConfig(): void {\n const config = this.Data?.Configuration;\n if (!config) {\n return;\n }\n\n // Apply filters from navigation config\n if (config.typeId) {\n this.selectedTypeFilter = config.typeId as string;\n this.applyFilters();\n }\n\n if (config.openCreatePanel) {\n // Open create panel (optionally with type/category pre-selected)\n setTimeout(() => {\n if (config.categoryId) {\n this.createNewCredentialWithType(config.typeId as string, config.categoryId as string);\n } else if (config.typeId) {\n this.createNewCredentialWithType(config.typeId as string);\n } else {\n this.createNewCredential();\n }\n }, 100);\n }\n }\n\n // === CRUD Operations ===\n\n public createNewCredential(): void {\n if (this.editPanel) {\n this.editPanel.open(null);\n }\n }\n\n public createNewCredentialWithType(typeId?: string, categoryId?: string): void {\n if (this.editPanel) {\n this.editPanel.open(null, typeId, categoryId);\n }\n }\n\n public editCredential(credential: MJCredentialEntity, event?: Event): void {\n if (event) {\n event.stopPropagation();\n }\n if (this.editPanel) {\n this.editPanel.open(credential);\n }\n }\n\n public onCredentialSaved(credential: MJCredentialEntity): void {\n // Check if it's a new credential or update\n const existingIndex = this.credentials.findIndex(c => UUIDsEqual(c.ID, credential.ID));\n if (existingIndex >= 0) {\n // Update existing\n this.credentials[existingIndex] = credential;\n } else {\n // Add new\n this.credentials.unshift(credential);\n }\n this.applyFilters();\n this.cdr.markForCheck();\n }\n\n public onCredentialDeleted(credentialId: string): void {\n this.credentials = this.credentials.filter(c => !UUIDsEqual(c.ID, credentialId));\n this.selectedCredentials.delete(credentialId);\n this.applyFilters();\n this.cdr.markForCheck();\n }\n\n public async deleteCredential(credential: MJCredentialEntity, event?: Event): Promise<void> {\n if (event) {\n event.stopPropagation();\n }\n\n if (!this.UserCanDelete) {\n MJNotificationService.Instance.CreateSimpleNotification('You do not have permission to delete credentials', 'warning', 3000);\n return;\n }\n\n const confirmed = confirm(`Are you sure you want to delete \"${credential.Name}\"? This action cannot be undone.`);\n if (!confirmed) return;\n\n try {\n const success = await credential.Delete();\n if (success) {\n MJNotificationService.Instance.CreateSimpleNotification(`Credential \"${credential.Name}\" deleted successfully`, 'success', 3000);\n this.credentials = this.credentials.filter(c => !UUIDsEqual(c.ID, credential.ID));\n this.selectedCredentials.delete(credential.ID);\n this.applyFilters();\n } else {\n MJNotificationService.Instance.CreateSimpleNotification('Failed to delete credential', 'error', 3000);\n }\n } catch (error) {\n console.error('Error deleting credential:', error);\n MJNotificationService.Instance.CreateSimpleNotification('Error deleting credential', 'error', 3000);\n }\n }\n\n public async toggleCredentialActive(credential: MJCredentialEntity, event?: Event): Promise<void> {\n if (event) {\n event.stopPropagation();\n }\n\n if (!this.UserCanUpdate) {\n MJNotificationService.Instance.CreateSimpleNotification('You do not have permission to update credentials', 'warning', 3000);\n return;\n }\n\n try {\n credential.IsActive = !credential.IsActive;\n const success = await credential.Save();\n\n if (success) {\n const status = credential.IsActive ? 'activated' : 'deactivated';\n MJNotificationService.Instance.CreateSimpleNotification(`Credential \"${credential.Name}\" ${status}`, 'success', 2000);\n this.applyFilters();\n } else {\n // Revert on failure\n credential.IsActive = !credential.IsActive;\n MJNotificationService.Instance.CreateSimpleNotification('Failed to update credential', 'error', 3000);\n }\n } catch (error) {\n console.error('Error updating credential:', error);\n credential.IsActive = !credential.IsActive;\n MJNotificationService.Instance.CreateSimpleNotification('Error updating credential', 'error', 3000);\n }\n this.cdr.markForCheck();\n }\n\n // === Selection ===\n\n public toggleSelection(credential: MJCredentialEntity, event?: Event): void {\n if (event) {\n event.stopPropagation();\n }\n if (this.selectedCredentials.has(credential.ID)) {\n this.selectedCredentials.delete(credential.ID);\n } else {\n this.selectedCredentials.add(credential.ID);\n }\n this.updateAllSelectedState();\n this.cdr.markForCheck();\n }\n\n public toggleSelectAll(): void {\n if (this._isAllSelected) {\n this.selectedCredentials.clear();\n } else {\n this.filteredCredentials.forEach(c => this.selectedCredentials.add(c.ID));\n }\n this._isAllSelected = !this._isAllSelected;\n this.cdr.markForCheck();\n }\n\n public isAllSelected(): boolean {\n return this._isAllSelected;\n }\n\n public isSelected(credential: MJCredentialEntity): boolean {\n return this.selectedCredentials.has(credential.ID);\n }\n\n public clearSelection(): void {\n this.selectedCredentials.clear();\n this._isAllSelected = false;\n this.cdr.markForCheck();\n }\n\n private updateAllSelectedState(): void {\n this._isAllSelected = this.filteredCredentials.length > 0 &&\n this.filteredCredentials.every(c => this.selectedCredentials.has(c.ID));\n }\n\n public async deleteSelected(): Promise<void> {\n if (!this.UserCanDelete || this.selectedCredentials.size === 0) return;\n\n const count = this.selectedCredentials.size;\n const confirmed = confirm(`Are you sure you want to delete ${count} credential(s)? This action cannot be undone.`);\n if (!confirmed) return;\n\n let successCount = 0;\n let failCount = 0;\n\n for (const credId of this.selectedCredentials) {\n const credential = this.credentials.find(c => UUIDsEqual(c.ID, credId));\n if (credential) {\n try {\n const success = await credential.Delete();\n if (success) {\n successCount++;\n this.credentials = this.credentials.filter(c => !UUIDsEqual(c.ID, credId));\n } else {\n failCount++;\n }\n } catch {\n failCount++;\n }\n }\n }\n\n this.selectedCredentials.clear();\n this.applyFilters();\n\n if (successCount > 0) {\n MJNotificationService.Instance.CreateSimpleNotification(\n `${successCount} credential(s) deleted${failCount > 0 ? `, ${failCount} failed` : ''}`,\n failCount > 0 ? 'warning' : 'success',\n 3000\n );\n } else {\n MJNotificationService.Instance.CreateSimpleNotification('Failed to delete credentials', 'error', 3000);\n }\n }\n\n // === Filtering ===\n\n public onSearchChange(value: string): void {\n this.searchText = value;\n this.applyFilters();\n }\n\n public onTypeFilterChange(typeId: string): void {\n this.selectedTypeFilter = typeId;\n this.applyFilters();\n }\n\n public onStatusFilterChange(status: StatusFilter): void {\n this.selectedStatusFilter = status;\n this.applyFilters();\n }\n\n public onActiveFilterChange(showActive: boolean): void {\n this.showActiveOnly = showActive;\n this.applyFilters();\n }\n\n public clearFilters(): void {\n this.searchText = '';\n this.selectedTypeFilter = '';\n this.selectedStatusFilter = '';\n this.showActiveOnly = false;\n this.applyFilters();\n }\n\n public get hasActiveFilters(): boolean {\n return this.searchText !== '' ||\n this.selectedTypeFilter !== '' ||\n this.selectedStatusFilter !== '' ||\n this.showActiveOnly;\n }\n\n private applyFilters(): void {\n let filtered = [...this.credentials];\n const now = new Date();\n const thirtyDaysFromNow = new Date();\n thirtyDaysFromNow.setDate(thirtyDaysFromNow.getDate() + 30);\n\n // Filter by active status\n if (this.showActiveOnly) {\n filtered = filtered.filter(c => c.IsActive);\n }\n\n // Filter by status\n if (this.selectedStatusFilter) {\n filtered = filtered.filter(c => {\n const statusClass = this.getStatusClass(c);\n switch (this.selectedStatusFilter) {\n case 'active': return statusClass === 'active';\n case 'inactive': return statusClass === 'inactive';\n case 'expired': return statusClass === 'expired';\n case 'expiring': return statusClass === 'expiring';\n default: return true;\n }\n });\n }\n\n // Filter by type\n if (this.selectedTypeFilter) {\n filtered = filtered.filter(c => UUIDsEqual(c.CredentialTypeID, this.selectedTypeFilter));\n }\n\n // Filter by search text\n if (this.searchText.trim()) {\n const search = this.searchText.toLowerCase().trim();\n filtered = filtered.filter(c =>\n c.Name.toLowerCase().includes(search) ||\n (c.Description && c.Description.toLowerCase().includes(search)) ||\n (c.CredentialType && c.CredentialType.toLowerCase().includes(search))\n );\n }\n\n this.filteredCredentials = filtered;\n this.updateAllSelectedState();\n this.cdr.markForCheck();\n }\n\n // === View Mode ===\n\n public setViewMode(mode: ViewMode): void {\n this.viewMode = mode;\n this.cdr.markForCheck();\n }\n\n // === Helpers ===\n\n public getTypeById(typeId: string): MJCredentialTypeEntity | undefined {\n return this.types.find(t => UUIDsEqual(t.ID, typeId));\n }\n\n public getTypesByCategory(): Map<string, MJCredentialTypeEntity[]> {\n const grouped = new Map<string, MJCredentialTypeEntity[]>();\n for (const type of this.types) {\n const category = type.Category;\n if (!grouped.has(category)) {\n grouped.set(category, []);\n }\n grouped.get(category)!.push(type);\n }\n return grouped;\n }\n\n public getStatusClass(credential: MJCredentialEntity): string {\n if (!credential.IsActive) {\n return 'inactive';\n }\n if (credential.ExpiresAt) {\n const expiresAt = new Date(credential.ExpiresAt);\n const now = new Date();\n const thirtyDays = 30 * 24 * 60 * 60 * 1000;\n if (expiresAt < now) {\n return 'expired';\n }\n if (expiresAt.getTime() - now.getTime() < thirtyDays) {\n return 'expiring';\n }\n }\n return 'active';\n }\n\n public getStatusLabel(credential: MJCredentialEntity): string {\n const statusClass = this.getStatusClass(credential);\n const labels: Record<string, string> = {\n 'active': 'Active',\n 'inactive': 'Inactive',\n 'expired': 'Expired',\n 'expiring': 'Expiring Soon'\n };\n return labels[statusClass] || 'Unknown';\n }\n\n public getStatusIcon(credential: MJCredentialEntity): string {\n const statusClass = this.getStatusClass(credential);\n const icons: Record<string, string> = {\n 'active': 'fa-solid fa-check-circle',\n 'inactive': 'fa-solid fa-minus-circle',\n 'expired': 'fa-solid fa-times-circle',\n 'expiring': 'fa-solid fa-clock'\n };\n return icons[statusClass] || 'fa-solid fa-circle';\n }\n\n public formatDate(date: Date | null | undefined): string {\n if (!date) return 'Never';\n return new Date(date).toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric'\n });\n }\n\n public formatDateTime(date: Date | null | undefined): string {\n if (!date) return 'Never';\n return new Date(date).toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n hour: '2-digit',\n minute: '2-digit'\n });\n }\n\n public getTimeAgo(date: Date | null | undefined): string {\n if (!date) return 'Never';\n const now = new Date();\n const then = new Date(date);\n const diffMs = now.getTime() - then.getTime();\n const diffMins = Math.floor(diffMs / 60000);\n const diffHours = Math.floor(diffMs / 3600000);\n const diffDays = Math.floor(diffMs / 86400000);\n\n if (diffMins < 1) return 'Just now';\n if (diffMins < 60) return `${diffMins}m ago`;\n if (diffHours < 24) return `${diffHours}h ago`;\n if (diffDays < 30) return `${diffDays}d ago`;\n return this.formatDate(date);\n }\n\n public getTypeIcon(credential: MJCredentialEntity): string {\n const type = this.getTypeById(credential.CredentialTypeID);\n if (!type) return 'fa-solid fa-key';\n\n const iconMap: Record<string, string> = {\n 'AI': 'fa-solid fa-brain',\n 'Communication': 'fa-solid fa-envelope',\n 'Storage': 'fa-solid fa-cloud',\n 'Database': 'fa-solid fa-database',\n 'Authentication': 'fa-solid fa-shield-halved',\n 'Integration': 'fa-solid fa-plug'\n };\n return iconMap[type.Category] || 'fa-solid fa-key';\n }\n\n public refresh(): void {\n this.selectedCredentials.clear();\n this.loadData();\n }\n\n // === Stats ===\n\n public get activeCount(): number {\n return this.credentials.filter(c => c.IsActive).length;\n }\n\n public getActiveCount(): number {\n return this.activeCount;\n }\n\n public get expiringCount(): number {\n const now = new Date();\n const thirtyDaysFromNow = new Date();\n thirtyDaysFromNow.setDate(thirtyDaysFromNow.getDate() + 30);\n return this.credentials.filter(c =>\n c.ExpiresAt &&\n new Date(c.ExpiresAt) >= now &&\n new Date(c.ExpiresAt) <= thirtyDaysFromNow &&\n c.IsActive\n ).length;\n }\n\n public getExpiringSoonCount(): number {\n return this.expiringCount;\n }\n\n public get expiredCount(): number {\n const now = new Date();\n return this.credentials.filter(c =>\n c.ExpiresAt && new Date(c.ExpiresAt) < now\n ).length;\n }\n\n public getExpiredCount(): number {\n return this.expiredCount;\n }\n\n // === Status Helpers ===\n\n public isExpired(credential: MJCredentialEntity): boolean {\n if (!credential.ExpiresAt) return false;\n return new Date(credential.ExpiresAt) < new Date();\n }\n\n public isExpiringSoon(credential: MJCredentialEntity): boolean {\n if (!credential.ExpiresAt) return false;\n const expiresAt = new Date(credential.ExpiresAt);\n const now = new Date();\n const thirtyDaysFromNow = new Date();\n thirtyDaysFromNow.setDate(thirtyDaysFromNow.getDate() + 30);\n return expiresAt >= now && expiresAt <= thirtyDaysFromNow;\n }\n\n // === Bulk Operations ===\n\n public async bulkToggleActive(active: boolean): Promise<void> {\n if (!this.UserCanUpdate || this.selectedCredentials.size === 0) return;\n\n let successCount = 0;\n let failCount = 0;\n\n for (const credId of this.selectedCredentials) {\n const credential = this.credentials.find(c => UUIDsEqual(c.ID, credId));\n if (credential && credential.IsActive !== active) {\n try {\n credential.IsActive = active;\n const success = await credential.Save();\n if (success) {\n successCount++;\n } else {\n credential.IsActive = !active;\n failCount++;\n }\n } catch {\n credential.IsActive = !active;\n failCount++;\n }\n }\n }\n\n this.clearSelection();\n this.applyFilters();\n\n const action = active ? 'activated' : 'deactivated';\n if (successCount > 0) {\n MJNotificationService.Instance.CreateSimpleNotification(\n `${successCount} credential(s) ${action}${failCount > 0 ? `, ${failCount} failed` : ''}`,\n failCount > 0 ? 'warning' : 'success',\n 3000\n );\n } else if (failCount > 0) {\n MJNotificationService.Instance.CreateSimpleNotification(`Failed to ${action.slice(0, -1)} credentials`, 'error', 3000);\n }\n }\n\n public async bulkDelete(): Promise<void> {\n if (!this.UserCanDelete || this.selectedCredentials.size === 0) return;\n\n const count = this.selectedCredentials.size;\n const confirmed = confirm(`Are you sure you want to delete ${count} credential(s)? This action cannot be undone.`);\n if (!confirmed) return;\n\n let successCount = 0;\n let failCount = 0;\n\n for (const credId of this.selectedCredentials) {\n const credential = this.credentials.find(c => UUIDsEqual(c.ID, credId));\n if (credential) {\n try {\n const success = await credential.Delete();\n if (success) {\n successCount++;\n this.credentials = this.credentials.filter(c => !UUIDsEqual(c.ID, credId));\n } else {\n failCount++;\n }\n } catch {\n failCount++;\n }\n }\n }\n\n this.clearSelection();\n this.applyFilters();\n\n if (successCount > 0) {\n MJNotificationService.Instance.CreateSimpleNotification(\n `${successCount} credential(s) deleted${failCount > 0 ? `, ${failCount} failed` : ''}`,\n failCount > 0 ? 'warning' : 'success',\n 3000\n );\n } else {\n MJNotificationService.Instance.CreateSimpleNotification('Failed to delete credentials', 'error', 3000);\n }\n }\n}\n","<div class=\"list-container\">\n @if (isLoading) {\n <mj-loading text=\"Loading credentials...\"></mj-loading>\n }\n\n @if (!isLoading) {\n <!-- Header with Stats -->\n <div class=\"list-header\">\n <div class=\"header-info\">\n <h2 class=\"list-title\">Credentials</h2>\n <div class=\"header-stats\">\n <span class=\"stat-item\">\n <i class=\"fa-solid fa-key\"></i>\n {{credentials.length}} total\n </span>\n <span class=\"stat-item active\">\n <i class=\"fa-solid fa-check-circle\"></i>\n {{getActiveCount()}} active\n </span>\n @if (getExpiringSoonCount() > 0) {\n <span class=\"stat-item warning\">\n <i class=\"fa-solid fa-clock\"></i>\n {{getExpiringSoonCount()}} expiring\n </span>\n }\n @if (getExpiredCount() > 0) {\n <span class=\"stat-item danger\">\n <i class=\"fa-solid fa-exclamation-circle\"></i>\n {{getExpiredCount()}} expired\n </span>\n }\n </div>\n </div>\n <div class=\"header-actions\">\n @if (UserCanCreate) {\n <button class=\"btn-primary\" (click)=\"createNewCredential()\">\n <i class=\"fa-solid fa-plus\"></i>\n <span>New Credential</span>\n </button>\n }\n </div>\n </div>\n <!-- Toolbar -->\n <div class=\"toolbar\">\n <div class=\"toolbar-left\">\n <div class=\"search-container\">\n <i class=\"fa-solid fa-search\"></i>\n <input\n type=\"text\"\n placeholder=\"Search credentials...\"\n [value]=\"searchText\"\n (input)=\"onSearchChange($any($event.target).value)\"\n />\n @if (searchText) {\n <button class=\"search-clear\" (click)=\"onSearchChange('')\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n }\n </div>\n <select\n class=\"filter-select\"\n [value]=\"selectedTypeFilter\"\n (change)=\"onTypeFilterChange($any($event.target).value)\"\n >\n <option value=\"\">All Types</option>\n @for (type of types; track type) {\n <option [value]=\"type.ID\">{{type.Name}}</option>\n }\n </select>\n <select\n class=\"filter-select\"\n [value]=\"selectedStatusFilter\"\n (change)=\"onStatusFilterChange($any($event.target).value)\"\n >\n <option value=\"\">All Statuses</option>\n <option value=\"active\">Active</option>\n <option value=\"inactive\">Inactive</option>\n <option value=\"expiring\">Expiring Soon</option>\n <option value=\"expired\">Expired</option>\n </select>\n </div>\n <div class=\"toolbar-right\">\n <div class=\"results-info\">\n {{filteredCredentials.length}} of {{credentials.length}}\n </div>\n <div class=\"view-toggle\">\n <button\n class=\"view-btn\"\n [class.active]=\"viewMode === 'grid'\"\n (click)=\"setViewMode('grid')\"\n title=\"Grid View\"\n >\n <i class=\"fa-solid fa-grid-2\"></i>\n </button>\n <button\n class=\"view-btn\"\n [class.active]=\"viewMode === 'list'\"\n (click)=\"setViewMode('list')\"\n title=\"List View\"\n >\n <i class=\"fa-solid fa-list\"></i>\n </button>\n </div>\n <button class=\"btn-icon\" (click)=\"refresh()\" title=\"Refresh\">\n <i class=\"fa-solid fa-refresh\"></i>\n </button>\n </div>\n </div>\n <!-- Bulk Actions Bar -->\n @if (selectedCredentials.size > 0) {\n <div class=\"bulk-actions\">\n <div class=\"bulk-info\">\n <span class=\"bulk-count\">{{selectedCredentials.size}} selected</span>\n <button class=\"btn-link\" (click)=\"clearSelection()\">Clear selection</button>\n </div>\n <div class=\"bulk-buttons\">\n @if (UserCanUpdate) {\n <button class=\"btn-bulk\" (click)=\"bulkToggleActive(true)\">\n <i class=\"fa-solid fa-toggle-on\"></i>\n Activate\n </button>\n }\n @if (UserCanUpdate) {\n <button class=\"btn-bulk\" (click)=\"bulkToggleActive(false)\">\n <i class=\"fa-solid fa-toggle-off\"></i>\n Deactivate\n </button>\n }\n @if (UserCanDelete) {\n <button class=\"btn-bulk danger\" (click)=\"bulkDelete()\">\n <i class=\"fa-solid fa-trash\"></i>\n Delete\n </button>\n }\n </div>\n </div>\n }\n <!-- Grid View -->\n @if (viewMode === 'grid' && filteredCredentials.length > 0) {\n <div class=\"credentials-grid\">\n @for (credential of filteredCredentials; track credential) {\n <div\n class=\"credential-card\"\n [class.selected]=\"selectedCredentials.has(credential.ID)\"\n [class.expired]=\"isExpired(credential)\"\n [class.expiring]=\"isExpiringSoon(credential)\"\n >\n <!-- Selection Checkbox -->\n @if (UserCanUpdate || UserCanDelete) {\n <div class=\"card-select\">\n <input\n type=\"checkbox\"\n [checked]=\"selectedCredentials.has(credential.ID)\"\n (change)=\"toggleSelection(credential)\"\n />\n </div>\n }\n <div class=\"card-header\">\n <div class=\"card-icon\" [ngClass]=\"getStatusClass(credential)\">\n <i [class]=\"credential.IconClass || 'fa-solid fa-key'\"></i>\n </div>\n <div class=\"card-title\">\n <div class=\"credential-name\">{{credential.Name}}</div>\n <div class=\"credential-type\">{{credential.CredentialType || 'Unknown Type'}}</div>\n </div>\n <div class=\"card-actions\">\n @if (UserCanUpdate) {\n <button\n class=\"action-btn\"\n (click)=\"toggleCredentialActive(credential, $event)\"\n [title]=\"credential.IsActive ? 'Deactivate' : 'Activate'\"\n >\n <i [class]=\"credential.IsActive ? 'fa-solid fa-toggle-on' : 'fa-solid fa-toggle-off'\"></i>\n </button>\n }\n @if (UserCanUpdate) {\n <button\n class=\"action-btn\"\n (click)=\"editCredential(credential, $event)\"\n title=\"Edit\"\n >\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n }\n @if (UserCanDelete) {\n <button\n class=\"action-btn danger\"\n (click)=\"deleteCredential(credential, $event)\"\n title=\"Delete\"\n >\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n }\n </div>\n </div>\n <div class=\"card-body\" (click)=\"editCredential(credential)\">\n <div class=\"status-badge\" [ngClass]=\"getStatusClass(credential)\">\n <i [class]=\"getStatusIcon(credential)\"></i>\n {{getStatusLabel(credential)}}\n </div>\n @if (credential.Description) {\n <p class=\"credential-description\">\n {{credential.Description}}\n </p>\n }\n <div class=\"credential-meta\">\n @if (credential.IsDefault) {\n <div class=\"meta-item\">\n <i class=\"fa-solid fa-star\"></i>\n <span>Default</span>\n </div>\n }\n @if (credential.ExpiresAt) {\n <div class=\"meta-item\" [class.warning]=\"isExpiringSoon(credential)\" [class.danger]=\"isExpired(credential)\">\n <i class=\"fa-solid fa-calendar\"></i>\n <span>{{isExpired(credential) ? 'Expired' : 'Expires'}}: {{formatDate(credential.ExpiresAt)}}</span>\n </div>\n }\n @if (credential.LastUsedAt) {\n <div class=\"meta-item\">\n <i class=\"fa-solid fa-clock\"></i>\n <span>Last used: {{formatDate(credential.LastUsedAt)}}</span>\n </div>\n }\n </div>\n </div>\n <div class=\"card-footer\">\n @if (credential.Category) {\n <div class=\"category-tag\">\n <i class=\"fa-solid fa-folder\"></i>\n {{credential.Category}}\n </div>\n }\n <div class=\"created-info\">\n Created {{formatDate(credential.__mj_CreatedAt)}}\n </div>\n </div>\n </div>\n }\n </div>\n }\n <!-- List View -->\n @if (viewMode === 'list' && filteredCredentials.length > 0) {\n <div class=\"credentials-table-container\">\n <table class=\"credentials-table\">\n <thead>\n <tr>\n @if (UserCanUpdate || UserCanDelete) {\n <th class=\"col-select\">\n <input\n type=\"checkbox\"\n [checked]=\"isAllSelected()\"\n (change)=\"toggleSelectAll()\"\n />\n </th>\n }\n <th class=\"col-name\">Name</th>\n <th class=\"col-type\">Type</th>\n <th class=\"col-category\">Category</th>\n <th class=\"col-status\">Status</th>\n <th class=\"col-expires\">Expires</th>\n <th class=\"col-used\">Last Used</th>\n <th class=\"col-actions\">Actions</th>\n </tr>\n </thead>\n <tbody>\n @for (credential of filteredCredentials; track credential) {\n <tr\n [class.selected]=\"selectedCredentials.has(credential.ID)\"\n [class.expired]=\"isExpired(credential)\"\n >\n @if (UserCanUpdate || UserCanDelete) {\n <td class=\"col-select\">\n <input\n type=\"checkbox\"\n [checked]=\"selectedCredentials.has(credential.ID)\"\n (change)=\"toggleSelection(credential)\"\n />\n </td>\n }\n <td class=\"col-name\" (click)=\"editCredential(credential)\">\n <div class=\"name-cell\">\n <i [class]=\"credential.IconClass || 'fa-solid fa-key'\" [ngClass]=\"getStatusClass(credential)\"></i>\n <div class=\"name-info\">\n <span class=\"credential-name\">{{credential.Name}}</span>\n @if (credential.Description) {\n <span class=\"credential-desc\">{{credential.Description}}</span>\n }\n </div>\n @if (credential.IsDefault) {\n <span class=\"default-badge\">Default</span>\n }\n </div>\n </td>\n <td class=\"col-type\">{{credential.CredentialType || '-'}}</td>\n <td class=\"col-category\">\n @if (credential.Category) {\n <span class=\"category-pill\">{{credential.Category}}</span>\n }\n @if (!credential.Category) {\n <span>-</span>\n }\n </td>\n <td class=\"col-status\">\n <span class=\"status-pill\" [ngClass]=\"getStatusClass(credential)\">\n {{getStatusLabel(credential)}}\n </span>\n </td>\n <td class=\"col-expires\" [class.warning]=\"isExpiringSoon(credential)\" [class.danger]=\"isExpired(credential)\">\n {{credential.ExpiresAt ? formatDate(credential.ExpiresAt) : 'Never'}}\n </td>\n <td class=\"col-used\">\n {{credential.LastUsedAt ? formatDate(credential.LastUsedAt) : 'Never'}}\n </td>\n <td class=\"col-actions\">\n <div class=\"table-actions\">\n @if (UserCanUpdate) {\n <button\n class=\"table-action-btn\"\n (click)=\"toggleCredentialActive(credential, $event)\"\n [title]=\"credential.IsActive ? 'Deactivate' : 'Activate'\"\n >\n <i [class]=\"credential.IsActive ? 'fa-solid fa-toggle-on' : 'fa-solid fa-toggle-off'\"></i>\n </button>\n }\n @if (UserCanUpdate) {\n <button\n class=\"table-action-btn\"\n (click)=\"editCredential(credential, $event)\"\n title=\"Edit\"\n >\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n }\n @if (UserCanDelete) {\n <button\n class=\"table-action-btn danger\"\n (click)=\"deleteCredential(credential, $event)\"\n title=\"Delete\"\n >\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n }\n </div>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n <!-- Empty State -->\n @if (filteredCredentials.length === 0) {\n <div class=\"empty-state\">\n <div class=\"empty-icon\">\n <i class=\"fa-solid fa-key\"></i>\n </div>\n <h3>No Credentials Found</h3>\n @if (searchText || selectedTypeFilter || selectedStatusFilter) {\n <p>\n No credentials match your current filters.\n <button class=\"btn-link\" (click)=\"clearFilters()\">Clear filters</button>\n </p>\n }\n @if (!searchText && !selectedTypeFilter && !selectedStatusFilter) {\n <p>\n Get started by creating your first credential.\n </p>\n }\n @if (UserCanCreate && !searchText && !selectedTypeFilter && !selectedStatusFilter) {\n <button class=\"btn-primary\" (click)=\"createNewCredential()\">\n <i class=\"fa-solid fa-plus\"></i>\n Create Credential\n </button>\n }\n </div>\n }\n }\n\n <!-- Edit Panel -->\n <mj-credential-edit-panel\n #editPanel\n [credentialTypes]=\"types\"\n (saved)=\"onCredentialSaved($event)\"\n (deleted)=\"onCredentialDeleted($event)\"\n ></mj-credential-edit-panel>\n</div>\n"]}
1
+ {"version":3,"file":"credentials-list-resource.component.js","sourceRoot":"","sources":["../../../src/Credentials/components/credentials-list-resource.component.ts","../../../src/Credentials/components/credentials-list-resource.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectorRef, ChangeDetectionStrategy, ViewChild } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { ResourceData, MJCredentialEntity, MJCredentialTypeEntity } from '@memberjunction/core-entities';\nimport { RegisterClass , UUIDsEqual } from '@memberjunction/global';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { RunView, Metadata } from '@memberjunction/core';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { CredentialEditPanelComponent } from '@memberjunction/ng-credentials';\ntype ViewMode = 'grid' | 'list';\ntype StatusFilter = '' | 'active' | 'inactive' | 'expired' | 'expiring';\n\n@RegisterClass(BaseResourceComponent, 'CredentialsListResource')\n@Component({\n standalone: false,\n selector: 'mj-credentials-list-resource',\n templateUrl: './credentials-list-resource.component.html',\n styleUrls: ['./credentials-list-resource.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class CredentialsListResourceComponent extends BaseResourceComponent implements OnInit, OnDestroy {\n public isLoading = true;\n public credentials: MJCredentialEntity[] = [];\n public filteredCredentials: MJCredentialEntity[] = [];\n public types: MJCredentialTypeEntity[] = [];\n\n // View state\n public viewMode: ViewMode = 'grid';\n public searchText = '';\n public selectedTypeFilter = '';\n public selectedStatusFilter: StatusFilter = '';\n public showActiveOnly = false;\n\n // Selection for bulk operations\n public selectedCredentials = new Set<string>();\n private _isAllSelected = false;\n\n // Permissions\n private _metadata = new Metadata();\n private _permissionCache = new Map<string, boolean>();\n\n private destroy$ = new Subject<void>();\n\n @ViewChild('editPanel') editPanel!: CredentialEditPanelComponent;\n\n constructor(\n private cdr: ChangeDetectorRef\n ) {\n super();\n }\n\n ngOnInit(): void {\n this.loadData();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return 'Credentials';\n }\n\n async GetResourceIconClass(data: ResourceData): Promise<string> {\n return 'fa-solid fa-key';\n }\n\n // === Permission Checks ===\n public get UserCanCreate(): boolean {\n return this.checkEntityPermission('MJ: Credentials', 'Create');\n }\n\n public get UserCanUpdate(): boolean {\n return this.checkEntityPermission('MJ: Credentials', 'Update');\n }\n\n public get UserCanDelete(): boolean {\n return this.checkEntityPermission('MJ: Credentials', 'Delete');\n }\n\n private checkEntityPermission(entityName: string, permissionType: 'Create' | 'Read' | 'Update' | 'Delete'): boolean {\n const cacheKey = `${entityName}_${permissionType}`;\n\n if (this._permissionCache.has(cacheKey)) {\n return this._permissionCache.get(cacheKey)!;\n }\n\n try {\n const entityInfo = this._metadata.Entities.find(e => e.Name === entityName);\n if (!entityInfo) {\n this._permissionCache.set(cacheKey, false);\n return false;\n }\n\n const userPermissions = entityInfo.GetUserPermisions(this._metadata.CurrentUser);\n let hasPermission = false;\n\n switch (permissionType) {\n case 'Create': hasPermission = userPermissions.CanCreate; break;\n case 'Read': hasPermission = userPermissions.CanRead; break;\n case 'Update': hasPermission = userPermissions.CanUpdate; break;\n case 'Delete': hasPermission = userPermissions.CanDelete; break;\n }\n\n this._permissionCache.set(cacheKey, hasPermission);\n return hasPermission;\n } catch (error) {\n this._permissionCache.set(cacheKey, false);\n return false;\n }\n }\n\n private async loadData(): Promise<void> {\n try {\n this.isLoading = true;\n this.cdr.markForCheck();\n\n const rv = new RunView();\n\n const [credResult, typeResult] = await rv.RunViews([\n {\n EntityName: 'MJ: Credentials',\n OrderBy: '__mj_UpdatedAt DESC',\n ResultType: 'entity_object'\n },\n {\n EntityName: 'MJ: Credential Types',\n OrderBy: 'Category, Name',\n ResultType: 'entity_object'\n }\n ]);\n\n if (credResult.Success) {\n this.credentials = credResult.Results as MJCredentialEntity[];\n }\n\n if (typeResult.Success) {\n this.types = typeResult.Results as MJCredentialTypeEntity[];\n }\n\n this.applyFilters();\n\n } catch (error) {\n console.error('Error loading credentials:', error);\n MJNotificationService.Instance.CreateSimpleNotification('Error loading credentials', 'error', 3000);\n } finally {\n this.isLoading = false;\n this.NotifyLoadComplete();\n this.cdr.markForCheck();\n\n // Handle navigation params from Data.Configuration (passed via NavigationService)\n this.handleNavigationConfig();\n }\n }\n\n // === Navigation Handling ===\n\n private handleNavigationConfig(): void {\n const config = this.Data?.Configuration;\n if (!config) {\n return;\n }\n\n // Apply filters from navigation config\n if (config.typeId) {\n this.selectedTypeFilter = config.typeId as string;\n this.applyFilters();\n }\n\n if (config.openCreatePanel) {\n // Open create panel (optionally with type/category pre-selected)\n setTimeout(() => {\n if (config.categoryId) {\n this.createNewCredentialWithType(config.typeId as string, config.categoryId as string);\n } else if (config.typeId) {\n this.createNewCredentialWithType(config.typeId as string);\n } else {\n this.createNewCredential();\n }\n }, 100);\n }\n }\n\n // === CRUD Operations ===\n\n public createNewCredential(): void {\n if (this.editPanel) {\n this.editPanel.open(null);\n }\n }\n\n public createNewCredentialWithType(typeId?: string, categoryId?: string): void {\n if (this.editPanel) {\n this.editPanel.open(null, typeId, categoryId);\n }\n }\n\n public editCredential(credential: MJCredentialEntity, event?: Event): void {\n if (event) {\n event.stopPropagation();\n }\n if (this.editPanel) {\n this.editPanel.open(credential);\n }\n }\n\n public onCredentialSaved(credential: MJCredentialEntity): void {\n // Check if it's a new credential or update\n const existingIndex = this.credentials.findIndex(c => UUIDsEqual(c.ID, credential.ID));\n if (existingIndex >= 0) {\n // Update existing\n this.credentials[existingIndex] = credential;\n } else {\n // Add new\n this.credentials.unshift(credential);\n }\n this.applyFilters();\n this.cdr.markForCheck();\n }\n\n public onCredentialDeleted(credentialId: string): void {\n this.credentials = this.credentials.filter(c => !UUIDsEqual(c.ID, credentialId));\n this.selectedCredentials.delete(credentialId);\n this.applyFilters();\n this.cdr.markForCheck();\n }\n\n public async deleteCredential(credential: MJCredentialEntity, event?: Event): Promise<void> {\n if (event) {\n event.stopPropagation();\n }\n\n if (!this.UserCanDelete) {\n MJNotificationService.Instance.CreateSimpleNotification('You do not have permission to delete credentials', 'warning', 3000);\n return;\n }\n\n const confirmed = confirm(`Are you sure you want to delete \"${credential.Name}\"? This action cannot be undone.`);\n if (!confirmed) return;\n\n try {\n const success = await credential.Delete();\n if (success) {\n MJNotificationService.Instance.CreateSimpleNotification(`Credential \"${credential.Name}\" deleted successfully`, 'success', 3000);\n this.credentials = this.credentials.filter(c => !UUIDsEqual(c.ID, credential.ID));\n this.selectedCredentials.delete(credential.ID);\n this.applyFilters();\n } else {\n MJNotificationService.Instance.CreateSimpleNotification('Failed to delete credential', 'error', 3000);\n }\n } catch (error) {\n console.error('Error deleting credential:', error);\n MJNotificationService.Instance.CreateSimpleNotification('Error deleting credential', 'error', 3000);\n }\n }\n\n public async toggleCredentialActive(credential: MJCredentialEntity, event?: Event): Promise<void> {\n if (event) {\n event.stopPropagation();\n }\n\n if (!this.UserCanUpdate) {\n MJNotificationService.Instance.CreateSimpleNotification('You do not have permission to update credentials', 'warning', 3000);\n return;\n }\n\n try {\n credential.IsActive = !credential.IsActive;\n const success = await credential.Save();\n\n if (success) {\n const status = credential.IsActive ? 'activated' : 'deactivated';\n MJNotificationService.Instance.CreateSimpleNotification(`Credential \"${credential.Name}\" ${status}`, 'success', 2000);\n this.applyFilters();\n } else {\n // Revert on failure\n credential.IsActive = !credential.IsActive;\n MJNotificationService.Instance.CreateSimpleNotification('Failed to update credential', 'error', 3000);\n }\n } catch (error) {\n console.error('Error updating credential:', error);\n credential.IsActive = !credential.IsActive;\n MJNotificationService.Instance.CreateSimpleNotification('Error updating credential', 'error', 3000);\n }\n this.cdr.markForCheck();\n }\n\n // === Selection ===\n\n public toggleSelection(credential: MJCredentialEntity, event?: Event): void {\n if (event) {\n event.stopPropagation();\n }\n if (this.selectedCredentials.has(credential.ID)) {\n this.selectedCredentials.delete(credential.ID);\n } else {\n this.selectedCredentials.add(credential.ID);\n }\n this.updateAllSelectedState();\n this.cdr.markForCheck();\n }\n\n public toggleSelectAll(): void {\n if (this._isAllSelected) {\n this.selectedCredentials.clear();\n } else {\n this.filteredCredentials.forEach(c => this.selectedCredentials.add(c.ID));\n }\n this._isAllSelected = !this._isAllSelected;\n this.cdr.markForCheck();\n }\n\n public isAllSelected(): boolean {\n return this._isAllSelected;\n }\n\n public isSelected(credential: MJCredentialEntity): boolean {\n return this.selectedCredentials.has(credential.ID);\n }\n\n public clearSelection(): void {\n this.selectedCredentials.clear();\n this._isAllSelected = false;\n this.cdr.markForCheck();\n }\n\n private updateAllSelectedState(): void {\n this._isAllSelected = this.filteredCredentials.length > 0 &&\n this.filteredCredentials.every(c => this.selectedCredentials.has(c.ID));\n }\n\n public async deleteSelected(): Promise<void> {\n if (!this.UserCanDelete || this.selectedCredentials.size === 0) return;\n\n const count = this.selectedCredentials.size;\n const confirmed = confirm(`Are you sure you want to delete ${count} credential(s)? This action cannot be undone.`);\n if (!confirmed) return;\n\n let successCount = 0;\n let failCount = 0;\n\n for (const credId of this.selectedCredentials) {\n const credential = this.credentials.find(c => UUIDsEqual(c.ID, credId));\n if (credential) {\n try {\n const success = await credential.Delete();\n if (success) {\n successCount++;\n this.credentials = this.credentials.filter(c => !UUIDsEqual(c.ID, credId));\n } else {\n failCount++;\n }\n } catch {\n failCount++;\n }\n }\n }\n\n this.selectedCredentials.clear();\n this.applyFilters();\n\n if (successCount > 0) {\n MJNotificationService.Instance.CreateSimpleNotification(\n `${successCount} credential(s) deleted${failCount > 0 ? `, ${failCount} failed` : ''}`,\n failCount > 0 ? 'warning' : 'success',\n 3000\n );\n } else {\n MJNotificationService.Instance.CreateSimpleNotification('Failed to delete credentials', 'error', 3000);\n }\n }\n\n // === Filtering ===\n\n public onSearchChange(value: string): void {\n this.searchText = value;\n this.applyFilters();\n }\n\n public onTypeFilterChange(typeId: string): void {\n this.selectedTypeFilter = typeId;\n this.applyFilters();\n }\n\n public onStatusFilterChange(status: StatusFilter): void {\n this.selectedStatusFilter = status;\n this.applyFilters();\n }\n\n public onActiveFilterChange(showActive: boolean): void {\n this.showActiveOnly = showActive;\n this.applyFilters();\n }\n\n public clearFilters(): void {\n this.searchText = '';\n this.selectedTypeFilter = '';\n this.selectedStatusFilter = '';\n this.showActiveOnly = false;\n this.applyFilters();\n }\n\n public get hasActiveFilters(): boolean {\n return this.searchText !== '' ||\n this.selectedTypeFilter !== '' ||\n this.selectedStatusFilter !== '' ||\n this.showActiveOnly;\n }\n\n private applyFilters(): void {\n let filtered = [...this.credentials];\n const now = new Date();\n const thirtyDaysFromNow = new Date();\n thirtyDaysFromNow.setDate(thirtyDaysFromNow.getDate() + 30);\n\n // Filter by active status\n if (this.showActiveOnly) {\n filtered = filtered.filter(c => c.IsActive);\n }\n\n // Filter by status\n if (this.selectedStatusFilter) {\n filtered = filtered.filter(c => {\n const statusClass = this.getStatusClass(c);\n switch (this.selectedStatusFilter) {\n case 'active': return statusClass === 'active';\n case 'inactive': return statusClass === 'inactive';\n case 'expired': return statusClass === 'expired';\n case 'expiring': return statusClass === 'expiring';\n default: return true;\n }\n });\n }\n\n // Filter by type\n if (this.selectedTypeFilter) {\n filtered = filtered.filter(c => UUIDsEqual(c.CredentialTypeID, this.selectedTypeFilter));\n }\n\n // Filter by search text\n if (this.searchText.trim()) {\n const search = this.searchText.toLowerCase().trim();\n filtered = filtered.filter(c =>\n c.Name.toLowerCase().includes(search) ||\n (c.Description && c.Description.toLowerCase().includes(search)) ||\n (c.CredentialType && c.CredentialType.toLowerCase().includes(search))\n );\n }\n\n this.filteredCredentials = filtered;\n this.updateAllSelectedState();\n this.cdr.markForCheck();\n }\n\n // === View Mode ===\n\n public setViewMode(mode: ViewMode): void {\n this.viewMode = mode;\n this.cdr.markForCheck();\n }\n\n // === Helpers ===\n\n public getTypeById(typeId: string): MJCredentialTypeEntity | undefined {\n return this.types.find(t => UUIDsEqual(t.ID, typeId));\n }\n\n public getTypesByCategory(): Map<string, MJCredentialTypeEntity[]> {\n const grouped = new Map<string, MJCredentialTypeEntity[]>();\n for (const type of this.types) {\n const category = type.Category;\n if (!grouped.has(category)) {\n grouped.set(category, []);\n }\n grouped.get(category)!.push(type);\n }\n return grouped;\n }\n\n public getStatusClass(credential: MJCredentialEntity): string {\n if (!credential.IsActive) {\n return 'inactive';\n }\n if (credential.ExpiresAt) {\n const expiresAt = new Date(credential.ExpiresAt);\n const now = new Date();\n const thirtyDays = 30 * 24 * 60 * 60 * 1000;\n if (expiresAt < now) {\n return 'expired';\n }\n if (expiresAt.getTime() - now.getTime() < thirtyDays) {\n return 'expiring';\n }\n }\n return 'active';\n }\n\n public getStatusLabel(credential: MJCredentialEntity): string {\n const statusClass = this.getStatusClass(credential);\n const labels: Record<string, string> = {\n 'active': 'Active',\n 'inactive': 'Inactive',\n 'expired': 'Expired',\n 'expiring': 'Expiring Soon'\n };\n return labels[statusClass] || 'Unknown';\n }\n\n public getStatusIcon(credential: MJCredentialEntity): string {\n const statusClass = this.getStatusClass(credential);\n const icons: Record<string, string> = {\n 'active': 'fa-solid fa-check-circle',\n 'inactive': 'fa-solid fa-minus-circle',\n 'expired': 'fa-solid fa-times-circle',\n 'expiring': 'fa-solid fa-clock'\n };\n return icons[statusClass] || 'fa-solid fa-circle';\n }\n\n public formatDate(date: Date | null | undefined): string {\n if (!date) return 'Never';\n return new Date(date).toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric'\n });\n }\n\n public formatDateTime(date: Date | null | undefined): string {\n if (!date) return 'Never';\n return new Date(date).toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n hour: '2-digit',\n minute: '2-digit'\n });\n }\n\n public getTimeAgo(date: Date | null | undefined): string {\n if (!date) return 'Never';\n const now = new Date();\n const then = new Date(date);\n const diffMs = now.getTime() - then.getTime();\n const diffMins = Math.floor(diffMs / 60000);\n const diffHours = Math.floor(diffMs / 3600000);\n const diffDays = Math.floor(diffMs / 86400000);\n\n if (diffMins < 1) return 'Just now';\n if (diffMins < 60) return `${diffMins}m ago`;\n if (diffHours < 24) return `${diffHours}h ago`;\n if (diffDays < 30) return `${diffDays}d ago`;\n return this.formatDate(date);\n }\n\n public getTypeIcon(credential: MJCredentialEntity): string {\n const type = this.getTypeById(credential.CredentialTypeID);\n if (!type) return 'fa-solid fa-key';\n\n const iconMap: Record<string, string> = {\n 'AI': 'fa-solid fa-brain',\n 'Communication': 'fa-solid fa-envelope',\n 'Storage': 'fa-solid fa-cloud',\n 'Database': 'fa-solid fa-database',\n 'Authentication': 'fa-solid fa-shield-halved',\n 'Integration': 'fa-solid fa-plug'\n };\n return iconMap[type.Category] || 'fa-solid fa-key';\n }\n\n public refresh(): void {\n this.selectedCredentials.clear();\n this.loadData();\n }\n\n // === Stats ===\n\n public get activeCount(): number {\n return this.credentials.filter(c => c.IsActive).length;\n }\n\n public getActiveCount(): number {\n return this.activeCount;\n }\n\n public get expiringCount(): number {\n const now = new Date();\n const thirtyDaysFromNow = new Date();\n thirtyDaysFromNow.setDate(thirtyDaysFromNow.getDate() + 30);\n return this.credentials.filter(c =>\n c.ExpiresAt &&\n new Date(c.ExpiresAt) >= now &&\n new Date(c.ExpiresAt) <= thirtyDaysFromNow &&\n c.IsActive\n ).length;\n }\n\n public getExpiringSoonCount(): number {\n return this.expiringCount;\n }\n\n public get expiredCount(): number {\n const now = new Date();\n return this.credentials.filter(c =>\n c.ExpiresAt && new Date(c.ExpiresAt) < now\n ).length;\n }\n\n public getExpiredCount(): number {\n return this.expiredCount;\n }\n\n // === Status Helpers ===\n\n public isExpired(credential: MJCredentialEntity): boolean {\n if (!credential.ExpiresAt) return false;\n return new Date(credential.ExpiresAt) < new Date();\n }\n\n public isExpiringSoon(credential: MJCredentialEntity): boolean {\n if (!credential.ExpiresAt) return false;\n const expiresAt = new Date(credential.ExpiresAt);\n const now = new Date();\n const thirtyDaysFromNow = new Date();\n thirtyDaysFromNow.setDate(thirtyDaysFromNow.getDate() + 30);\n return expiresAt >= now && expiresAt <= thirtyDaysFromNow;\n }\n\n // === Bulk Operations ===\n\n public async bulkToggleActive(active: boolean): Promise<void> {\n if (!this.UserCanUpdate || this.selectedCredentials.size === 0) return;\n\n let successCount = 0;\n let failCount = 0;\n\n for (const credId of this.selectedCredentials) {\n const credential = this.credentials.find(c => UUIDsEqual(c.ID, credId));\n if (credential && credential.IsActive !== active) {\n try {\n credential.IsActive = active;\n const success = await credential.Save();\n if (success) {\n successCount++;\n } else {\n credential.IsActive = !active;\n failCount++;\n }\n } catch {\n credential.IsActive = !active;\n failCount++;\n }\n }\n }\n\n this.clearSelection();\n this.applyFilters();\n\n const action = active ? 'activated' : 'deactivated';\n if (successCount > 0) {\n MJNotificationService.Instance.CreateSimpleNotification(\n `${successCount} credential(s) ${action}${failCount > 0 ? `, ${failCount} failed` : ''}`,\n failCount > 0 ? 'warning' : 'success',\n 3000\n );\n } else if (failCount > 0) {\n MJNotificationService.Instance.CreateSimpleNotification(`Failed to ${action.slice(0, -1)} credentials`, 'error', 3000);\n }\n }\n\n public async bulkDelete(): Promise<void> {\n if (!this.UserCanDelete || this.selectedCredentials.size === 0) return;\n\n const count = this.selectedCredentials.size;\n const confirmed = confirm(`Are you sure you want to delete ${count} credential(s)? This action cannot be undone.`);\n if (!confirmed) return;\n\n let successCount = 0;\n let failCount = 0;\n\n for (const credId of this.selectedCredentials) {\n const credential = this.credentials.find(c => UUIDsEqual(c.ID, credId));\n if (credential) {\n try {\n const success = await credential.Delete();\n if (success) {\n successCount++;\n this.credentials = this.credentials.filter(c => !UUIDsEqual(c.ID, credId));\n } else {\n failCount++;\n }\n } catch {\n failCount++;\n }\n }\n }\n\n this.clearSelection();\n this.applyFilters();\n\n if (successCount > 0) {\n MJNotificationService.Instance.CreateSimpleNotification(\n `${successCount} credential(s) deleted${failCount > 0 ? `, ${failCount} failed` : ''}`,\n failCount > 0 ? 'warning' : 'success',\n 3000\n );\n } else {\n MJNotificationService.Instance.CreateSimpleNotification('Failed to delete credentials', 'error', 3000);\n }\n }\n}\n","<div class=\"list-container\">\n @if (isLoading) {\n <mj-loading text=\"Loading credentials...\"></mj-loading>\n }\n\n @if (!isLoading) {\n <!-- Header with Stats -->\n <div class=\"list-header\">\n <div class=\"header-info\">\n <h2 class=\"list-title\">Credentials</h2>\n <div class=\"header-stats\">\n <span class=\"stat-item\">\n <i class=\"fa-solid fa-key\"></i>\n {{credentials.length}} total\n </span>\n <span class=\"stat-item active\">\n <i class=\"fa-solid fa-check-circle\"></i>\n {{getActiveCount()}} active\n </span>\n @if (getExpiringSoonCount() > 0) {\n <span class=\"stat-item warning\">\n <i class=\"fa-solid fa-clock\"></i>\n {{getExpiringSoonCount()}} expiring\n </span>\n }\n @if (getExpiredCount() > 0) {\n <span class=\"stat-item danger\">\n <i class=\"fa-solid fa-exclamation-circle\"></i>\n {{getExpiredCount()}} expired\n </span>\n }\n </div>\n </div>\n <div class=\"header-actions\">\n @if (UserCanCreate) {\n <button class=\"btn-primary\" (click)=\"createNewCredential()\">\n <i class=\"fa-solid fa-plus\"></i>\n <span>New Credential</span>\n </button>\n }\n </div>\n </div>\n <!-- Toolbar -->\n <div class=\"toolbar\">\n <div class=\"toolbar-left\">\n <div class=\"search-container\">\n <i class=\"fa-solid fa-search\"></i>\n <input\n type=\"text\"\n placeholder=\"Search credentials...\"\n [value]=\"searchText\"\n (input)=\"onSearchChange($any($event.target).value)\"\n />\n @if (searchText) {\n <button class=\"search-clear\" (click)=\"onSearchChange('')\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n }\n </div>\n <select\n class=\"filter-select\"\n [value]=\"selectedTypeFilter\"\n (change)=\"onTypeFilterChange($any($event.target).value)\"\n >\n <option value=\"\">All Types</option>\n @for (type of types; track type) {\n <option [value]=\"type.ID\">{{type.Name}}</option>\n }\n </select>\n <select\n class=\"filter-select\"\n [value]=\"selectedStatusFilter\"\n (change)=\"onStatusFilterChange($any($event.target).value)\"\n >\n <option value=\"\">All Statuses</option>\n <option value=\"active\">Active</option>\n <option value=\"inactive\">Inactive</option>\n <option value=\"expiring\">Expiring Soon</option>\n <option value=\"expired\">Expired</option>\n </select>\n </div>\n <div class=\"toolbar-right\">\n <div class=\"results-info\">\n {{filteredCredentials.length}} of {{credentials.length}}\n </div>\n <div class=\"view-toggle\">\n <button\n class=\"view-btn\"\n [class.active]=\"viewMode === 'grid'\"\n (click)=\"setViewMode('grid')\"\n title=\"Grid View\"\n >\n <i class=\"fa-solid fa-grid-2\"></i>\n </button>\n <button\n class=\"view-btn\"\n [class.active]=\"viewMode === 'list'\"\n (click)=\"setViewMode('list')\"\n title=\"List View\"\n >\n <i class=\"fa-solid fa-list\"></i>\n </button>\n </div>\n <button class=\"btn-icon\" (click)=\"refresh()\" title=\"Refresh\">\n <i class=\"fa-solid fa-refresh\"></i>\n </button>\n </div>\n </div>\n <!-- Bulk Actions Bar -->\n @if (selectedCredentials.size > 0) {\n <div class=\"bulk-actions\">\n <div class=\"bulk-info\">\n <span class=\"bulk-count\">{{selectedCredentials.size}} selected</span>\n <button class=\"btn-link\" (click)=\"clearSelection()\">Clear selection</button>\n </div>\n <div class=\"bulk-buttons\">\n @if (UserCanUpdate) {\n <button class=\"btn-bulk\" (click)=\"bulkToggleActive(true)\">\n <i class=\"fa-solid fa-toggle-on\"></i>\n Activate\n </button>\n }\n @if (UserCanUpdate) {\n <button class=\"btn-bulk\" (click)=\"bulkToggleActive(false)\">\n <i class=\"fa-solid fa-toggle-off\"></i>\n Deactivate\n </button>\n }\n @if (UserCanDelete) {\n <button class=\"btn-bulk danger\" (click)=\"bulkDelete()\">\n <i class=\"fa-solid fa-trash\"></i>\n Delete\n </button>\n }\n </div>\n </div>\n }\n <!-- Grid View -->\n @if (viewMode === 'grid' && filteredCredentials.length > 0) {\n <div class=\"credentials-grid\">\n @for (credential of filteredCredentials; track credential) {\n <div\n class=\"credential-card\"\n [class.selected]=\"selectedCredentials.has(credential.ID)\"\n [class.expired]=\"isExpired(credential)\"\n [class.expiring]=\"isExpiringSoon(credential)\"\n >\n <!-- Selection Checkbox -->\n @if (UserCanUpdate || UserCanDelete) {\n <div class=\"card-select\">\n <input\n type=\"checkbox\"\n [checked]=\"selectedCredentials.has(credential.ID)\"\n (change)=\"toggleSelection(credential)\"\n />\n </div>\n }\n <div class=\"card-header\">\n <div class=\"card-icon\" [ngClass]=\"getStatusClass(credential)\">\n <i [class]=\"credential.IconClass || 'fa-solid fa-key'\"></i>\n </div>\n <div class=\"card-title\">\n <div class=\"credential-name\">{{credential.Name}}</div>\n <div class=\"credential-type\">{{credential.CredentialType || 'Unknown Type'}}</div>\n </div>\n <div class=\"card-actions\">\n @if (UserCanUpdate) {\n <button mjButton variant=\"flat\" size=\"sm\"\n (click)=\"toggleCredentialActive(credential, $event)\"\n [title]=\"credential.IsActive ? 'Deactivate' : 'Activate'\">\n <i [class]=\"credential.IsActive ? 'fa-solid fa-toggle-on' : 'fa-solid fa-toggle-off'\"></i>\n </button>\n }\n @if (UserCanUpdate) {\n <button mjButton variant=\"flat\" size=\"sm\"\n (click)=\"editCredential(credential, $event)\"\n title=\"Edit\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n }\n @if (UserCanDelete) {\n <button mjButton variant=\"danger\" size=\"sm\"\n (click)=\"deleteCredential(credential, $event)\"\n title=\"Delete\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n }\n </div>\n </div>\n <div class=\"card-body\" (click)=\"editCredential(credential)\">\n <div class=\"status-badge\" [ngClass]=\"getStatusClass(credential)\">\n <i [class]=\"getStatusIcon(credential)\"></i>\n {{getStatusLabel(credential)}}\n </div>\n @if (credential.Description) {\n <p class=\"credential-description\">\n {{credential.Description}}\n </p>\n }\n <div class=\"credential-meta\">\n @if (credential.IsDefault) {\n <div class=\"meta-item\">\n <i class=\"fa-solid fa-star\"></i>\n <span>Default</span>\n </div>\n }\n @if (credential.ExpiresAt) {\n <div class=\"meta-item\" [class.warning]=\"isExpiringSoon(credential)\" [class.danger]=\"isExpired(credential)\">\n <i class=\"fa-solid fa-calendar\"></i>\n <span>{{isExpired(credential) ? 'Expired' : 'Expires'}}: {{formatDate(credential.ExpiresAt)}}</span>\n </div>\n }\n @if (credential.LastUsedAt) {\n <div class=\"meta-item\">\n <i class=\"fa-solid fa-clock\"></i>\n <span>Last used: {{formatDate(credential.LastUsedAt)}}</span>\n </div>\n }\n </div>\n </div>\n <div class=\"card-footer\">\n @if (credential.Category) {\n <div class=\"category-tag\">\n <i class=\"fa-solid fa-folder\"></i>\n {{credential.Category}}\n </div>\n }\n <div class=\"created-info\">\n Created {{formatDate(credential.__mj_CreatedAt)}}\n </div>\n </div>\n </div>\n }\n </div>\n }\n <!-- List View -->\n @if (viewMode === 'list' && filteredCredentials.length > 0) {\n <div class=\"credentials-table-container\">\n <table class=\"credentials-table\">\n <thead>\n <tr>\n @if (UserCanUpdate || UserCanDelete) {\n <th class=\"col-select\">\n <input\n type=\"checkbox\"\n [checked]=\"isAllSelected()\"\n (change)=\"toggleSelectAll()\"\n />\n </th>\n }\n <th class=\"col-name\">Name</th>\n <th class=\"col-type\">Type</th>\n <th class=\"col-category\">Category</th>\n <th class=\"col-status\">Status</th>\n <th class=\"col-expires\">Expires</th>\n <th class=\"col-used\">Last Used</th>\n <th class=\"col-actions\">Actions</th>\n </tr>\n </thead>\n <tbody>\n @for (credential of filteredCredentials; track credential) {\n <tr\n [class.selected]=\"selectedCredentials.has(credential.ID)\"\n [class.expired]=\"isExpired(credential)\"\n >\n @if (UserCanUpdate || UserCanDelete) {\n <td class=\"col-select\">\n <input\n type=\"checkbox\"\n [checked]=\"selectedCredentials.has(credential.ID)\"\n (change)=\"toggleSelection(credential)\"\n />\n </td>\n }\n <td class=\"col-name\" (click)=\"editCredential(credential)\">\n <div class=\"name-cell\">\n <i [class]=\"credential.IconClass || 'fa-solid fa-key'\" [ngClass]=\"getStatusClass(credential)\"></i>\n <div class=\"name-info\">\n <span class=\"credential-name\">{{credential.Name}}</span>\n @if (credential.Description) {\n <span class=\"credential-desc\">{{credential.Description}}</span>\n }\n </div>\n @if (credential.IsDefault) {\n <span class=\"default-badge\">Default</span>\n }\n </div>\n </td>\n <td class=\"col-type\">{{credential.CredentialType || '-'}}</td>\n <td class=\"col-category\">\n @if (credential.Category) {\n <span class=\"category-pill\">{{credential.Category}}</span>\n }\n @if (!credential.Category) {\n <span>-</span>\n }\n </td>\n <td class=\"col-status\">\n <span class=\"status-pill\" [ngClass]=\"getStatusClass(credential)\">\n {{getStatusLabel(credential)}}\n </span>\n </td>\n <td class=\"col-expires\" [class.warning]=\"isExpiringSoon(credential)\" [class.danger]=\"isExpired(credential)\">\n {{credential.ExpiresAt ? formatDate(credential.ExpiresAt) : 'Never'}}\n </td>\n <td class=\"col-used\">\n {{credential.LastUsedAt ? formatDate(credential.LastUsedAt) : 'Never'}}\n </td>\n <td class=\"col-actions\">\n <div class=\"table-actions\">\n @if (UserCanUpdate) {\n <button\n class=\"table-action-btn\"\n (click)=\"toggleCredentialActive(credential, $event)\"\n [title]=\"credential.IsActive ? 'Deactivate' : 'Activate'\"\n >\n <i [class]=\"credential.IsActive ? 'fa-solid fa-toggle-on' : 'fa-solid fa-toggle-off'\"></i>\n </button>\n }\n @if (UserCanUpdate) {\n <button\n class=\"table-action-btn\"\n (click)=\"editCredential(credential, $event)\"\n title=\"Edit\"\n >\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n }\n @if (UserCanDelete) {\n <button\n class=\"table-action-btn danger\"\n (click)=\"deleteCredential(credential, $event)\"\n title=\"Delete\"\n >\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n }\n </div>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n <!-- Empty State -->\n @if (filteredCredentials.length === 0) {\n <div class=\"empty-state\">\n <div class=\"empty-icon\">\n <i class=\"fa-solid fa-key\"></i>\n </div>\n <h3>No Credentials Found</h3>\n @if (searchText || selectedTypeFilter || selectedStatusFilter) {\n <p>\n No credentials match your current filters.\n <button class=\"btn-link\" (click)=\"clearFilters()\">Clear filters</button>\n </p>\n }\n @if (!searchText && !selectedTypeFilter && !selectedStatusFilter) {\n <p>\n Get started by creating your first credential.\n </p>\n }\n @if (UserCanCreate && !searchText && !selectedTypeFilter && !selectedStatusFilter) {\n <button class=\"btn-primary\" (click)=\"createNewCredential()\">\n <i class=\"fa-solid fa-plus\"></i>\n Create Credential\n </button>\n }\n </div>\n }\n }\n\n <!-- Edit Panel -->\n <mj-credential-edit-panel\n #editPanel\n [credentialTypes]=\"types\"\n (saved)=\"onCredentialSaved($event)\"\n (deleted)=\"onCredentialDeleted($event)\"\n ></mj-credential-edit-panel>\n</div>\n"]}