@memberjunction/ng-core-entity-forms 5.11.0 → 5.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-form-section.component.js +2 -2
  2. package/dist/lib/custom/AIAgents/add-action-dialog.component.js +2 -2
  3. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js +2 -2
  4. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +8 -0
  5. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
  6. package/dist/lib/custom/AIAgents/ai-agent-form.component.js +199 -139
  7. package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
  8. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js +2 -2
  9. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js +2 -2
  10. package/dist/lib/custom/AIAgents/new-agent-dialog.component.js +2 -2
  11. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js +6 -6
  12. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js.map +1 -1
  13. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js +2 -2
  14. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js +6 -6
  15. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js.map +1 -1
  16. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +2 -2
  17. package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js +2 -2
  18. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +4 -4
  19. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
  20. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js +2 -2
  21. package/dist/lib/custom/Actions/action-execution-log-form.component.js +4 -4
  22. package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
  23. package/dist/lib/custom/Actions/action-form.component.js +22 -22
  24. package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
  25. package/dist/lib/custom/Entities/entity-form.component.d.ts +11 -0
  26. package/dist/lib/custom/Entities/entity-form.component.d.ts.map +1 -1
  27. package/dist/lib/custom/Entities/entity-form.component.js +244 -217
  28. package/dist/lib/custom/Entities/entity-form.component.js.map +1 -1
  29. package/dist/lib/custom/EntityActions/entityaction.form.component.js +2 -2
  30. package/dist/lib/custom/Lists/list-form.component.js +3 -3
  31. package/dist/lib/custom/Lists/list-form.component.js.map +1 -1
  32. package/dist/lib/custom/Queries/query-category-dialog.component.js +3 -3
  33. package/dist/lib/custom/Queries/query-category-dialog.component.js.map +1 -1
  34. package/dist/lib/custom/Queries/query-form.component.js +2 -2
  35. package/dist/lib/custom/Queries/query-run-dialog.component.js +3 -3
  36. package/dist/lib/custom/Queries/query-run-dialog.component.js.map +1 -1
  37. package/dist/lib/custom/Templates/template-param-dialog.component.js +107 -111
  38. package/dist/lib/custom/Templates/template-param-dialog.component.js.map +1 -1
  39. package/dist/lib/custom/Templates/template-params-grid.component.js +2 -2
  40. package/dist/lib/custom/Templates/templates-form.component.js +40 -43
  41. package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
  42. package/dist/lib/custom/Tests/entity-link-pill.component.js +2 -2
  43. package/dist/lib/custom/Tests/entity-link-pill.component.js.map +1 -1
  44. package/dist/lib/custom/Tests/test-form.component.js +2 -2
  45. package/dist/lib/custom/Tests/test-rubric-form.component.js +2 -2
  46. package/dist/lib/custom/Tests/test-rubric-form.component.js.map +1 -1
  47. package/dist/lib/custom/Tests/test-run-feedback-form.component.js +2 -2
  48. package/dist/lib/custom/Tests/test-run-feedback-form.component.js.map +1 -1
  49. package/dist/lib/custom/Tests/test-run-form.component.js +2 -2
  50. package/dist/lib/custom/Tests/test-suite-form.component.js +2 -2
  51. package/dist/lib/custom/Tests/test-suite-run-form.component.js +2 -2
  52. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js +2 -2
  53. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.js +2 -2
  54. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.js +2 -2
  55. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js +2 -2
  56. package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.d.ts +1 -0
  57. package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.d.ts.map +1 -1
  58. package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.js +28 -18
  59. package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.js.map +1 -1
  60. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +2 -2
  61. package/dist/lib/custom/custom-forms.module.d.ts +2 -1
  62. package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
  63. package/dist/lib/custom/custom-forms.module.js +7 -3
  64. package/dist/lib/custom/custom-forms.module.js.map +1 -1
  65. package/dist/lib/custom/shared/entity-selector-dialog.component.js +2 -2
  66. package/dist/lib/custom/shared/entity-selector-dialog.component.js.map +1 -1
  67. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js +155 -153
  68. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js.map +1 -1
  69. package/dist/lib/generated/Entities/MJAIAgentCategory/mjaiagentcategory.form.component.d.ts +10 -0
  70. package/dist/lib/generated/Entities/MJAIAgentCategory/mjaiagentcategory.form.component.d.ts.map +1 -0
  71. package/dist/lib/generated/Entities/MJAIAgentCategory/mjaiagentcategory.form.component.js +105 -0
  72. package/dist/lib/generated/Entities/MJAIAgentCategory/mjaiagentcategory.form.component.js.map +1 -0
  73. package/dist/lib/generated/Entities/MJAIAgentRequest/mjaiagentrequest.form.component.d.ts.map +1 -1
  74. package/dist/lib/generated/Entities/MJAIAgentRequest/mjaiagentrequest.form.component.js +31 -7
  75. package/dist/lib/generated/Entities/MJAIAgentRequest/mjaiagentrequest.form.component.js.map +1 -1
  76. package/dist/lib/generated/Entities/MJAIAgentRequestType/mjaiagentrequesttype.form.component.d.ts +10 -0
  77. package/dist/lib/generated/Entities/MJAIAgentRequestType/mjaiagentrequesttype.form.component.d.ts.map +1 -0
  78. package/dist/lib/generated/Entities/MJAIAgentRequestType/mjaiagentrequesttype.form.component.js +89 -0
  79. package/dist/lib/generated/Entities/MJAIAgentRequestType/mjaiagentrequesttype.form.component.js.map +1 -0
  80. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.d.ts.map +1 -1
  81. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js +50 -14
  82. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js.map +1 -1
  83. package/dist/lib/generated/Entities/MJAIAgentRunStep/mjaiagentrunstep.form.component.d.ts.map +1 -1
  84. package/dist/lib/generated/Entities/MJAIAgentRunStep/mjaiagentrunstep.form.component.js +22 -4
  85. package/dist/lib/generated/Entities/MJAIAgentRunStep/mjaiagentrunstep.form.component.js.map +1 -1
  86. package/dist/lib/generated/Entities/MJAIAgentType/mjaiagenttype.form.component.js +13 -11
  87. package/dist/lib/generated/Entities/MJAIAgentType/mjaiagenttype.form.component.js.map +1 -1
  88. package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js +83 -81
  89. package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js.map +1 -1
  90. package/dist/lib/generated/Entities/MJIntegration/mjintegration.form.component.js +35 -33
  91. package/dist/lib/generated/Entities/MJIntegration/mjintegration.form.component.js.map +1 -1
  92. package/dist/lib/generated/Entities/MJIntegrationObject/mjintegrationobject.form.component.js +25 -19
  93. package/dist/lib/generated/Entities/MJIntegrationObject/mjintegrationobject.form.component.js.map +1 -1
  94. package/dist/lib/generated/generated-forms.module.d.ts +289 -287
  95. package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
  96. package/dist/lib/generated/generated-forms.module.js +102 -96
  97. package/dist/lib/generated/generated-forms.module.js.map +1 -1
  98. package/dist/lib/shared/components/template-editor.component.js +85 -89
  99. package/dist/lib/shared/components/template-editor.component.js.map +1 -1
  100. package/package.json +31 -31
@@ -1 +1 @@
1
- {"version":3,"file":"action-form.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/Actions/action-form.component.ts","../../../../src/lib/custom/Actions/action-form.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, inject, ViewContainerRef } from '@angular/core';\nimport { MJActionEntity, MJActionParamEntity, MJActionResultCodeEntity, MJActionCategoryEntity, MJActionExecutionLogEntity, MJActionLibraryEntity, MJLibraryEntity } from '@memberjunction/core-entities';\nimport { RegisterClass } from '@memberjunction/global';\nimport { BaseFormComponent } from '@memberjunction/ng-base-forms';\nimport { SharedService } from '@memberjunction/ng-shared';\nimport { Metadata, RunView, CompositeKey } from '@memberjunction/core';\nimport { MJActionFormComponent } from '../../generated/Entities/MJAction/mjaction.form.component';\nimport { DialogService } from '@progress/kendo-angular-dialog';\nimport { ActionParamDialogComponent, ActionResultCodeDialogComponent } from '@memberjunction/ng-actions';\n\n@RegisterClass(BaseFormComponent, 'MJ: Actions')\n@Component({\n standalone: false,\n selector: 'mj-action-form',\n templateUrl: './action-form.component.html',\n styleUrls: ['./action-form.component.css']\n})\nexport class MJActionFormComponentExtended extends MJActionFormComponent implements OnInit {\n public record!: MJActionEntity;\n \n // Related entities\n public category: MJActionCategoryEntity | null = null;\n public actionParams: MJActionParamEntity[] = [];\n public resultCodes: MJActionResultCodeEntity[] = [];\n public recentExecutions: MJActionExecutionLogEntity[] = [];\n public actionLibraries: MJActionLibraryEntity[] = [];\n public libraries: MJLibraryEntity[] = [];\n \n // Cached filtered params\n private _inputParams: MJActionParamEntity[] = [];\n private _outputParams: MJActionParamEntity[] = [];\n \n // Track params to delete\n private paramsToDelete: MJActionParamEntity[] = [];\n \n // Track result codes to delete\n private resultCodesToDelete: MJActionResultCodeEntity[] = [];\n \n // Loading states\n public isLoadingParams = false;\n public isLoadingResultCodes = false;\n public isLoadingExecutions = false;\n public isLoadingLibraries = false;\n \n // UI state\n public expandedSections = {\n overview: true,\n code: true,\n params: true,\n resultCodes: true,\n execution: false,\n configuration: false\n };\n \n // Test harness state\n public showTestHarness = false;\n \n // Execution stats\n public executionStats = {\n totalRuns: 0,\n successRate: 0,\n avgDuration: 0,\n lastRun: null as Date | null\n };\n \n // Code editor config\n public codeLanguage = 'typescript';\n public showCodeComments = false;\n \n private dialogService = inject(DialogService);\n private viewContainerRef = inject(ViewContainerRef);\n private sharedService = inject(SharedService);\n\n async ngOnInit() {\n await super.ngOnInit();\n \n if (this.record?.IsSaved) {\n // Load all related data in parallel\n await Promise.all([\n this.loadCategory(),\n this.loadActionParams(),\n this.loadResultCodes(),\n this.loadRecentExecutions(),\n this.loadActionLibraries(),\n this.loadExecutionStats()\n ]);\n this.cdr.detectChanges();\n }\n }\n \n /**\n * Override InternalSaveRecord to handle Action and related ActionParams in a transaction\n * This follows the same pattern as MJAIAgentFormComponent\n */\n protected async InternalSaveRecord(): Promise<boolean> {\n if (!this.record) {\n return false;\n }\n \n try {\n const md = new Metadata();\n const transactionGroup = await md.CreateTransactionGroup();\n \n // Set transaction group on the Action record\n this.record.TransactionGroup = transactionGroup;\n \n // Save the Action record first\n const actionSaved = await this.record.Save();\n \n if (!actionSaved) {\n console.error('Failed to save Action record');\n this.sharedService.CreateSimpleNotification('Failed to save Action record', 'error', 5000);\n return false;\n }\n \n // Process all pending records (params and result codes to save or delete)\n for (const pendingRecord of this.PendingRecords) {\n if (pendingRecord.entityObject.EntityInfo.Name === 'MJ: Action Params') {\n const param = pendingRecord.entityObject as MJActionParamEntity;\n \n // Ensure ActionID is set for new params\n if (!param.ActionID) {\n param.ActionID = this.record.ID;\n }\n \n param.TransactionGroup = transactionGroup;\n \n if (pendingRecord.action === 'save') {\n const saved = await param.Save();\n if (!saved) {\n console.error('Failed to save parameter:', param.Name);\n return false;\n }\n } else if (pendingRecord.action === 'delete') {\n const deleted = await param.Delete();\n if (!deleted) {\n console.error('Failed to delete parameter:', param.Name);\n return false;\n }\n }\n } else if (pendingRecord.entityObject.EntityInfo.Name === 'MJ: Action Result Codes') {\n const resultCode = pendingRecord.entityObject as MJActionResultCodeEntity;\n \n // Ensure ActionID is set for new result codes\n if (!resultCode.ActionID) {\n resultCode.ActionID = this.record.ID;\n }\n \n resultCode.TransactionGroup = transactionGroup;\n \n if (pendingRecord.action === 'save') {\n const saved = await resultCode.Save();\n if (!saved) {\n console.error('Failed to save result code:', resultCode.ResultCode);\n return false;\n }\n } else if (pendingRecord.action === 'delete') {\n const deleted = await resultCode.Delete();\n if (!deleted) {\n console.error('Failed to delete result code:', resultCode.ResultCode);\n return false;\n }\n }\n }\n }\n \n // Submit the transaction\n const success = await transactionGroup.Submit();\n \n if (success) {\n // Clear pending records after successful save\n this.PendingRecords.length = 0;\n this.paramsToDelete = [];\n this.resultCodesToDelete = [];\n \n // Reload params and result codes to get updated data\n await Promise.all([\n this.loadActionParams(),\n this.loadResultCodes()\n ]);\n \n // Show success message\n this.sharedService.CreateSimpleNotification('Action and related records saved successfully', 'success', 3000);\n }\n \n return success;\n \n } catch (error) {\n console.error('Error saving Action and parameters:', error);\n this.sharedService.CreateSimpleNotification('Error saving Action: ' + error, 'error', 5000);\n return false;\n }\n }\n\n private async loadCategory() {\n if (!this.record.CategoryID) return;\n \n try {\n const md = new Metadata();\n this.category = await md.GetEntityObject<MJActionCategoryEntity>('MJ: Action Categories');\n if (this.category) {\n await this.category.Load(this.record.CategoryID);\n }\n } catch (error) {\n // Error loading category\n }\n }\n\n private async loadActionParams() {\n this.isLoadingParams = true;\n try {\n const rv = new RunView();\n const result = await rv.RunView<MJActionParamEntity>({\n EntityName: 'MJ: Action Params',\n ExtraFilter: `ActionID='${this.record.ID}'`,\n OrderBy: 'Name',\n ResultType: 'entity_object' // This ensures we get proper entity instances\n });\n \n if (result.Success) {\n this.actionParams = result.Results || [];\n // Update cached filtered params - trim and lowercase Type values to handle any whitespace and case\n this._inputParams = this.actionParams.filter(p => {\n const type = p.Type?.trim().toLowerCase();\n return type === 'input' || type === 'both';\n });\n this._outputParams = this.actionParams.filter(p => {\n const type = p.Type?.trim().toLowerCase();\n return type === 'output' || type === 'both';\n });\n } else {\n // Failed to load action params\n this.actionParams = [];\n this._inputParams = [];\n this._outputParams = [];\n }\n } catch (error) {\n // Error loading action params\n this.actionParams = [];\n this._inputParams = [];\n this._outputParams = [];\n } finally {\n this.isLoadingParams = false;\n }\n }\n\n private async loadResultCodes() {\n this.isLoadingResultCodes = true;\n try {\n const rv = new RunView();\n const result = await rv.RunView<MJActionResultCodeEntity>({\n EntityName: 'MJ: Action Result Codes',\n ExtraFilter: `ActionID='${this.record.ID}'`,\n OrderBy: 'IsSuccess DESC, ResultCode',\n ResultType: 'entity_object' // This ensures we get proper entity instances\n });\n \n if (result.Success) {\n this.resultCodes = result.Results || [];\n } else {\n // Failed to load result codes\n this.resultCodes = [];\n }\n } catch (error) {\n // Error loading result codes\n this.resultCodes = [];\n } finally {\n this.isLoadingResultCodes = false;\n }\n }\n\n private async loadRecentExecutions() {\n this.isLoadingExecutions = true;\n try {\n const rv = new RunView();\n const result = await rv.RunView<MJActionExecutionLogEntity>({\n EntityName: 'MJ: Action Execution Logs',\n ExtraFilter: `ActionID='${this.record.ID}'`,\n OrderBy: 'StartedAt DESC',\n MaxRows: 10 \n });\n \n if (result.Success) {\n this.recentExecutions = result.Results || [];\n } else {\n // Failed to load executions\n this.recentExecutions = [];\n }\n } catch (error) {\n // Error loading executions\n this.recentExecutions = [];\n } finally {\n this.isLoadingExecutions = false;\n }\n }\n\n private async loadActionLibraries() {\n this.isLoadingLibraries = true;\n try {\n const rv = new RunView();\n const result = await rv.RunView<MJActionLibraryEntity>({\n EntityName: 'MJ: Action Libraries',\n ExtraFilter: `ActionID='${this.record.ID}'`,\n OrderBy: 'Library' \n });\n \n if (result.Success) {\n this.actionLibraries = result.Results || [];\n \n // Load library details\n if (this.actionLibraries.length > 0) {\n const libraryIds = this.actionLibraries.map(al => al.LibraryID).filter(id => id);\n const md = new Metadata();\n this.libraries = [];\n \n for (const libId of libraryIds) {\n const lib = await md.GetEntityObject<MJLibraryEntity>('MJ: Libraries');\n if (lib && libId) {\n await lib.Load(libId);\n this.libraries.push(lib);\n }\n }\n }\n }\n } catch (error) {\n // Error loading libraries\n } finally {\n this.isLoadingLibraries = false;\n }\n }\n\n private async loadExecutionStats() {\n try {\n const rv = new RunView();\n // Load ALL executions for accurate statistics\n const result = await rv.RunView<MJActionExecutionLogEntity>({\n EntityName: 'MJ: Action Execution Logs',\n ExtraFilter: `ActionID='${this.record.ID}'`,\n OrderBy: 'StartedAt DESC' \n });\n \n if (result.Success && result.Results && result.Results.length > 0) {\n const allExecutions = result.Results;\n this.executionStats.totalRuns = allExecutions.length;\n \n // Calculate success rate based on result codes\n const successfulRuns = allExecutions.filter(e => {\n const resultCode = this.resultCodes.find(rc => rc.ResultCode === e.ResultCode);\n return resultCode?.IsSuccess || false;\n });\n \n this.executionStats.successRate = this.executionStats.totalRuns > 0 \n ? (successfulRuns.length / this.executionStats.totalRuns) * 100 \n : 0;\n \n // Calculate average duration from ALL completed executions\n const completedExecutions = allExecutions.filter(e => e.StartedAt && e.EndedAt);\n if (completedExecutions.length > 0) {\n const totalDuration = completedExecutions.reduce((sum, e) => {\n const duration = new Date(e.EndedAt!).getTime() - new Date(e.StartedAt).getTime();\n // Use absolute value to handle any swapped dates\n return sum + Math.abs(duration);\n }, 0);\n this.executionStats.avgDuration = totalDuration / completedExecutions.length;\n }\n \n // Get last run date from most recent execution\n this.executionStats.lastRun = new Date(allExecutions[0].StartedAt);\n }\n } catch (error) {\n // Error loading execution stats\n }\n }\n\n // UI Helper Methods\n getStatusColor(): string {\n switch (this.record.Status) {\n case 'Active': return '#28a745';\n case 'Pending': return '#ffc107';\n case 'Disabled': return '#dc3545';\n default: return '#6c757d';\n }\n }\n\n getStatusIcon(): string {\n switch (this.record.Status) {\n case 'Active': return 'fa-check-circle';\n case 'Pending': return 'fa-clock';\n case 'Disabled': return 'fa-ban';\n default: return 'fa-question-circle';\n }\n }\n\n getTypeColor(): string {\n return this.record.Type === 'Generated' ? '#6f42c1' : '#007bff';\n }\n\n getTypeIcon(): string {\n return this.record.Type === 'Generated' ? 'fa-robot' : 'fa-code';\n }\n\n getApprovalStatusColor(): string {\n switch (this.record.CodeApprovalStatus) {\n case 'Approved': return '#28a745';\n case 'Pending': return '#ffc107';\n case 'Rejected': return '#dc3545';\n default: return '#6c757d';\n }\n }\n\n getApprovalStatusIcon(): string {\n switch (this.record.CodeApprovalStatus) {\n case 'Approved': return 'fa-check-circle';\n case 'Pending': return 'fa-clock';\n case 'Rejected': return 'fa-times-circle';\n default: return 'fa-question-circle';\n }\n }\n\n getParamTypeIcon(type: string): string {\n switch (type) {\n case 'Input': return 'fa-sign-in-alt';\n case 'Output': return 'fa-sign-out-alt';\n case 'Both': return 'fa-exchange-alt';\n default: return 'fa-question';\n }\n }\n\n getParamTypeColor(type: string): string {\n switch (type) {\n case 'Input': return '#007bff';\n case 'Output': return '#28a745';\n case 'Both': return '#6f42c1';\n default: return '#6c757d';\n }\n }\n\n formatDuration(ms: number): string {\n if (ms < 1000) return `${ms}ms`;\n if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`;\n return `${(ms / 60000).toFixed(1)}m`;\n }\n\n formatDate(date: Date | string | null): string {\n if (!date) return 'Never';\n const d = typeof date === 'string' ? new Date(date) : date;\n const now = new Date();\n const diff = now.getTime() - d.getTime();\n \n if (diff < 60000) return 'Just now';\n if (diff < 3600000) return `${Math.floor(diff / 60000)}m ago`;\n if (diff < 86400000) return `${Math.floor(diff / 3600000)}h ago`;\n if (diff < 604800000) return `${Math.floor(diff / 86400000)}d ago`;\n \n return d.toLocaleDateString();\n }\n\n // Navigation\n navigateToEntity(entityName: string, recordId: string | null) {\n if (!recordId) return;\n SharedService.Instance.OpenEntityRecord(entityName, CompositeKey.FromID(recordId));\n }\n\n navigateToCategory() {\n if (this.record.CategoryID) {\n this.navigateToEntity('MJ: Action Categories', this.record.CategoryID);\n }\n }\n\n navigateToExecution(executionId: string) {\n this.navigateToEntity('MJ: Action Execution Logs', executionId);\n }\n\n navigateToLibrary(libraryId: string) {\n this.navigateToEntity('MJ: Libraries', libraryId);\n }\n\n // Actions\n openTestHarness() {\n if (!this.record || !this.record.ID || !this.record.IsSaved || this.record.Status !== 'Active') {\n // Cannot open test harness: Action must be saved and active\n return;\n }\n \n this.showTestHarness = true;\n }\n \n /**\n * Event handler for test harness visibility changes\n */\n public onTestHarnessVisibilityChanged(isVisible: boolean) {\n this.showTestHarness = isVisible;\n }\n\n async regenerateCode() {\n if (!this.EditMode) return;\n \n this.record.ForceCodeGeneration = true;\n await this.record.Save();\n // Reload related data after save\n await this.loadResultCodes();\n }\n\n toggleCodeComments() {\n this.showCodeComments = !this.showCodeComments;\n }\n\n async approveCode() {\n if (!this.EditMode) return;\n \n this.record.CodeApprovalStatus = 'Approved';\n this.record.CodeApprovedAt = new Date();\n // Note: CodeApprovedByUserID would be set server-side\n await this.record.Save();\n }\n\n async rejectCode() {\n if (!this.EditMode) return;\n\n this.record.CodeApprovalStatus = 'Rejected';\n await this.record.Save();\n }\n\n async copyToClipboard(text: string) {\n try {\n await navigator.clipboard.writeText(text);\n // Could add a notification here\n } catch (err) {\n // Failed to copy\n }\n }\n\n // Helper methods for template filtering\n getInputParams(): MJActionParamEntity[] {\n // Sort by IsRequired (required first) then by Name\n return this._inputParams.sort((a, b) => {\n if (a.IsRequired === b.IsRequired) {\n return (a.Name || '').localeCompare(b.Name || '');\n }\n return a.IsRequired ? -1 : 1;\n });\n }\n\n getOutputParams(): MJActionParamEntity[] {\n // Sort by Name\n return this._outputParams.sort((a, b) => (a.Name || '').localeCompare(b.Name || ''));\n }\n\n isExecutionSuccess(execution: MJActionExecutionLogEntity): boolean {\n const code = execution.ResultCode?.toLowerCase();\n // First check if we have a result code definition\n const resultCode = this.resultCodes.find(rc => rc.ResultCode === execution.ResultCode);\n if (resultCode) {\n return resultCode.IsSuccess;\n }\n // Fallback to common success patterns if no result code defined\n return code === 'success' || code === 'ok' || code === 'completed' || code === '200';\n }\n\n getExecutionDuration(execution: MJActionExecutionLogEntity): number {\n if (!execution.EndedAt) return 0;\n \n const startTime = new Date(execution.StartedAt).getTime();\n const endTime = new Date(execution.EndedAt).getTime();\n const duration = endTime - startTime;\n \n // Return absolute value to handle timezone mismatches\n return Math.abs(duration);\n }\n\n getSuccessRateColor(): string {\n const rate = this.executionStats.successRate;\n if (rate >= 80) return '#28a745'; // green\n if (rate >= 60) return '#ffc107'; // yellow\n return '#dc3545'; // red\n }\n\n // Parameter management methods\n async addParameter(type: 'Input' | 'Output' | 'Both') {\n if (!this.EditMode || !this.record.IsSaved) return;\n \n const md = new Metadata();\n const newParam = await md.GetEntityObject<MJActionParamEntity>('MJ: Action Params');\n \n // Set default values\n newParam.ActionID = this.record.ID;\n newParam.Name = '';\n newParam.Type = type;\n newParam.ValueType = 'Scalar';\n newParam.IsRequired = false;\n newParam.IsArray = false;\n \n const dialogRef = this.dialogService.open({\n content: ActionParamDialogComponent,\n width: 500,\n appendTo: this.viewContainerRef\n });\n \n const dialog = dialogRef.content.instance;\n dialog.param = newParam;\n dialog.isNew = true;\n dialog.editMode = true;\n \n dialogRef.result.subscribe(result => {\n if (result && (result as any).save) {\n // The dialog has already modified the newParam entity directly\n // New entities are automatically dirty (IsSaved = false)\n \n // Add to local array\n this.actionParams.push(newParam);\n \n // Add to pending records for saving\n this.PendingRecords.push({\n entityObject: newParam,\n action: 'save'\n });\n \n // Update the filtered arrays\n this.updateParamArrays();\n this.cdr.detectChanges();\n }\n });\n }\n\n async editParameter(param: MJActionParamEntity) {\n const dialogRef = this.dialogService.open({\n content: ActionParamDialogComponent,\n width: 500,\n appendTo: this.viewContainerRef\n });\n \n const dialog = dialogRef.content.instance;\n dialog.param = param;\n dialog.isNew = false;\n dialog.editMode = this.EditMode;\n \n dialogRef.result.subscribe(result => {\n if (result && (result as any).save && this.EditMode) {\n // Param will be dirty from property changes in dialog\n // Ensure it's in pending records if modified\n if (param.Dirty) {\n const exists = this.PendingRecords.some(pr => \n pr.entityObject === param && pr.action === 'save'\n );\n if (!exists) {\n this.PendingRecords.push({\n entityObject: param,\n action: 'save'\n });\n }\n }\n \n // Update the local arrays\n this.updateParamArrays();\n this.cdr.detectChanges();\n }\n });\n }\n \n onParamClick(param: MJActionParamEntity, event: Event) {\n // Prevent event bubbling if clicking on edit/delete buttons\n const target = event.target as HTMLElement;\n if (target.closest('.param-edit-btn') || target.closest('.param-delete-btn')) {\n return;\n }\n \n // Show the parameter dialog\n this.editParameter(param);\n }\n\n \n private async updateParamArrays() {\n // Update cached filtered params - exclude deleted items\n const activeParams = this.actionParams.filter(p => !this.paramsToDelete || !this.paramsToDelete.includes(p));\n \n this._inputParams = activeParams.filter(p => {\n const type = p.Type?.trim().toLowerCase();\n return type === 'input' || type === 'both';\n });\n \n this._outputParams = activeParams.filter(p => {\n const type = p.Type?.trim().toLowerCase();\n return type === 'output' || type === 'both';\n });\n }\n \n // Override to populate pending records with our action params and result codes\n protected PopulatePendingRecords() {\n // Preserve existing pending records before base class clears them\n const currentPendingRecords = [...this.PendingRecords];\n \n // Call parent to handle child components\n super.PopulatePendingRecords();\n \n // Re-add our preserved records\n for (const record of currentPendingRecords) {\n // Only re-add if it's an Action Param or Result Code (avoid duplicates)\n if (record.entityObject.EntityInfo.Name === 'MJ: Action Params' || \n record.entityObject.EntityInfo.Name === 'MJ: Action Result Codes') {\n const exists = this.PendingRecords.some(pr => \n pr.entityObject === record.entityObject\n );\n if (!exists) {\n this.PendingRecords.push(record);\n }\n }\n }\n \n // Add action params that need saving\n for (const param of this.actionParams) {\n if (!param.IsSaved || param.Dirty) {\n // Check if not already in pending records\n const exists = this.PendingRecords.some(pr => \n pr.entityObject === param\n );\n if (!exists) {\n this.PendingRecords.push({\n entityObject: param,\n action: 'save'\n });\n }\n }\n }\n \n // Add params marked for deletion\n for (const param of this.paramsToDelete) {\n if (param.IsSaved) {\n // Check if not already in pending records\n const exists = this.PendingRecords.some(pr => \n pr.entityObject === param\n );\n if (!exists) {\n this.PendingRecords.push({\n entityObject: param,\n action: 'delete'\n });\n }\n }\n }\n \n // Add result codes that need saving\n for (const resultCode of this.resultCodes) {\n if (!resultCode.IsSaved || resultCode.Dirty) {\n // Check if not already in pending records\n const exists = this.PendingRecords.some(pr => \n pr.entityObject === resultCode\n );\n if (!exists) {\n this.PendingRecords.push({\n entityObject: resultCode,\n action: 'save'\n });\n }\n }\n }\n \n // Add result codes marked for deletion\n for (const resultCode of this.resultCodesToDelete) {\n if (resultCode.IsSaved) {\n // Check if not already in pending records\n const exists = this.PendingRecords.some(pr => \n pr.entityObject === resultCode\n );\n if (!exists) {\n this.PendingRecords.push({\n entityObject: resultCode,\n action: 'delete'\n });\n }\n }\n }\n }\n \n /**\n * Gets the action's display icon\n * Falls back to default cog icon if no IconClass is set\n */\n public getActionIcon(): string {\n return this.record?.IconClass || 'fa-solid fa-cog';\n }\n \n // Result Code management methods\n async addResultCode() {\n if (!this.EditMode || !this.record.IsSaved) return;\n \n const md = new Metadata();\n const newResultCode = await md.GetEntityObject<MJActionResultCodeEntity>('MJ: Action Result Codes');\n \n // Set default values\n newResultCode.ActionID = this.record.ID;\n newResultCode.ResultCode = '';\n newResultCode.Description = '';\n newResultCode.IsSuccess = false;\n \n const dialogRef = this.dialogService.open({\n content: ActionResultCodeDialogComponent,\n width: 500,\n appendTo: this.viewContainerRef\n });\n \n const dialog = dialogRef.content.instance;\n dialog.resultCode = newResultCode;\n dialog.isNew = true;\n dialog.editMode = true;\n \n dialogRef.result.subscribe(result => {\n if (result && (result as any).save) {\n // Add to local array\n this.resultCodes.push(newResultCode);\n \n // Add to pending records for saving\n this.PendingRecords.push({\n entityObject: newResultCode,\n action: 'save'\n });\n \n this.cdr.detectChanges();\n }\n });\n }\n \n async editResultCode(resultCode: MJActionResultCodeEntity) {\n const dialogRef = this.dialogService.open({\n content: ActionResultCodeDialogComponent,\n width: 500,\n appendTo: this.viewContainerRef\n });\n \n const dialog = dialogRef.content.instance;\n dialog.resultCode = resultCode;\n dialog.isNew = false;\n dialog.editMode = this.EditMode;\n \n dialogRef.result.subscribe(result => {\n if (result && (result as any).save && this.EditMode) {\n // Ensure it's in pending records if modified\n if (resultCode.Dirty) {\n const exists = this.PendingRecords.some(pr => \n pr.entityObject === resultCode && pr.action === 'save'\n );\n if (!exists) {\n this.PendingRecords.push({\n entityObject: resultCode,\n action: 'save'\n });\n }\n }\n \n this.cdr.detectChanges();\n }\n });\n }\n \n onResultCodeClick(resultCode: MJActionResultCodeEntity, event: Event) {\n // Prevent event bubbling if clicking on edit/delete buttons\n const target = event.target as HTMLElement;\n if (target.closest('.result-edit-btn') || target.closest('.result-delete-btn')) {\n return;\n }\n \n // Show the result code dialog\n this.editResultCode(resultCode);\n }\n \n /**\n * Delete a result code (marks for deletion on save)\n */\n deleteResultCode(resultCode: MJActionResultCodeEntity) {\n if (!this.EditMode) return;\n \n // Remove from main array\n const index = this.resultCodes.indexOf(resultCode);\n if (index > -1) {\n this.resultCodes.splice(index, 1);\n }\n \n // Handle pending records\n if (resultCode.IsSaved) {\n // Add to deletion list for saved result codes\n this.resultCodesToDelete.push(resultCode);\n \n // Add to pending records for deletion\n this.PendingRecords.push({\n entityObject: resultCode,\n action: 'delete'\n });\n } else {\n // For unsaved result codes, just remove from pending records\n const pendingIndex = this.PendingRecords.findIndex(pr => \n pr.entityObject === resultCode && pr.action === 'save'\n );\n if (pendingIndex >= 0) {\n this.PendingRecords.splice(pendingIndex, 1);\n }\n }\n \n this.cdr.detectChanges();\n }\n \n /**\n * Delete a parameter (marks for deletion on save)\n */\n deleteParameter(param: MJActionParamEntity) {\n if (!this.EditMode) return;\n \n // Remove from main array\n const index = this.actionParams.indexOf(param);\n if (index > -1) {\n this.actionParams.splice(index, 1);\n }\n \n // Handle pending records\n if (param.IsSaved) {\n // Add to deletion list for saved params\n this.paramsToDelete.push(param);\n \n // Add to pending records for deletion\n this.PendingRecords.push({\n entityObject: param,\n action: 'delete'\n });\n } else {\n // For unsaved params, just remove from pending records\n const pendingIndex = this.PendingRecords.findIndex(pr => \n pr.entityObject === param && pr.action === 'save'\n );\n if (pendingIndex >= 0) {\n this.PendingRecords.splice(pendingIndex, 1);\n }\n }\n \n // Update filtered arrays\n this.updateParamArrays();\n this.cdr.detectChanges();\n }\n}\n","<div class=\"record-form-container\">\n @if (record) {\n <form class=\"record-form\" #form=\"ngForm\">\n <mj-form-toolbar [Form]=\"this\"></mj-form-toolbar>\n\n <!-- Main Content Area -->\n <div class=\"action-main-area\" style=\"display: flex; flex-direction: column; height: 100%; overflow-y: auto;\">\n \n <!-- Header Section -->\n <div class=\"action-header\" style=\"flex-shrink: 0; padding: 20px; background: #f8f9fa; border-bottom: 2px solid #e9ecef;\">\n <div style=\"display: flex; justify-content: space-between; align-items: flex-start; gap: 20px;\">\n \n <!-- Left: Action Info -->\n <div style=\"flex: 1; min-width: 0;\">\n <div style=\"display: flex; align-items: center; gap: 12px; margin-bottom: 8px;\">\n <i [class]=\"getActionIcon()\" [style.color]=\"getTypeColor()\" style=\"font-size: 1.4em;\"></i>\n @if (EditMode) {\n <kendo-textbox [(ngModel)]=\"record.Name\" \n name=\"actionName\"\n placeholder=\"Enter action name...\"\n style=\"font-size: 1.2em; font-weight: 600; min-width: 300px; flex: 1;\">\n </kendo-textbox>\n } @else {\n <h4 style=\"margin: 0; color: #495057; font-weight: 600; flex: 1;\">{{ record.Name || 'Untitled Action' }}</h4>\n <span class=\"status-badge\" [style.background-color]=\"getStatusColor()\" \n style=\"color: white; padding: 4px 10px; border-radius: 12px; font-size: 0.75em; font-weight: 500;\">\n {{ record.Status }}\n </span>\n }\n </div>\n \n <!-- Status and Type Editors when in edit mode -->\n @if (EditMode) {\n <div style=\"display: flex; gap: 16px; margin-bottom: 12px; flex-wrap: wrap;\">\n <div>\n <label style=\"display: block; margin-bottom: 4px; font-weight: 600; color: #495057; font-size: 0.9em;\">Status</label>\n <kendo-dropdownlist [(ngModel)]=\"record.Status\"\n name=\"actionStatus\"\n [data]=\"[{text: 'Active', value: 'Active'}, {text: 'Pending', value: 'Pending'}, {text: 'Disabled', value: 'Disabled'}]\"\n textField=\"text\"\n valueField=\"value\"\n [valuePrimitive]=\"true\"\n style=\"width: 150px;\">\n </kendo-dropdownlist>\n </div>\n <div>\n <label style=\"display: block; margin-bottom: 4px; font-weight: 600; color: #495057; font-size: 0.9em;\">\n Type <span style=\"color: #dc3545;\">*</span>\n </label>\n <kendo-dropdownlist [(ngModel)]=\"record.Type\"\n name=\"actionType\"\n [data]=\"[{text: 'Generated', value: 'Generated'}, {text: 'Custom', value: 'Custom'}]\"\n textField=\"text\"\n valueField=\"value\"\n [valuePrimitive]=\"true\"\n style=\"width: 150px;\">\n </kendo-dropdownlist>\n </div>\n <div>\n <label style=\"display: block; margin-bottom: 4px; font-weight: 600; color: #495057; font-size: 0.9em;\">\n Category <span style=\"color: #dc3545;\">*</span>\n </label>\n <kendo-dropdownlist [(ngModel)]=\"record.CategoryID\"\n name=\"categoryID\"\n [data]=\"[]\"\n placeholder=\"Select category...\"\n style=\"width: 200px;\">\n </kendo-dropdownlist>\n </div>\n </div>\n }\n \n @if (EditMode) {\n <kendo-textarea [(ngModel)]=\"record.Description\" \n name=\"actionDescription\"\n [rows]=\"2\"\n placeholder=\"Enter action description...\"\n style=\"width: 100%; max-width: 600px; margin-bottom: 12px;\">\n </kendo-textarea>\n } @else if (record.Description) {\n <p style=\"margin: 0 0 12px 0; color: #6c757d; font-size: 0.9em; line-height: 1.4;\">{{ record.Description }}</p>\n }\n \n <!-- Quick Config Row -->\n <div class=\"quick-config\" style=\"display: flex; align-items: center; gap: 16px; flex-wrap: wrap;\">\n @if (category) {\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-folder\" style=\"color: #6c757d;\"></i>\n <span style=\"color: #6c757d;\">Category:</span>\n <span style=\"color: #495057; font-weight: 500; cursor: pointer;\" (click)=\"navigateToCategory()\">\n {{ category.Name }}\n <i class=\"fa-solid fa-external-link\" style=\"font-size: 0.75em; margin-left: 4px;\"></i>\n </span>\n </div>\n }\n \n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-cube\" style=\"color: #6c757d;\"></i>\n <span style=\"color: #6c757d;\">Type:</span>\n <span style=\"color: #495057; font-weight: 500;\">{{ record.Type }}</span>\n </div>\n \n @if (record.Type === 'Generated' && record.CodeApprovalStatus) {\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i [class]=\"'fa-solid ' + getApprovalStatusIcon()\" [style.color]=\"getApprovalStatusColor()\"></i>\n <span style=\"color: #6c757d;\">Code:</span>\n <span [style.color]=\"getApprovalStatusColor()\" style=\"font-weight: 500;\">{{ record.CodeApprovalStatus }}</span>\n </div>\n }\n \n @if (actionParams.length > 0) {\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-sliders\" style=\"color: #6c757d;\"></i>\n <span style=\"color: #495057; font-weight: 500;\">{{ actionParams.length }} Parameters</span>\n </div>\n }\n </div>\n </div>\n \n <!-- Right: Action Buttons -->\n <div class=\"action-buttons\" style=\"display: flex; flex-direction: column; gap: 8px; align-items: flex-end;\">\n <div style=\"display: flex; gap: 8px;\">\n @if (record.ID) {\n <button kendoButton themeColor=\"primary\" size=\"large\"\n (click)=\"openTestHarness()\"\n title=\"Open Run Harness\"\n [disabled]=\"record.Status !== 'Active'\">\n <i class=\"fa-solid fa-play\"></i> Run\n </button>\n }\n @if (EditMode && record.Type === 'Generated') {\n <button kendoButton themeColor=\"info\" size=\"medium\"\n (click)=\"regenerateCode()\"\n title=\"Regenerate Code\">\n <i class=\"fa-solid fa-robot\"></i> Regenerate\n </button>\n }\n </div>\n \n @if (EditMode && record.CodeApprovalStatus === 'Pending' && record.Type === 'Generated') {\n <div style=\"display: flex; gap: 8px;\">\n <button kendoButton themeColor=\"success\" size=\"small\"\n (click)=\"approveCode()\">\n <i class=\"fa-solid fa-check\"></i> Approve\n </button>\n <button kendoButton themeColor=\"error\" size=\"small\"\n (click)=\"rejectCode()\">\n <i class=\"fa-solid fa-times\"></i> Reject\n </button>\n </div>\n }\n \n @if (!EditMode && record.Status !== 'Active' && record.ID) {\n <div style=\"font-size: 0.75em; color: #dc3545; text-align: right;\">\n Action must be Active to execute\n </div>\n }\n </div>\n </div>\n </div>\n\n <!-- Configuration Sections with Expansion Panels -->\n <div class=\"configuration-sections\" style=\"flex: 1; background: white; border-top: 2px solid #e9ecef; padding: 16px; min-height: 0;\">\n \n <!-- Parameters Section (FIRST) -->\n <kendo-expansionpanel \n [expanded]=\"true\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-sliders\" style=\"color: #6c757d;\"></i>\n Parameters\n @if (actionParams.length > 0) {\n <span style=\"background: #17a2b8; color: white; padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n {{ actionParams.length }}\n </span>\n }\n </span>\n </ng-template>\n \n <div style=\"padding: 16px;\">\n @if (isLoadingParams) {\n <div class=\"loading-state\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Loading parameters...\n </div>\n } @else if (actionParams.length === 0) {\n <div class=\"empty-state\" style=\"padding: 30px; text-align: center;\">\n <i class=\"fa-solid fa-sliders\" style=\"font-size: 2em; color: #6c757d; opacity: 0.3;\"></i>\n <p style=\"margin: 12px 0 0 0; color: #6c757d;\">No parameters defined</p>\n @if (EditMode && record.IsSaved) {\n <p style=\"margin: 8px 0 0 0; font-size: 0.85em; color: #6c757d;\">Add parameters to define inputs and outputs for this action</p>\n }\n </div>\n } @else {\n <!-- Input Parameters Grid -->\n <div class=\"params-section\">\n <div class=\"params-header\">\n <h3><i class=\"fa-solid fa-sign-in-alt\"></i> Input Parameters</h3>\n @if (EditMode && record.IsSaved) {\n <button kendoButton fillMode=\"flat\" size=\"small\" (click)=\"addParameter('Input')\">\n <i class=\"fa-solid fa-plus\"></i> Add Input\n </button>\n }\n </div>\n \n @if (getInputParams().length === 0) {\n <div class=\"empty-state\" style=\"padding: 30px; text-align: center;\">\n <i class=\"fa-solid fa-inbox\" style=\"font-size: 2em; color: #6c757d; opacity: 0.3;\"></i>\n <p style=\"margin: 12px 0 0 0; color: #6c757d;\">No input parameters defined</p>\n </div>\n } @else {\n <div class=\"params-grid\">\n @for (param of getInputParams(); track param.ID) {\n <div class=\"param-card\" [class.required]=\"param.IsRequired\" \n [class.clickable]=\"true\"\n (click)=\"onParamClick(param, $event)\">\n <div class=\"param-header\">\n <span class=\"param-name\">{{ param.Name }}</span>\n <div class=\"param-badges\">\n @if (param.IsRequired) {\n <span class=\"required-badge\">Required</span>\n }\n @if (param.IsArray) {\n <span class=\"array-badge\">Array</span>\n }\n @if (EditMode) {\n <button class=\"param-edit-btn\" (click)=\"editParameter(param)\" title=\"Edit parameter\">\n <i class=\"fa-solid fa-edit\"></i>\n </button>\n <button class=\"param-delete-btn\" (click)=\"deleteParameter(param)\" title=\"Delete parameter\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n }\n </div>\n </div>\n <div class=\"param-details\">\n <div class=\"param-type\">{{ param.ValueType }}</div>\n @if (param.Description) {\n <div class=\"param-description\">{{ param.Description }}</div>\n }\n @if (param.DefaultValue) {\n <div class=\"param-default\">\n <span class=\"default-label\">Default:</span>\n <code>{{ param.DefaultValue }}</code>\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Output Parameters Grid -->\n <div class=\"params-section\" style=\"margin-top: 24px;\" \n [class.params-section-compact]=\"getOutputParams().length === 0\">\n <div class=\"params-header\">\n <h3><i class=\"fa-solid fa-sign-out-alt\"></i> Output Parameters</h3>\n @if (EditMode && record.IsSaved) {\n <button kendoButton fillMode=\"flat\" size=\"small\" (click)=\"addParameter('Output')\">\n <i class=\"fa-solid fa-plus\"></i> Add Output\n </button>\n }\n </div>\n \n @if (getOutputParams().length === 0) {\n <div class=\"empty-state\" style=\"padding: 20px; text-align: center;\">\n <i class=\"fa-solid fa-inbox\" style=\"font-size: 2em; color: #6c757d; opacity: 0.3;\"></i>\n <p style=\"margin: 12px 0 0 0; color: #6c757d;\">No output parameters defined</p>\n </div>\n } @else {\n <div class=\"params-grid\">\n @for (param of getOutputParams(); track param.ID) {\n <div class=\"param-card\"\n [class.clickable]=\"true\"\n (click)=\"onParamClick(param, $event)\">\n <div class=\"param-header\">\n <span class=\"param-name\">{{ param.Name }}</span>\n <div class=\"param-badges\">\n @if (param.IsArray) {\n <span class=\"array-badge\">Array</span>\n }\n @if (EditMode) {\n <button class=\"param-edit-btn\" (click)=\"editParameter(param)\" title=\"Edit parameter\">\n <i class=\"fa-solid fa-edit\"></i>\n </button>\n <button class=\"param-delete-btn\" (click)=\"deleteParameter(param)\" title=\"Delete parameter\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n }\n </div>\n </div>\n <div class=\"param-details\">\n <div class=\"param-type\">{{ param.ValueType }}</div>\n @if (param.Description) {\n <div class=\"param-description\">{{ param.Description }}</div>\n }\n @if (param.DefaultValue) {\n <div class=\"param-default\">\n <span class=\"default-label\">Default:</span>\n <code>{{ param.DefaultValue }}</code>\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n </kendo-expansionpanel>\n\n <!-- Code & Generation Section (Only for Generated type) -->\n @if (record.Type === 'Generated') {\n <kendo-expansionpanel \n [expanded]=\"expandedSections.code\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-code\" style=\"color: #6c757d;\"></i>\n Code & Generation\n @if (record.CodeLocked) {\n <span style=\"background: #ffc107; color: #856404; padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n <i class=\"fa-solid fa-lock\"></i> Locked\n </span>\n }\n </span>\n </ng-template>\n \n <div style=\"padding: 16px;\">\n @if (EditMode) {\n <div class=\"generation-panel\">\n <h3><i class=\"fa-solid fa-robot\"></i> AI Generation</h3>\n <div class=\"prompt-section\">\n <label>User Prompt</label>\n <kendo-textarea [(ngModel)]=\"record.UserPrompt\"\n name=\"userPrompt\"\n [rows]=\"8\"\n placeholder=\"Describe what this action should do...\"\n style=\"width: 100%; min-height: 120px;\">\n </kendo-textarea>\n </div>\n <div class=\"comments-section\">\n <label>Internal Comments (not sent to AI)</label>\n <kendo-textarea [(ngModel)]=\"record.UserComments\"\n name=\"userComments\"\n [rows]=\"2\"\n placeholder=\"Internal notes...\"\n style=\"width: 100%;\">\n </kendo-textarea>\n </div>\n <div class=\"generation-controls\">\n <kendo-switch [(ngModel)]=\"record.CodeLocked\"\n name=\"codeLocked\">\n </kendo-switch>\n <label style=\"margin-left: 8px;\">Lock Code (prevent regeneration)</label>\n </div>\n </div>\n }\n \n <div class=\"code-editor-section\">\n <div class=\"code-toolbar\">\n <h3><i class=\"fa-solid fa-file-code\"></i> Action Code</h3>\n <div class=\"code-actions\">\n @if (record.CodeComments) {\n <button kendoButton fillMode=\"flat\" size=\"small\" (click)=\"toggleCodeComments()\">\n <i class=\"fa-solid fa-comment\"></i> \n {{ showCodeComments ? 'Hide' : 'Show' }} AI Comments\n </button>\n }\n <button kendoButton fillMode=\"flat\" size=\"small\" (click)=\"copyToClipboard(record.Code || '')\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n </div>\n </div>\n <mj-code-editor \n [(ngModel)]=\"record.Code\"\n name=\"actionCode\"\n [readonly]=\"!EditMode || record.CodeLocked\"\n [language]=\"codeLanguage\"\n [lineWrapping]=\"true\"\n style=\"height: 400px; width: 100%;\">\n </mj-code-editor>\n \n @if (showCodeComments && record.CodeComments) {\n <div class=\"code-comments\">\n <h4><i class=\"fa-solid fa-robot\"></i> AI Explanation</h4>\n <p>{{ record.CodeComments }}</p>\n </div>\n }\n \n @if (EditMode && record.CodeApprovalStatus === 'Rejected') {\n <div class=\"approval-comments\">\n <label>Rejection Comments</label>\n <kendo-textarea [(ngModel)]=\"record.CodeApprovalComments\"\n name=\"codeApprovalComments\"\n [rows]=\"2\"\n placeholder=\"Explain why the code was rejected...\"\n style=\"width: 100%;\">\n </kendo-textarea>\n </div>\n }\n </div>\n </div>\n </kendo-expansionpanel>\n }\n\n <!-- Result Codes Section -->\n <kendo-expansionpanel \n [expanded]=\"expandedSections.resultCodes\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-flag-checkered\" style=\"color: #6c757d;\"></i>\n Result Codes\n @if (resultCodes.length > 0) {\n <span style=\"background: #28a745; color: white; padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n {{ resultCodes.length }}\n </span>\n }\n </span>\n </ng-template>\n \n <div style=\"padding: 16px;\">\n <!-- Add Result Code Button -->\n @if (EditMode && record.IsSaved) {\n <div style=\"display: flex; justify-content: flex-end; margin-bottom: 12px;\">\n <button kendoButton [primary]=\"true\" size=\"small\" (click)=\"addResultCode()\">\n <i class=\"fa-solid fa-plus\"></i> Add Result Code\n </button>\n </div>\n }\n \n @if (isLoadingResultCodes) {\n <div class=\"loading-state\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Loading result codes...\n </div>\n } @else if (resultCodes.length === 0) {\n <div class=\"empty-state\" style=\"padding: 30px; text-align: center;\">\n <i class=\"fa-solid fa-flag-checkered\" style=\"font-size: 2em; color: #6c757d; opacity: 0.3;\"></i>\n <p style=\"margin: 12px 0 0 0; color: #6c757d;\">No result codes defined</p>\n @if (EditMode && record.IsSaved) {\n <p style=\"margin: 8px 0 0 0; font-size: 0.85em; color: #6c757d;\">Add result codes to define possible outcomes</p>\n }\n </div>\n } @else {\n <div class=\"result-codes-grid\">\n @for (code of resultCodes; track code.ID) {\n <div class=\"result-code-card\" \n [class.success]=\"code.IsSuccess\" \n [class.failure]=\"!code.IsSuccess\"\n [class.clickable]=\"true\"\n (click)=\"onResultCodeClick(code, $event)\">\n <div class=\"result-icon\">\n <i [class]=\"code.IsSuccess ? 'fa-solid fa-check-circle' : 'fa-solid fa-times-circle'\"></i>\n </div>\n <div class=\"result-content\">\n <div class=\"result-code\">{{ code.ResultCode }}</div>\n @if (code.Description) {\n <div class=\"result-description\">{{ code.Description }}</div>\n }\n </div>\n @if (EditMode) {\n <div class=\"result-actions\">\n <button class=\"result-edit-btn\" (click)=\"editResultCode(code); $event.stopPropagation()\" title=\"Edit result code\">\n <i class=\"fa-solid fa-edit\"></i>\n </button>\n <button class=\"result-delete-btn\" (click)=\"deleteResultCode(code); $event.stopPropagation()\" title=\"Delete result code\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n </kendo-expansionpanel>\n\n <!-- Execution & Monitoring Section -->\n @if (record.IsSaved) {\n <kendo-expansionpanel \n [expanded]=\"expandedSections.execution\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-chart-line\" style=\"color: #6c757d;\"></i>\n Execution & Monitoring\n </span>\n </ng-template>\n \n <div style=\"padding: 16px;\">\n @if (isLoadingExecutions) {\n <div class=\"loading-state\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Loading executions...\n </div>\n } @else if (recentExecutions.length === 0) {\n <div class=\"empty-state\" style=\"padding: 30px; text-align: center;\">\n <i class=\"fa-solid fa-chart-line\" style=\"font-size: 2em; color: #6c757d; opacity: 0.3;\"></i>\n <p style=\"margin: 12px 0 0 0; color: #6c757d;\">No executions yet</p>\n </div>\n } @else {\n <div class=\"execution-stats-row\">\n <div class=\"stat-box\">\n <i class=\"fa-solid fa-tachometer-alt\"></i>\n <div class=\"stat-info\">\n <div class=\"stat-label\" style=\"color: #212529;\">Avg Duration</div>\n <div class=\"stat-value\" style=\"color: #212529;\">{{ formatDuration(executionStats.avgDuration) }}</div>\n </div>\n </div>\n <div class=\"stat-box\">\n <i class=\"fa-solid fa-check-circle\" [style.color]=\"getSuccessRateColor()\"></i>\n <div class=\"stat-info\">\n <div class=\"stat-label\" style=\"color: #212529;\">Success Rate</div>\n <div class=\"stat-value\" [style.color]=\"getSuccessRateColor()\" style=\"font-weight: 600;\">{{ executionStats.successRate.toFixed(0) }}%</div>\n </div>\n </div>\n <div class=\"stat-box\">\n <i class=\"fa-solid fa-play-circle\"></i>\n <div class=\"stat-info\">\n <div class=\"stat-label\" style=\"color: #212529;\">Total Runs</div>\n <div class=\"stat-value\" style=\"color: #212529;\">{{ executionStats.totalRuns }}</div>\n </div>\n </div>\n </div>\n\n <h3 style=\"margin-top: 24px;\"><i class=\"fa-solid fa-history\"></i> Recent Executions</h3>\n <div class=\"executions-table\">\n <table>\n <thead>\n <tr>\n <th>Started</th>\n <th>Duration</th>\n <th>User</th>\n <th>Result</th>\n <th>Actions</th>\n </tr>\n </thead>\n <tbody>\n @for (execution of recentExecutions; track execution.ID) {\n <tr class=\"execution-row\" [class.success]=\"isExecutionSuccess(execution)\">\n <td>{{ execution.StartedAt | date:'short' }}</td>\n <td>\n @if (execution.EndedAt) {\n {{ formatDuration(getExecutionDuration(execution)) }}\n } @else {\n <span class=\"running\">Running...</span>\n }\n </td>\n <td>{{ execution.User }}</td>\n <td>\n <span class=\"result-code\" \n [class.success]=\"isExecutionSuccess(execution)\"\n [class.failure]=\"!isExecutionSuccess(execution)\">\n {{ execution.ResultCode }}\n </span>\n </td>\n <td>\n <button kendoButton fillMode=\"flat\" size=\"small\" (click)=\"navigateToExecution(execution.ID)\">\n <i class=\"fa-solid fa-external-link\"></i>\n </button>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n </kendo-expansionpanel>\n }\n\n <!-- Related Configuration Section -->\n @if (record.IsSaved) {\n <kendo-expansionpanel \n [expanded]=\"expandedSections.configuration\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-cogs\" style=\"color: #6c757d;\"></i>\n Related Configuration\n </span>\n </ng-template>\n \n <div style=\"padding: 16px;\">\n <!-- Libraries -->\n <div class=\"config-subsection\">\n <h3><i class=\"fa-solid fa-book\"></i> Libraries</h3>\n @if (isLoadingLibraries) {\n <div class=\"loading-state\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Loading libraries...\n </div>\n } @else if (actionLibraries.length === 0) {\n <div class=\"empty-state mini\">\n <p>No libraries configured</p>\n </div>\n } @else {\n <div class=\"library-cards\">\n @for (lib of libraries; track lib.ID; let i = $index) {\n <div class=\"library-card\" (click)=\"navigateToLibrary(lib.ID)\">\n <i class=\"fa-solid fa-book\"></i>\n <div class=\"library-info\">\n <div class=\"library-name\">{{ lib.Name }}</div>\n @if (actionLibraries[i].ItemsUsed) {\n <div class=\"library-items\">{{ actionLibraries[i].ItemsUsed }}</div>\n }\n </div>\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Other Related Entities -->\n <div class=\"related-entities-grid\">\n <div class=\"related-entity-link\">\n <i class=\"fa-solid fa-shield-alt\"></i>\n <span>Authorizations</span>\n <span class=\"entity-count\">View</span>\n </div>\n <div class=\"related-entity-link\">\n <i class=\"fa-solid fa-layer-group\"></i>\n <span>Contexts</span>\n <span class=\"entity-count\">View</span>\n </div>\n <div class=\"related-entity-link\">\n <i class=\"fa-solid fa-calendar\"></i>\n <span>Scheduled Actions</span>\n <span class=\"entity-count\">View</span>\n </div>\n <div class=\"related-entity-link\">\n <i class=\"fa-solid fa-cube\"></i>\n <span>Entity Actions</span>\n <span class=\"entity-count\">View</span>\n </div>\n </div>\n </div>\n </kendo-expansionpanel>\n }\n </div>\n </div>\n </form>\n }\n</div>\n\n<!-- Action Test Harness Dialog -->\n<mj-action-test-harness-dialog\n [Action]=\"record\"\n [ActionParams]=\"actionParams\"\n [IsOpen]=\"showTestHarness\"\n (Close)=\"onTestHarnessVisibilityChanged(false)\">\n</mj-action-test-harness-dialog>"]}
1
+ {"version":3,"file":"action-form.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/Actions/action-form.component.ts","../../../../src/lib/custom/Actions/action-form.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, inject, ViewContainerRef } from '@angular/core';\nimport { MJActionEntity, MJActionParamEntity, MJActionResultCodeEntity, MJActionCategoryEntity, MJActionExecutionLogEntity, MJActionLibraryEntity, MJLibraryEntity } from '@memberjunction/core-entities';\nimport { RegisterClass } from '@memberjunction/global';\nimport { BaseFormComponent } from '@memberjunction/ng-base-forms';\nimport { SharedService } from '@memberjunction/ng-shared';\nimport { Metadata, RunView, CompositeKey } from '@memberjunction/core';\nimport { MJActionFormComponent } from '../../generated/Entities/MJAction/mjaction.form.component';\nimport { DialogService } from '@progress/kendo-angular-dialog';\nimport { ActionParamDialogComponent, ActionResultCodeDialogComponent } from '@memberjunction/ng-actions';\n\n@RegisterClass(BaseFormComponent, 'MJ: Actions')\n@Component({\n standalone: false,\n selector: 'mj-action-form',\n templateUrl: './action-form.component.html',\n styleUrls: ['./action-form.component.css']\n})\nexport class MJActionFormComponentExtended extends MJActionFormComponent implements OnInit {\n public record!: MJActionEntity;\n \n // Related entities\n public category: MJActionCategoryEntity | null = null;\n public actionParams: MJActionParamEntity[] = [];\n public resultCodes: MJActionResultCodeEntity[] = [];\n public recentExecutions: MJActionExecutionLogEntity[] = [];\n public actionLibraries: MJActionLibraryEntity[] = [];\n public libraries: MJLibraryEntity[] = [];\n \n // Cached filtered params\n private _inputParams: MJActionParamEntity[] = [];\n private _outputParams: MJActionParamEntity[] = [];\n \n // Track params to delete\n private paramsToDelete: MJActionParamEntity[] = [];\n \n // Track result codes to delete\n private resultCodesToDelete: MJActionResultCodeEntity[] = [];\n \n // Loading states\n public isLoadingParams = false;\n public isLoadingResultCodes = false;\n public isLoadingExecutions = false;\n public isLoadingLibraries = false;\n \n // UI state\n public expandedSections = {\n overview: true,\n code: true,\n params: true,\n resultCodes: true,\n execution: false,\n configuration: false\n };\n \n // Test harness state\n public showTestHarness = false;\n \n // Execution stats\n public executionStats = {\n totalRuns: 0,\n successRate: 0,\n avgDuration: 0,\n lastRun: null as Date | null\n };\n \n // Code editor config\n public codeLanguage = 'typescript';\n public showCodeComments = false;\n \n private dialogService = inject(DialogService);\n private viewContainerRef = inject(ViewContainerRef);\n private sharedService = inject(SharedService);\n\n async ngOnInit() {\n await super.ngOnInit();\n \n if (this.record?.IsSaved) {\n // Load all related data in parallel\n await Promise.all([\n this.loadCategory(),\n this.loadActionParams(),\n this.loadResultCodes(),\n this.loadRecentExecutions(),\n this.loadActionLibraries(),\n this.loadExecutionStats()\n ]);\n this.cdr.detectChanges();\n }\n }\n \n /**\n * Override InternalSaveRecord to handle Action and related ActionParams in a transaction\n * This follows the same pattern as MJAIAgentFormComponent\n */\n protected async InternalSaveRecord(): Promise<boolean> {\n if (!this.record) {\n return false;\n }\n \n try {\n const md = new Metadata();\n const transactionGroup = await md.CreateTransactionGroup();\n \n // Set transaction group on the Action record\n this.record.TransactionGroup = transactionGroup;\n \n // Save the Action record first\n const actionSaved = await this.record.Save();\n \n if (!actionSaved) {\n console.error('Failed to save Action record');\n this.sharedService.CreateSimpleNotification('Failed to save Action record', 'error', 5000);\n return false;\n }\n \n // Process all pending records (params and result codes to save or delete)\n for (const pendingRecord of this.PendingRecords) {\n if (pendingRecord.entityObject.EntityInfo.Name === 'MJ: Action Params') {\n const param = pendingRecord.entityObject as MJActionParamEntity;\n \n // Ensure ActionID is set for new params\n if (!param.ActionID) {\n param.ActionID = this.record.ID;\n }\n \n param.TransactionGroup = transactionGroup;\n \n if (pendingRecord.action === 'save') {\n const saved = await param.Save();\n if (!saved) {\n console.error('Failed to save parameter:', param.Name);\n return false;\n }\n } else if (pendingRecord.action === 'delete') {\n const deleted = await param.Delete();\n if (!deleted) {\n console.error('Failed to delete parameter:', param.Name);\n return false;\n }\n }\n } else if (pendingRecord.entityObject.EntityInfo.Name === 'MJ: Action Result Codes') {\n const resultCode = pendingRecord.entityObject as MJActionResultCodeEntity;\n \n // Ensure ActionID is set for new result codes\n if (!resultCode.ActionID) {\n resultCode.ActionID = this.record.ID;\n }\n \n resultCode.TransactionGroup = transactionGroup;\n \n if (pendingRecord.action === 'save') {\n const saved = await resultCode.Save();\n if (!saved) {\n console.error('Failed to save result code:', resultCode.ResultCode);\n return false;\n }\n } else if (pendingRecord.action === 'delete') {\n const deleted = await resultCode.Delete();\n if (!deleted) {\n console.error('Failed to delete result code:', resultCode.ResultCode);\n return false;\n }\n }\n }\n }\n \n // Submit the transaction\n const success = await transactionGroup.Submit();\n \n if (success) {\n // Clear pending records after successful save\n this.PendingRecords.length = 0;\n this.paramsToDelete = [];\n this.resultCodesToDelete = [];\n \n // Reload params and result codes to get updated data\n await Promise.all([\n this.loadActionParams(),\n this.loadResultCodes()\n ]);\n \n // Show success message\n this.sharedService.CreateSimpleNotification('Action and related records saved successfully', 'success', 3000);\n }\n \n return success;\n \n } catch (error) {\n console.error('Error saving Action and parameters:', error);\n this.sharedService.CreateSimpleNotification('Error saving Action: ' + error, 'error', 5000);\n return false;\n }\n }\n\n private async loadCategory() {\n if (!this.record.CategoryID) return;\n \n try {\n const md = new Metadata();\n this.category = await md.GetEntityObject<MJActionCategoryEntity>('MJ: Action Categories');\n if (this.category) {\n await this.category.Load(this.record.CategoryID);\n }\n } catch (error) {\n // Error loading category\n }\n }\n\n private async loadActionParams() {\n this.isLoadingParams = true;\n try {\n const rv = new RunView();\n const result = await rv.RunView<MJActionParamEntity>({\n EntityName: 'MJ: Action Params',\n ExtraFilter: `ActionID='${this.record.ID}'`,\n OrderBy: 'Name',\n ResultType: 'entity_object' // This ensures we get proper entity instances\n });\n \n if (result.Success) {\n this.actionParams = result.Results || [];\n // Update cached filtered params - trim and lowercase Type values to handle any whitespace and case\n this._inputParams = this.actionParams.filter(p => {\n const type = p.Type?.trim().toLowerCase();\n return type === 'input' || type === 'both';\n });\n this._outputParams = this.actionParams.filter(p => {\n const type = p.Type?.trim().toLowerCase();\n return type === 'output' || type === 'both';\n });\n } else {\n // Failed to load action params\n this.actionParams = [];\n this._inputParams = [];\n this._outputParams = [];\n }\n } catch (error) {\n // Error loading action params\n this.actionParams = [];\n this._inputParams = [];\n this._outputParams = [];\n } finally {\n this.isLoadingParams = false;\n }\n }\n\n private async loadResultCodes() {\n this.isLoadingResultCodes = true;\n try {\n const rv = new RunView();\n const result = await rv.RunView<MJActionResultCodeEntity>({\n EntityName: 'MJ: Action Result Codes',\n ExtraFilter: `ActionID='${this.record.ID}'`,\n OrderBy: 'IsSuccess DESC, ResultCode',\n ResultType: 'entity_object' // This ensures we get proper entity instances\n });\n \n if (result.Success) {\n this.resultCodes = result.Results || [];\n } else {\n // Failed to load result codes\n this.resultCodes = [];\n }\n } catch (error) {\n // Error loading result codes\n this.resultCodes = [];\n } finally {\n this.isLoadingResultCodes = false;\n }\n }\n\n private async loadRecentExecutions() {\n this.isLoadingExecutions = true;\n try {\n const rv = new RunView();\n const result = await rv.RunView<MJActionExecutionLogEntity>({\n EntityName: 'MJ: Action Execution Logs',\n ExtraFilter: `ActionID='${this.record.ID}'`,\n OrderBy: 'StartedAt DESC',\n MaxRows: 10 \n });\n \n if (result.Success) {\n this.recentExecutions = result.Results || [];\n } else {\n // Failed to load executions\n this.recentExecutions = [];\n }\n } catch (error) {\n // Error loading executions\n this.recentExecutions = [];\n } finally {\n this.isLoadingExecutions = false;\n }\n }\n\n private async loadActionLibraries() {\n this.isLoadingLibraries = true;\n try {\n const rv = new RunView();\n const result = await rv.RunView<MJActionLibraryEntity>({\n EntityName: 'MJ: Action Libraries',\n ExtraFilter: `ActionID='${this.record.ID}'`,\n OrderBy: 'Library' \n });\n \n if (result.Success) {\n this.actionLibraries = result.Results || [];\n \n // Load library details\n if (this.actionLibraries.length > 0) {\n const libraryIds = this.actionLibraries.map(al => al.LibraryID).filter(id => id);\n const md = new Metadata();\n this.libraries = [];\n \n for (const libId of libraryIds) {\n const lib = await md.GetEntityObject<MJLibraryEntity>('MJ: Libraries');\n if (lib && libId) {\n await lib.Load(libId);\n this.libraries.push(lib);\n }\n }\n }\n }\n } catch (error) {\n // Error loading libraries\n } finally {\n this.isLoadingLibraries = false;\n }\n }\n\n private async loadExecutionStats() {\n try {\n const rv = new RunView();\n // Load ALL executions for accurate statistics\n const result = await rv.RunView<MJActionExecutionLogEntity>({\n EntityName: 'MJ: Action Execution Logs',\n ExtraFilter: `ActionID='${this.record.ID}'`,\n OrderBy: 'StartedAt DESC' \n });\n \n if (result.Success && result.Results && result.Results.length > 0) {\n const allExecutions = result.Results;\n this.executionStats.totalRuns = allExecutions.length;\n \n // Calculate success rate based on result codes\n const successfulRuns = allExecutions.filter(e => {\n const resultCode = this.resultCodes.find(rc => rc.ResultCode === e.ResultCode);\n return resultCode?.IsSuccess || false;\n });\n \n this.executionStats.successRate = this.executionStats.totalRuns > 0 \n ? (successfulRuns.length / this.executionStats.totalRuns) * 100 \n : 0;\n \n // Calculate average duration from ALL completed executions\n const completedExecutions = allExecutions.filter(e => e.StartedAt && e.EndedAt);\n if (completedExecutions.length > 0) {\n const totalDuration = completedExecutions.reduce((sum, e) => {\n const duration = new Date(e.EndedAt!).getTime() - new Date(e.StartedAt).getTime();\n // Use absolute value to handle any swapped dates\n return sum + Math.abs(duration);\n }, 0);\n this.executionStats.avgDuration = totalDuration / completedExecutions.length;\n }\n \n // Get last run date from most recent execution\n this.executionStats.lastRun = new Date(allExecutions[0].StartedAt);\n }\n } catch (error) {\n // Error loading execution stats\n }\n }\n\n // UI Helper Methods\n getStatusColor(): string {\n switch (this.record.Status) {\n case 'Active': return 'var(--mj-status-success)';\n case 'Pending': return 'var(--mj-status-warning)';\n case 'Disabled': return 'var(--mj-status-error)';\n default: return 'var(--mj-text-muted)';\n }\n }\n\n getStatusIcon(): string {\n switch (this.record.Status) {\n case 'Active': return 'fa-check-circle';\n case 'Pending': return 'fa-clock';\n case 'Disabled': return 'fa-ban';\n default: return 'fa-question-circle';\n }\n }\n\n getTypeColor(): string {\n return this.record.Type === 'Generated' ? 'var(--mj-brand-primary)' : 'var(--mj-brand-primary)';\n }\n\n getTypeIcon(): string {\n return this.record.Type === 'Generated' ? 'fa-robot' : 'fa-code';\n }\n\n getApprovalStatusColor(): string {\n switch (this.record.CodeApprovalStatus) {\n case 'Approved': return 'var(--mj-status-success)';\n case 'Pending': return 'var(--mj-status-warning)';\n case 'Rejected': return 'var(--mj-status-error)';\n default: return 'var(--mj-text-muted)';\n }\n }\n\n getApprovalStatusIcon(): string {\n switch (this.record.CodeApprovalStatus) {\n case 'Approved': return 'fa-check-circle';\n case 'Pending': return 'fa-clock';\n case 'Rejected': return 'fa-times-circle';\n default: return 'fa-question-circle';\n }\n }\n\n getParamTypeIcon(type: string): string {\n switch (type) {\n case 'Input': return 'fa-sign-in-alt';\n case 'Output': return 'fa-sign-out-alt';\n case 'Both': return 'fa-exchange-alt';\n default: return 'fa-question';\n }\n }\n\n getParamTypeColor(type: string): string {\n switch (type) {\n case 'Input': return 'var(--mj-brand-primary)';\n case 'Output': return 'var(--mj-status-success)';\n case 'Both': return 'var(--mj-brand-primary)';\n default: return 'var(--mj-text-muted)';\n }\n }\n\n formatDuration(ms: number): string {\n if (ms < 1000) return `${ms}ms`;\n if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`;\n return `${(ms / 60000).toFixed(1)}m`;\n }\n\n formatDate(date: Date | string | null): string {\n if (!date) return 'Never';\n const d = typeof date === 'string' ? new Date(date) : date;\n const now = new Date();\n const diff = now.getTime() - d.getTime();\n \n if (diff < 60000) return 'Just now';\n if (diff < 3600000) return `${Math.floor(diff / 60000)}m ago`;\n if (diff < 86400000) return `${Math.floor(diff / 3600000)}h ago`;\n if (diff < 604800000) return `${Math.floor(diff / 86400000)}d ago`;\n \n return d.toLocaleDateString();\n }\n\n // Navigation\n navigateToEntity(entityName: string, recordId: string | null) {\n if (!recordId) return;\n SharedService.Instance.OpenEntityRecord(entityName, CompositeKey.FromID(recordId));\n }\n\n navigateToCategory() {\n if (this.record.CategoryID) {\n this.navigateToEntity('MJ: Action Categories', this.record.CategoryID);\n }\n }\n\n navigateToExecution(executionId: string) {\n this.navigateToEntity('MJ: Action Execution Logs', executionId);\n }\n\n navigateToLibrary(libraryId: string) {\n this.navigateToEntity('MJ: Libraries', libraryId);\n }\n\n // Actions\n openTestHarness() {\n if (!this.record || !this.record.ID || !this.record.IsSaved || this.record.Status !== 'Active') {\n // Cannot open test harness: Action must be saved and active\n return;\n }\n \n this.showTestHarness = true;\n }\n \n /**\n * Event handler for test harness visibility changes\n */\n public onTestHarnessVisibilityChanged(isVisible: boolean) {\n this.showTestHarness = isVisible;\n }\n\n async regenerateCode() {\n if (!this.EditMode) return;\n \n this.record.ForceCodeGeneration = true;\n await this.record.Save();\n // Reload related data after save\n await this.loadResultCodes();\n }\n\n toggleCodeComments() {\n this.showCodeComments = !this.showCodeComments;\n }\n\n async approveCode() {\n if (!this.EditMode) return;\n \n this.record.CodeApprovalStatus = 'Approved';\n this.record.CodeApprovedAt = new Date();\n // Note: CodeApprovedByUserID would be set server-side\n await this.record.Save();\n }\n\n async rejectCode() {\n if (!this.EditMode) return;\n\n this.record.CodeApprovalStatus = 'Rejected';\n await this.record.Save();\n }\n\n async copyToClipboard(text: string) {\n try {\n await navigator.clipboard.writeText(text);\n // Could add a notification here\n } catch (err) {\n // Failed to copy\n }\n }\n\n // Helper methods for template filtering\n getInputParams(): MJActionParamEntity[] {\n // Sort by IsRequired (required first) then by Name\n return this._inputParams.sort((a, b) => {\n if (a.IsRequired === b.IsRequired) {\n return (a.Name || '').localeCompare(b.Name || '');\n }\n return a.IsRequired ? -1 : 1;\n });\n }\n\n getOutputParams(): MJActionParamEntity[] {\n // Sort by Name\n return this._outputParams.sort((a, b) => (a.Name || '').localeCompare(b.Name || ''));\n }\n\n isExecutionSuccess(execution: MJActionExecutionLogEntity): boolean {\n const code = execution.ResultCode?.toLowerCase();\n // First check if we have a result code definition\n const resultCode = this.resultCodes.find(rc => rc.ResultCode === execution.ResultCode);\n if (resultCode) {\n return resultCode.IsSuccess;\n }\n // Fallback to common success patterns if no result code defined\n return code === 'success' || code === 'ok' || code === 'completed' || code === '200';\n }\n\n getExecutionDuration(execution: MJActionExecutionLogEntity): number {\n if (!execution.EndedAt) return 0;\n \n const startTime = new Date(execution.StartedAt).getTime();\n const endTime = new Date(execution.EndedAt).getTime();\n const duration = endTime - startTime;\n \n // Return absolute value to handle timezone mismatches\n return Math.abs(duration);\n }\n\n getSuccessRateColor(): string {\n const rate = this.executionStats.successRate;\n if (rate >= 80) return 'var(--mj-status-success)';\n if (rate >= 60) return 'var(--mj-status-warning)';\n return 'var(--mj-status-error)';\n }\n\n // Parameter management methods\n async addParameter(type: 'Input' | 'Output' | 'Both') {\n if (!this.EditMode || !this.record.IsSaved) return;\n \n const md = new Metadata();\n const newParam = await md.GetEntityObject<MJActionParamEntity>('MJ: Action Params');\n \n // Set default values\n newParam.ActionID = this.record.ID;\n newParam.Name = '';\n newParam.Type = type;\n newParam.ValueType = 'Scalar';\n newParam.IsRequired = false;\n newParam.IsArray = false;\n \n const dialogRef = this.dialogService.open({\n content: ActionParamDialogComponent,\n width: 500,\n appendTo: this.viewContainerRef\n });\n \n const dialog = dialogRef.content.instance;\n dialog.param = newParam;\n dialog.isNew = true;\n dialog.editMode = true;\n \n dialogRef.result.subscribe(result => {\n if (result && (result as any).save) {\n // The dialog has already modified the newParam entity directly\n // New entities are automatically dirty (IsSaved = false)\n \n // Add to local array\n this.actionParams.push(newParam);\n \n // Add to pending records for saving\n this.PendingRecords.push({\n entityObject: newParam,\n action: 'save'\n });\n \n // Update the filtered arrays\n this.updateParamArrays();\n this.cdr.detectChanges();\n }\n });\n }\n\n async editParameter(param: MJActionParamEntity) {\n const dialogRef = this.dialogService.open({\n content: ActionParamDialogComponent,\n width: 500,\n appendTo: this.viewContainerRef\n });\n \n const dialog = dialogRef.content.instance;\n dialog.param = param;\n dialog.isNew = false;\n dialog.editMode = this.EditMode;\n \n dialogRef.result.subscribe(result => {\n if (result && (result as any).save && this.EditMode) {\n // Param will be dirty from property changes in dialog\n // Ensure it's in pending records if modified\n if (param.Dirty) {\n const exists = this.PendingRecords.some(pr => \n pr.entityObject === param && pr.action === 'save'\n );\n if (!exists) {\n this.PendingRecords.push({\n entityObject: param,\n action: 'save'\n });\n }\n }\n \n // Update the local arrays\n this.updateParamArrays();\n this.cdr.detectChanges();\n }\n });\n }\n \n onParamClick(param: MJActionParamEntity, event: Event) {\n // Prevent event bubbling if clicking on edit/delete buttons\n const target = event.target as HTMLElement;\n if (target.closest('.param-edit-btn') || target.closest('.param-delete-btn')) {\n return;\n }\n \n // Show the parameter dialog\n this.editParameter(param);\n }\n\n \n private async updateParamArrays() {\n // Update cached filtered params - exclude deleted items\n const activeParams = this.actionParams.filter(p => !this.paramsToDelete || !this.paramsToDelete.includes(p));\n \n this._inputParams = activeParams.filter(p => {\n const type = p.Type?.trim().toLowerCase();\n return type === 'input' || type === 'both';\n });\n \n this._outputParams = activeParams.filter(p => {\n const type = p.Type?.trim().toLowerCase();\n return type === 'output' || type === 'both';\n });\n }\n \n // Override to populate pending records with our action params and result codes\n protected PopulatePendingRecords() {\n // Preserve existing pending records before base class clears them\n const currentPendingRecords = [...this.PendingRecords];\n \n // Call parent to handle child components\n super.PopulatePendingRecords();\n \n // Re-add our preserved records\n for (const record of currentPendingRecords) {\n // Only re-add if it's an Action Param or Result Code (avoid duplicates)\n if (record.entityObject.EntityInfo.Name === 'MJ: Action Params' || \n record.entityObject.EntityInfo.Name === 'MJ: Action Result Codes') {\n const exists = this.PendingRecords.some(pr => \n pr.entityObject === record.entityObject\n );\n if (!exists) {\n this.PendingRecords.push(record);\n }\n }\n }\n \n // Add action params that need saving\n for (const param of this.actionParams) {\n if (!param.IsSaved || param.Dirty) {\n // Check if not already in pending records\n const exists = this.PendingRecords.some(pr => \n pr.entityObject === param\n );\n if (!exists) {\n this.PendingRecords.push({\n entityObject: param,\n action: 'save'\n });\n }\n }\n }\n \n // Add params marked for deletion\n for (const param of this.paramsToDelete) {\n if (param.IsSaved) {\n // Check if not already in pending records\n const exists = this.PendingRecords.some(pr => \n pr.entityObject === param\n );\n if (!exists) {\n this.PendingRecords.push({\n entityObject: param,\n action: 'delete'\n });\n }\n }\n }\n \n // Add result codes that need saving\n for (const resultCode of this.resultCodes) {\n if (!resultCode.IsSaved || resultCode.Dirty) {\n // Check if not already in pending records\n const exists = this.PendingRecords.some(pr => \n pr.entityObject === resultCode\n );\n if (!exists) {\n this.PendingRecords.push({\n entityObject: resultCode,\n action: 'save'\n });\n }\n }\n }\n \n // Add result codes marked for deletion\n for (const resultCode of this.resultCodesToDelete) {\n if (resultCode.IsSaved) {\n // Check if not already in pending records\n const exists = this.PendingRecords.some(pr => \n pr.entityObject === resultCode\n );\n if (!exists) {\n this.PendingRecords.push({\n entityObject: resultCode,\n action: 'delete'\n });\n }\n }\n }\n }\n \n /**\n * Gets the action's display icon\n * Falls back to default cog icon if no IconClass is set\n */\n public getActionIcon(): string {\n return this.record?.IconClass || 'fa-solid fa-cog';\n }\n \n // Result Code management methods\n async addResultCode() {\n if (!this.EditMode || !this.record.IsSaved) return;\n \n const md = new Metadata();\n const newResultCode = await md.GetEntityObject<MJActionResultCodeEntity>('MJ: Action Result Codes');\n \n // Set default values\n newResultCode.ActionID = this.record.ID;\n newResultCode.ResultCode = '';\n newResultCode.Description = '';\n newResultCode.IsSuccess = false;\n \n const dialogRef = this.dialogService.open({\n content: ActionResultCodeDialogComponent,\n width: 500,\n appendTo: this.viewContainerRef\n });\n \n const dialog = dialogRef.content.instance;\n dialog.resultCode = newResultCode;\n dialog.isNew = true;\n dialog.editMode = true;\n \n dialogRef.result.subscribe(result => {\n if (result && (result as any).save) {\n // Add to local array\n this.resultCodes.push(newResultCode);\n \n // Add to pending records for saving\n this.PendingRecords.push({\n entityObject: newResultCode,\n action: 'save'\n });\n \n this.cdr.detectChanges();\n }\n });\n }\n \n async editResultCode(resultCode: MJActionResultCodeEntity) {\n const dialogRef = this.dialogService.open({\n content: ActionResultCodeDialogComponent,\n width: 500,\n appendTo: this.viewContainerRef\n });\n \n const dialog = dialogRef.content.instance;\n dialog.resultCode = resultCode;\n dialog.isNew = false;\n dialog.editMode = this.EditMode;\n \n dialogRef.result.subscribe(result => {\n if (result && (result as any).save && this.EditMode) {\n // Ensure it's in pending records if modified\n if (resultCode.Dirty) {\n const exists = this.PendingRecords.some(pr => \n pr.entityObject === resultCode && pr.action === 'save'\n );\n if (!exists) {\n this.PendingRecords.push({\n entityObject: resultCode,\n action: 'save'\n });\n }\n }\n \n this.cdr.detectChanges();\n }\n });\n }\n \n onResultCodeClick(resultCode: MJActionResultCodeEntity, event: Event) {\n // Prevent event bubbling if clicking on edit/delete buttons\n const target = event.target as HTMLElement;\n if (target.closest('.result-edit-btn') || target.closest('.result-delete-btn')) {\n return;\n }\n \n // Show the result code dialog\n this.editResultCode(resultCode);\n }\n \n /**\n * Delete a result code (marks for deletion on save)\n */\n deleteResultCode(resultCode: MJActionResultCodeEntity) {\n if (!this.EditMode) return;\n \n // Remove from main array\n const index = this.resultCodes.indexOf(resultCode);\n if (index > -1) {\n this.resultCodes.splice(index, 1);\n }\n \n // Handle pending records\n if (resultCode.IsSaved) {\n // Add to deletion list for saved result codes\n this.resultCodesToDelete.push(resultCode);\n \n // Add to pending records for deletion\n this.PendingRecords.push({\n entityObject: resultCode,\n action: 'delete'\n });\n } else {\n // For unsaved result codes, just remove from pending records\n const pendingIndex = this.PendingRecords.findIndex(pr => \n pr.entityObject === resultCode && pr.action === 'save'\n );\n if (pendingIndex >= 0) {\n this.PendingRecords.splice(pendingIndex, 1);\n }\n }\n \n this.cdr.detectChanges();\n }\n \n /**\n * Delete a parameter (marks for deletion on save)\n */\n deleteParameter(param: MJActionParamEntity) {\n if (!this.EditMode) return;\n \n // Remove from main array\n const index = this.actionParams.indexOf(param);\n if (index > -1) {\n this.actionParams.splice(index, 1);\n }\n \n // Handle pending records\n if (param.IsSaved) {\n // Add to deletion list for saved params\n this.paramsToDelete.push(param);\n \n // Add to pending records for deletion\n this.PendingRecords.push({\n entityObject: param,\n action: 'delete'\n });\n } else {\n // For unsaved params, just remove from pending records\n const pendingIndex = this.PendingRecords.findIndex(pr => \n pr.entityObject === param && pr.action === 'save'\n );\n if (pendingIndex >= 0) {\n this.PendingRecords.splice(pendingIndex, 1);\n }\n }\n \n // Update filtered arrays\n this.updateParamArrays();\n this.cdr.detectChanges();\n }\n}\n","<div class=\"record-form-container\">\n @if (record) {\n <form class=\"record-form\" #form=\"ngForm\">\n <mj-form-toolbar [Form]=\"this\"></mj-form-toolbar>\n\n <!-- Main Content Area -->\n <div class=\"action-main-area\" style=\"display: flex; flex-direction: column; height: 100%; overflow-y: auto;\">\n \n <!-- Header Section -->\n <div class=\"action-header\" style=\"flex-shrink: 0; padding: 20px; background: var(--mj-bg-surface-card); border-bottom: 2px solid var(--mj-border-default);\">\n <div style=\"display: flex; justify-content: space-between; align-items: flex-start; gap: 20px;\">\n \n <!-- Left: Action Info -->\n <div style=\"flex: 1; min-width: 0;\">\n <div style=\"display: flex; align-items: center; gap: 12px; margin-bottom: 8px;\">\n <i [class]=\"getActionIcon()\" [style.color]=\"getTypeColor()\" style=\"font-size: 1.4em;\"></i>\n @if (EditMode) {\n <kendo-textbox [(ngModel)]=\"record.Name\" \n name=\"actionName\"\n placeholder=\"Enter action name...\"\n style=\"font-size: 1.2em; font-weight: 600; min-width: 300px; flex: 1;\">\n </kendo-textbox>\n } @else {\n <h4 style=\"margin: 0; color: var(--mj-text-secondary); font-weight: 600; flex: 1;\">{{ record.Name || 'Untitled Action' }}</h4>\n <button kendoButton\n [themeColor]=\"record.Status === 'Active' ? 'success' : record.Status === 'Pending' ? 'warning' : 'error'\"\n size=\"small\"\n style=\"pointer-events: none; cursor: default;\">\n {{ record.Status }}\n </button>\n }\n </div>\n \n <!-- Status and Type Editors when in edit mode -->\n @if (EditMode) {\n <div style=\"display: flex; gap: 16px; margin-bottom: 12px; flex-wrap: wrap;\">\n <div>\n <label style=\"display: block; margin-bottom: 4px; font-weight: 600; color: var(--mj-text-secondary); font-size: 0.9em;\">Status</label>\n <kendo-dropdownlist [(ngModel)]=\"record.Status\"\n name=\"actionStatus\"\n [data]=\"[{text: 'Active', value: 'Active'}, {text: 'Pending', value: 'Pending'}, {text: 'Disabled', value: 'Disabled'}]\"\n textField=\"text\"\n valueField=\"value\"\n [valuePrimitive]=\"true\"\n style=\"width: 150px;\">\n </kendo-dropdownlist>\n </div>\n <div>\n <label style=\"display: block; margin-bottom: 4px; font-weight: 600; color: var(--mj-text-secondary); font-size: 0.9em;\">\n Type <span style=\"color: var(--mj-status-error);\">*</span>\n </label>\n <kendo-dropdownlist [(ngModel)]=\"record.Type\"\n name=\"actionType\"\n [data]=\"[{text: 'Generated', value: 'Generated'}, {text: 'Custom', value: 'Custom'}]\"\n textField=\"text\"\n valueField=\"value\"\n [valuePrimitive]=\"true\"\n style=\"width: 150px;\">\n </kendo-dropdownlist>\n </div>\n <div>\n <label style=\"display: block; margin-bottom: 4px; font-weight: 600; color: var(--mj-text-secondary); font-size: 0.9em;\">\n Category <span style=\"color: var(--mj-status-error);\">*</span>\n </label>\n <kendo-dropdownlist [(ngModel)]=\"record.CategoryID\"\n name=\"categoryID\"\n [data]=\"[]\"\n placeholder=\"Select category...\"\n style=\"width: 200px;\">\n </kendo-dropdownlist>\n </div>\n </div>\n }\n \n @if (EditMode) {\n <kendo-textarea [(ngModel)]=\"record.Description\" \n name=\"actionDescription\"\n [rows]=\"2\"\n placeholder=\"Enter action description...\"\n style=\"width: 100%; max-width: 600px; margin-bottom: 12px;\">\n </kendo-textarea>\n } @else if (record.Description) {\n <p style=\"margin: 0 0 12px 0; color: var(--mj-text-muted); font-size: 0.9em; line-height: 1.4;\">{{ record.Description }}</p>\n }\n \n <!-- Quick Config Row -->\n <div class=\"quick-config\" style=\"display: flex; align-items: center; gap: 16px; flex-wrap: wrap;\">\n @if (category) {\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-folder\" style=\"color: var(--mj-text-muted);\"></i>\n <span style=\"color: var(--mj-text-muted);\">Category:</span>\n <span style=\"color: var(--mj-text-secondary); font-weight: 500; cursor: pointer;\" (click)=\"navigateToCategory()\">\n {{ category.Name }}\n <i class=\"fa-solid fa-external-link\" style=\"font-size: 0.75em; margin-left: 4px;\"></i>\n </span>\n </div>\n }\n \n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-cube\" style=\"color: var(--mj-text-muted);\"></i>\n <span style=\"color: var(--mj-text-muted);\">Type:</span>\n <span style=\"color: var(--mj-text-secondary); font-weight: 500;\">{{ record.Type }}</span>\n </div>\n \n @if (record.Type === 'Generated' && record.CodeApprovalStatus) {\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i [class]=\"'fa-solid ' + getApprovalStatusIcon()\" [style.color]=\"getApprovalStatusColor()\"></i>\n <span style=\"color: var(--mj-text-muted);\">Code:</span>\n <span [style.color]=\"getApprovalStatusColor()\" style=\"font-weight: 500;\">{{ record.CodeApprovalStatus }}</span>\n </div>\n }\n \n @if (actionParams.length > 0) {\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-sliders\" style=\"color: var(--mj-text-muted);\"></i>\n <span style=\"color: var(--mj-text-secondary); font-weight: 500;\">{{ actionParams.length }} Parameters</span>\n </div>\n }\n </div>\n </div>\n \n <!-- Right: Action Buttons -->\n <div class=\"action-buttons\" style=\"display: flex; flex-direction: column; gap: 8px; align-items: flex-end;\">\n <div style=\"display: flex; gap: 8px;\">\n @if (record.ID) {\n <button kendoButton themeColor=\"primary\" size=\"large\"\n (click)=\"openTestHarness()\"\n title=\"Open Run Harness\"\n [disabled]=\"record.Status !== 'Active'\">\n <i class=\"fa-solid fa-play\"></i> Run\n </button>\n }\n @if (EditMode && record.Type === 'Generated') {\n <button kendoButton themeColor=\"info\" size=\"medium\"\n (click)=\"regenerateCode()\"\n title=\"Regenerate Code\">\n <i class=\"fa-solid fa-robot\"></i> Regenerate\n </button>\n }\n </div>\n \n @if (EditMode && record.CodeApprovalStatus === 'Pending' && record.Type === 'Generated') {\n <div style=\"display: flex; gap: 8px;\">\n <button kendoButton themeColor=\"success\" size=\"small\"\n (click)=\"approveCode()\">\n <i class=\"fa-solid fa-check\"></i> Approve\n </button>\n <button kendoButton themeColor=\"error\" size=\"small\"\n (click)=\"rejectCode()\">\n <i class=\"fa-solid fa-times\"></i> Reject\n </button>\n </div>\n }\n \n @if (!EditMode && record.Status !== 'Active' && record.ID) {\n <div style=\"font-size: 0.75em; color: var(--mj-status-error); text-align: right;\">\n Action must be Active to execute\n </div>\n }\n </div>\n </div>\n </div>\n\n <!-- Configuration Sections with Expansion Panels -->\n <div class=\"configuration-sections\" style=\"flex: 1; background: var(--mj-bg-surface-card); border-top: 2px solid var(--mj-border-default); padding: 16px; min-height: 0;\">\n \n <!-- Parameters Section (FIRST) -->\n <kendo-expansionpanel \n [expanded]=\"true\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-sliders\" style=\"color: var(--mj-text-muted);\"></i>\n Parameters\n @if (actionParams.length > 0) {\n <span style=\"background: var(--mj-status-info); color: var(--mj-text-inverse); padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n {{ actionParams.length }}\n </span>\n }\n </span>\n </ng-template>\n \n <div style=\"padding: 16px;\">\n @if (isLoadingParams) {\n <div class=\"loading-state\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Loading parameters...\n </div>\n } @else if (actionParams.length === 0) {\n <div class=\"empty-state\" style=\"padding: 30px; text-align: center;\">\n <i class=\"fa-solid fa-sliders\" style=\"font-size: 2em; color: var(--mj-text-muted); opacity: 0.3;\"></i>\n <p style=\"margin: 12px 0 0 0; color: var(--mj-text-muted);\">No parameters defined</p>\n @if (EditMode && record.IsSaved) {\n <p style=\"margin: 8px 0 0 0; font-size: 0.85em; color: var(--mj-text-muted);\">Add parameters to define inputs and outputs for this action</p>\n }\n </div>\n } @else {\n <!-- Input Parameters Grid -->\n <div class=\"params-section\">\n <div class=\"params-header\">\n <h3><i class=\"fa-solid fa-sign-in-alt\"></i> Input Parameters</h3>\n @if (EditMode && record.IsSaved) {\n <button kendoButton fillMode=\"flat\" size=\"small\" (click)=\"addParameter('Input')\">\n <i class=\"fa-solid fa-plus\"></i> Add Input\n </button>\n }\n </div>\n \n @if (getInputParams().length === 0) {\n <div class=\"empty-state\" style=\"padding: 30px; text-align: center;\">\n <i class=\"fa-solid fa-inbox\" style=\"font-size: 2em; color: var(--mj-text-muted); opacity: 0.3;\"></i>\n <p style=\"margin: 12px 0 0 0; color: var(--mj-text-muted);\">No input parameters defined</p>\n </div>\n } @else {\n <div class=\"params-grid\">\n @for (param of getInputParams(); track param.ID) {\n <div class=\"param-card\" [class.required]=\"param.IsRequired\" \n [class.clickable]=\"true\"\n (click)=\"onParamClick(param, $event)\">\n <div class=\"param-header\">\n <span class=\"param-name\">{{ param.Name }}</span>\n <div class=\"param-badges\">\n @if (param.IsRequired) {\n <span class=\"required-badge\">Required</span>\n }\n @if (param.IsArray) {\n <span class=\"array-badge\">Array</span>\n }\n @if (EditMode) {\n <button class=\"param-edit-btn\" (click)=\"editParameter(param)\" title=\"Edit parameter\">\n <i class=\"fa-solid fa-edit\"></i>\n </button>\n <button class=\"param-delete-btn\" (click)=\"deleteParameter(param)\" title=\"Delete parameter\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n }\n </div>\n </div>\n <div class=\"param-details\">\n <div class=\"param-type\">{{ param.ValueType }}</div>\n @if (param.Description) {\n <div class=\"param-description\">{{ param.Description }}</div>\n }\n @if (param.DefaultValue) {\n <div class=\"param-default\">\n <span class=\"default-label\">Default:</span>\n <code>{{ param.DefaultValue }}</code>\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Output Parameters Grid -->\n <div class=\"params-section\" style=\"margin-top: 24px;\" \n [class.params-section-compact]=\"getOutputParams().length === 0\">\n <div class=\"params-header\">\n <h3><i class=\"fa-solid fa-sign-out-alt\"></i> Output Parameters</h3>\n @if (EditMode && record.IsSaved) {\n <button kendoButton fillMode=\"flat\" size=\"small\" (click)=\"addParameter('Output')\">\n <i class=\"fa-solid fa-plus\"></i> Add Output\n </button>\n }\n </div>\n \n @if (getOutputParams().length === 0) {\n <div class=\"empty-state\" style=\"padding: 20px; text-align: center;\">\n <i class=\"fa-solid fa-inbox\" style=\"font-size: 2em; color: var(--mj-text-muted); opacity: 0.3;\"></i>\n <p style=\"margin: 12px 0 0 0; color: var(--mj-text-muted);\">No output parameters defined</p>\n </div>\n } @else {\n <div class=\"params-grid\">\n @for (param of getOutputParams(); track param.ID) {\n <div class=\"param-card\"\n [class.clickable]=\"true\"\n (click)=\"onParamClick(param, $event)\">\n <div class=\"param-header\">\n <span class=\"param-name\">{{ param.Name }}</span>\n <div class=\"param-badges\">\n @if (param.IsArray) {\n <span class=\"array-badge\">Array</span>\n }\n @if (EditMode) {\n <button class=\"param-edit-btn\" (click)=\"editParameter(param)\" title=\"Edit parameter\">\n <i class=\"fa-solid fa-edit\"></i>\n </button>\n <button class=\"param-delete-btn\" (click)=\"deleteParameter(param)\" title=\"Delete parameter\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n }\n </div>\n </div>\n <div class=\"param-details\">\n <div class=\"param-type\">{{ param.ValueType }}</div>\n @if (param.Description) {\n <div class=\"param-description\">{{ param.Description }}</div>\n }\n @if (param.DefaultValue) {\n <div class=\"param-default\">\n <span class=\"default-label\">Default:</span>\n <code>{{ param.DefaultValue }}</code>\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n </kendo-expansionpanel>\n\n <!-- Code & Generation Section (Only for Generated type) -->\n @if (record.Type === 'Generated') {\n <kendo-expansionpanel \n [expanded]=\"expandedSections.code\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-code\" style=\"color: var(--mj-text-muted);\"></i>\n Code & Generation\n @if (record.CodeLocked) {\n <span style=\"background: var(--mj-status-warning); color: var(--mj-color-warning-800); padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n <i class=\"fa-solid fa-lock\"></i> Locked\n </span>\n }\n </span>\n </ng-template>\n \n <div style=\"padding: 16px;\">\n @if (EditMode) {\n <div class=\"generation-panel\">\n <h3><i class=\"fa-solid fa-robot\"></i> AI Generation</h3>\n <div class=\"prompt-section\">\n <label>User Prompt</label>\n <kendo-textarea [(ngModel)]=\"record.UserPrompt\"\n name=\"userPrompt\"\n [rows]=\"8\"\n placeholder=\"Describe what this action should do...\"\n style=\"width: 100%; min-height: 120px;\">\n </kendo-textarea>\n </div>\n <div class=\"comments-section\">\n <label>Internal Comments (not sent to AI)</label>\n <kendo-textarea [(ngModel)]=\"record.UserComments\"\n name=\"userComments\"\n [rows]=\"2\"\n placeholder=\"Internal notes...\"\n style=\"width: 100%;\">\n </kendo-textarea>\n </div>\n <div class=\"generation-controls\">\n <kendo-switch [(ngModel)]=\"record.CodeLocked\"\n name=\"codeLocked\">\n </kendo-switch>\n <label style=\"margin-left: 8px;\">Lock Code (prevent regeneration)</label>\n </div>\n </div>\n }\n \n <div class=\"code-editor-section\">\n <div class=\"code-toolbar\">\n <h3><i class=\"fa-solid fa-file-code\"></i> Action Code</h3>\n <div class=\"code-actions\">\n @if (record.CodeComments) {\n <button kendoButton fillMode=\"flat\" size=\"small\" (click)=\"toggleCodeComments()\">\n <i class=\"fa-solid fa-comment\"></i> \n {{ showCodeComments ? 'Hide' : 'Show' }} AI Comments\n </button>\n }\n <button kendoButton fillMode=\"flat\" size=\"small\" (click)=\"copyToClipboard(record.Code || '')\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n </div>\n </div>\n <mj-code-editor \n [(ngModel)]=\"record.Code\"\n name=\"actionCode\"\n [readonly]=\"!EditMode || record.CodeLocked\"\n [language]=\"codeLanguage\"\n [lineWrapping]=\"true\"\n style=\"height: 400px; width: 100%;\">\n </mj-code-editor>\n \n @if (showCodeComments && record.CodeComments) {\n <div class=\"code-comments\">\n <h4><i class=\"fa-solid fa-robot\"></i> AI Explanation</h4>\n <p>{{ record.CodeComments }}</p>\n </div>\n }\n \n @if (EditMode && record.CodeApprovalStatus === 'Rejected') {\n <div class=\"approval-comments\">\n <label>Rejection Comments</label>\n <kendo-textarea [(ngModel)]=\"record.CodeApprovalComments\"\n name=\"codeApprovalComments\"\n [rows]=\"2\"\n placeholder=\"Explain why the code was rejected...\"\n style=\"width: 100%;\">\n </kendo-textarea>\n </div>\n }\n </div>\n </div>\n </kendo-expansionpanel>\n }\n\n <!-- Result Codes Section -->\n <kendo-expansionpanel \n [expanded]=\"expandedSections.resultCodes\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-flag-checkered\" style=\"color: var(--mj-text-muted);\"></i>\n Result Codes\n @if (resultCodes.length > 0) {\n <span style=\"background: var(--mj-status-success); color: var(--mj-text-inverse); padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n {{ resultCodes.length }}\n </span>\n }\n </span>\n </ng-template>\n \n <div style=\"padding: 16px;\">\n <!-- Add Result Code Button -->\n @if (EditMode && record.IsSaved) {\n <div style=\"display: flex; justify-content: flex-end; margin-bottom: 12px;\">\n <button kendoButton [primary]=\"true\" size=\"small\" (click)=\"addResultCode()\">\n <i class=\"fa-solid fa-plus\"></i> Add Result Code\n </button>\n </div>\n }\n \n @if (isLoadingResultCodes) {\n <div class=\"loading-state\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Loading result codes...\n </div>\n } @else if (resultCodes.length === 0) {\n <div class=\"empty-state\" style=\"padding: 30px; text-align: center;\">\n <i class=\"fa-solid fa-flag-checkered\" style=\"font-size: 2em; color: var(--mj-text-muted); opacity: 0.3;\"></i>\n <p style=\"margin: 12px 0 0 0; color: var(--mj-text-muted);\">No result codes defined</p>\n @if (EditMode && record.IsSaved) {\n <p style=\"margin: 8px 0 0 0; font-size: 0.85em; color: var(--mj-text-muted);\">Add result codes to define possible outcomes</p>\n }\n </div>\n } @else {\n <div class=\"result-codes-grid\">\n @for (code of resultCodes; track code.ID) {\n <div class=\"result-code-card\" \n [class.success]=\"code.IsSuccess\" \n [class.failure]=\"!code.IsSuccess\"\n [class.clickable]=\"true\"\n (click)=\"onResultCodeClick(code, $event)\">\n <div class=\"result-icon\">\n <i [class]=\"code.IsSuccess ? 'fa-solid fa-check-circle' : 'fa-solid fa-times-circle'\"></i>\n </div>\n <div class=\"result-content\">\n <div class=\"result-code\">{{ code.ResultCode }}</div>\n @if (code.Description) {\n <div class=\"result-description\">{{ code.Description }}</div>\n }\n </div>\n @if (EditMode) {\n <div class=\"result-actions\">\n <button class=\"result-edit-btn\" (click)=\"editResultCode(code); $event.stopPropagation()\" title=\"Edit result code\">\n <i class=\"fa-solid fa-edit\"></i>\n </button>\n <button class=\"result-delete-btn\" (click)=\"deleteResultCode(code); $event.stopPropagation()\" title=\"Delete result code\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n </kendo-expansionpanel>\n\n <!-- Execution & Monitoring Section -->\n @if (record.IsSaved) {\n <kendo-expansionpanel \n [expanded]=\"expandedSections.execution\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-chart-line\" style=\"color: var(--mj-text-muted);\"></i>\n Execution & Monitoring\n </span>\n </ng-template>\n \n <div style=\"padding: 16px;\">\n @if (isLoadingExecutions) {\n <div class=\"loading-state\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Loading executions...\n </div>\n } @else if (recentExecutions.length === 0) {\n <div class=\"empty-state\" style=\"padding: 30px; text-align: center;\">\n <i class=\"fa-solid fa-chart-line\" style=\"font-size: 2em; color: var(--mj-text-muted); opacity: 0.3;\"></i>\n <p style=\"margin: 12px 0 0 0; color: var(--mj-text-muted);\">No executions yet</p>\n </div>\n } @else {\n <div class=\"execution-stats-row\">\n <div class=\"stat-box\">\n <i class=\"fa-solid fa-tachometer-alt\"></i>\n <div class=\"stat-info\">\n <div class=\"stat-label\" style=\"color: var(--mj-text-primary);\">Avg Duration</div>\n <div class=\"stat-value\" style=\"color: var(--mj-text-primary);\">{{ formatDuration(executionStats.avgDuration) }}</div>\n </div>\n </div>\n <div class=\"stat-box\">\n <i class=\"fa-solid fa-check-circle\" [style.color]=\"getSuccessRateColor()\"></i>\n <div class=\"stat-info\">\n <div class=\"stat-label\" style=\"color: var(--mj-text-primary);\">Success Rate</div>\n <div class=\"stat-value\" [style.color]=\"getSuccessRateColor()\" style=\"font-weight: 600;\">{{ executionStats.successRate.toFixed(0) }}%</div>\n </div>\n </div>\n <div class=\"stat-box\">\n <i class=\"fa-solid fa-play-circle\"></i>\n <div class=\"stat-info\">\n <div class=\"stat-label\" style=\"color: var(--mj-text-primary);\">Total Runs</div>\n <div class=\"stat-value\" style=\"color: var(--mj-text-primary);\">{{ executionStats.totalRuns }}</div>\n </div>\n </div>\n </div>\n\n <h3 style=\"margin-top: 24px;\"><i class=\"fa-solid fa-history\"></i> Recent Executions</h3>\n <div class=\"executions-table\">\n <table>\n <thead>\n <tr>\n <th>Started</th>\n <th>Duration</th>\n <th>User</th>\n <th>Result</th>\n <th>Actions</th>\n </tr>\n </thead>\n <tbody>\n @for (execution of recentExecutions; track execution.ID) {\n <tr class=\"execution-row\" [class.success]=\"isExecutionSuccess(execution)\">\n <td>{{ execution.StartedAt | date:'short' }}</td>\n <td>\n @if (execution.EndedAt) {\n {{ formatDuration(getExecutionDuration(execution)) }}\n } @else {\n <span class=\"running\">Running...</span>\n }\n </td>\n <td>{{ execution.User }}</td>\n <td>\n <span class=\"result-code\" \n [class.success]=\"isExecutionSuccess(execution)\"\n [class.failure]=\"!isExecutionSuccess(execution)\">\n {{ execution.ResultCode }}\n </span>\n </td>\n <td>\n <button kendoButton fillMode=\"flat\" size=\"small\" (click)=\"navigateToExecution(execution.ID)\">\n <i class=\"fa-solid fa-external-link\"></i>\n </button>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n </kendo-expansionpanel>\n }\n\n <!-- Related Configuration Section -->\n @if (record.IsSaved) {\n <kendo-expansionpanel \n [expanded]=\"expandedSections.configuration\"\n style=\"margin-bottom: 12px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-cogs\" style=\"color: var(--mj-text-muted);\"></i>\n Related Configuration\n </span>\n </ng-template>\n \n <div style=\"padding: 16px;\">\n <!-- Libraries -->\n <div class=\"config-subsection\">\n <h3><i class=\"fa-solid fa-book\"></i> Libraries</h3>\n @if (isLoadingLibraries) {\n <div class=\"loading-state\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Loading libraries...\n </div>\n } @else if (actionLibraries.length === 0) {\n <div class=\"empty-state mini\">\n <p>No libraries configured</p>\n </div>\n } @else {\n <div class=\"library-cards\">\n @for (lib of libraries; track lib.ID; let i = $index) {\n <div class=\"library-card\" (click)=\"navigateToLibrary(lib.ID)\">\n <i class=\"fa-solid fa-book\"></i>\n <div class=\"library-info\">\n <div class=\"library-name\">{{ lib.Name }}</div>\n @if (actionLibraries[i].ItemsUsed) {\n <div class=\"library-items\">{{ actionLibraries[i].ItemsUsed }}</div>\n }\n </div>\n <i class=\"fa-solid fa-external-link\"></i>\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Other Related Entities -->\n <div class=\"related-entities-grid\">\n <div class=\"related-entity-link\">\n <i class=\"fa-solid fa-shield-alt\"></i>\n <span>Authorizations</span>\n <span class=\"entity-count\">View</span>\n </div>\n <div class=\"related-entity-link\">\n <i class=\"fa-solid fa-layer-group\"></i>\n <span>Contexts</span>\n <span class=\"entity-count\">View</span>\n </div>\n <div class=\"related-entity-link\">\n <i class=\"fa-solid fa-calendar\"></i>\n <span>Scheduled Actions</span>\n <span class=\"entity-count\">View</span>\n </div>\n <div class=\"related-entity-link\">\n <i class=\"fa-solid fa-cube\"></i>\n <span>Entity Actions</span>\n <span class=\"entity-count\">View</span>\n </div>\n </div>\n </div>\n </kendo-expansionpanel>\n }\n </div>\n </div>\n </form>\n }\n</div>\n\n<!-- Action Test Harness Dialog -->\n<mj-action-test-harness-dialog\n [Action]=\"record\"\n [ActionParams]=\"actionParams\"\n [IsOpen]=\"showTestHarness\"\n (Close)=\"onTestHarnessVisibilityChanged(false)\">\n</mj-action-test-harness-dialog>"]}